emailuis/nmsettingui/src/nmmailboxsettingview.cpp
changeset 74 6c59112cfd31
parent 68 83cc6bae1de8
--- a/emailuis/nmsettingui/src/nmmailboxsettingview.cpp	Wed Sep 15 17:47:19 2010 +0300
+++ b/emailuis/nmsettingui/src/nmmailboxsettingview.cpp	Thu Sep 30 11:43:07 2010 +0300
@@ -23,6 +23,8 @@
 #include <HbDataForm>
 #include <HbDataFormModel>
 #include <HbDocumentLoader>
+#include <HbLineEdit>
+#include <HbVkbHostBridge>
 
 #include "nmmailboxsettingview.h"
 #include "nmmailboxsettingsmanager.h"
@@ -80,11 +82,13 @@
     if (mForm) {
 
         qRegisterMetaType<QModelIndex>("QModelIndex");
+
         connect(mForm, SIGNAL(activated(QModelIndex)),
                 this, SLOT(itemActivated(QModelIndex)));
         connect(mForm, SIGNAL(itemShown(QModelIndex)),
                 this, SLOT(disablePredictiveText(QModelIndex)));
 
+
         // Fix for dataform item recycling.
         mForm->setItemRecycling(false);
 
@@ -183,6 +187,7 @@
 
     int type(index.data(HbDataFormModelItem::ItemTypeRole).toInt());
 
+
     if (type == HbDataFormModelItem::GroupItem) {
 
         // Scroll the groupitem to top.
@@ -220,6 +225,7 @@
         HbWidget *widget = item->dataItemContentWidget();
         if (widget) {
             widget->setInputMethodHints(Qt::ImhNoPredictiveText);
+            widget->installEventFilter(this);
 		}
     }
 }
@@ -235,4 +241,33 @@
 
     mForm->scrollTo(index, HbAbstractItemView::PositionAtTop);
 }
+
+/*!
+    Forces HbLineEdit to emit editingFinished when focus has been removed from it, if VKB is open.
+    NOTE: This can be removed when VKB handling is fixed by orbit so that editingFinished signal is
+          emitted when group box is collapsed.
+
+    \param watched object that eventFilter has installed to.
+    \param event occured event.
+*/
+bool NmMailboxSettingView::eventFilter(QObject *watched, QEvent *event)
+{
+    if (event->type() == QFocusEvent::FocusOut) {
+        QGraphicsItem *item = qobject_cast<QGraphicsItem *>(watched);
+        if (item && item->type() == Hb::ItemType_LineEdit) {
+            HbVkbHostBridge *instance = HbVkbHostBridge::instance();
+            // Only force emit if VKB is open.
+            if(instance && instance->keypadStatus() == HbVkbHost::HbVkbStatusOpened) {
+                HbLineEdit *edit = static_cast<HbLineEdit *>(item);
+                // Save settings.
+                connect(this, SIGNAL(emitEditingFinished()), edit, SIGNAL(editingFinished()));
+                emit emitEditingFinished();
+                disconnect(this, SIGNAL(emitEditingFinished()), edit, SIGNAL(editingFinished()));
+            }
+        }
+    }
+    // Event has not been consumed.
+    return false;
+}
+
 // End of file.