diff -r 4e54af54a4a1 -r 6c59112cfd31 emailuis/nmsettingui/src/nmmailboxsettingview.cpp --- 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 #include #include +#include +#include #include "nmmailboxsettingview.h" #include "nmmailboxsettingsmanager.h" @@ -80,11 +82,13 @@ if (mForm) { qRegisterMetaType("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(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(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.