src/hbcore/inputfw/hbinputmethod.cpp
changeset 28 b7da29130b0e
parent 23 e6ad4ef83b23
--- a/src/hbcore/inputfw/hbinputmethod.cpp	Thu Sep 02 20:44:51 2010 +0300
+++ b/src/hbcore/inputfw/hbinputmethod.cpp	Fri Sep 17 08:32:10 2010 +0300
@@ -189,7 +189,7 @@
     connect(&app, SIGNAL(aboutToQuit()), HbPredictionFactory::instance(), SLOT(shutDown()));
     connect(&app, SIGNAL(aboutToQuit()), HbExtraDictionaryFactory::instance(), SLOT(shutdown()));
 
-    HbInputMethod *master = HbInputMethodNull::Instance();
+    HbInputMethodNull *master = HbInputMethodNull::Instance();
 
     if (!master) {
         return false;
@@ -205,6 +205,16 @@
         app.setInputContext(proxy);
     }
 
+    if (master->delayedPanelRequest()) {
+        master->setDelayedPanelRequest(false);
+        QInputContext* ic = qApp->inputContext();
+        if (ic) {
+            QEvent *openEvent = new QEvent(QEvent::RequestSoftwareInputPanel);
+            ic->filterEvent(openEvent);
+            delete openEvent;
+        }
+    }
+
     return true;
 }
 
@@ -450,7 +460,7 @@
     // Delete previous focus object.
     if (d->mFocusObject) {
         refreshHost = true;
-        disconnect(d->mFocusObject, SIGNAL(editorDeleted()), this, SLOT(editorDeleted()));
+        disconnect(d->mFocusObject->object(), SIGNAL(destroyed(QObject *)), this, SLOT(editorDeleted(QObject *)));
     }
     delete d->mFocusObject;
     d->mFocusObject = 0;
@@ -481,11 +491,10 @@
 {
     Q_D(HbInputMethod);
 
-    if (d->mFocusObject && d->mFocusObject->object() == widget) {
+    if (d->proxy()->focusWidget() == widget) {
         delete d->mFocusObject;
         d->mFocusObject = 0;
-        // passing to actual QInputContext which is attached to Qt framework.
-        // which will internally set QInputContext::focusWidget to Null.
+        // update QInputContext internal focusWidget pointer.
         d->proxy()->QInputContext::widgetDestroyed(widget);
         d->proxy()->QInputContext::setFocusWidget(0);
     }
@@ -786,6 +795,19 @@
 }
 
 /*!
+Returns true if focus is locked. If focus is locked, input framework will ignore 
+all the incoming focus events completely until focus is unlocked.
+
+\sa lockFocus
+\sa unlockFocus
+*/
+bool HbInputMethod::isFocusLocked()
+{
+    Q_D(HbInputMethod);
+    return d->mFocusLocked;
+}
+
+/*!
 Removes input method focus and asks active input plugin to close its active UI-components
 (such as touch keypads). This may be needed in some special cases where the underlying
 application wants to make sure that there are no input related elements on the screen.