Make editors commit preedit themselves on losing focus
authorPekka Vuorela <pekka.ta.vuorela@nokia.com>
Mon, 5 Dec 2011 15:03:18 +0000 (17:03 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 20 Dec 2011 12:36:16 +0000 (13:36 +0100)
Change-Id: I1d42a8804068718c7347b4f652289f9724c25a3c
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
src/qtquick1/graphicsitems/qdeclarativetextinput.cpp
src/quick/items/qquickcanvas.cpp
src/quick/items/qquicktextinput.cpp

index e5fdcb2..a0a0c95 100644 (file)
@@ -1065,8 +1065,10 @@ void QDeclarative1TextInputPrivate::focusChanged(bool hasFocus)
     q->setCursorVisible(hasFocus && scene && scene->hasFocus());
     if(!hasFocus && control->passwordEchoEditing())
         control->updatePasswordEchoEditing(false);//QWidgetLineControl sets it on key events, but doesn't deal with focus events
-    if (!hasFocus)
+    if (!hasFocus) {
+        control->commitPreedit();
         control->deselect();
+    }
     QDeclarativeItemPrivate::focusChanged(hasFocus);
 }
 
index 0f281a3..5fd8f93 100644 (file)
@@ -383,7 +383,7 @@ void QQuickCanvasPrivate::setFocusInScope(QQuickItem *scope, QQuickItem *item, F
 
         if (oldActiveFocusItem) {
 #ifndef QT_NO_IM
-            qApp->inputPanel()->commit();
+            qApp->inputPanel()->reset();
 #endif
 
             activeFocusItem = 0;
@@ -492,7 +492,7 @@ void QQuickCanvasPrivate::clearFocusInScope(QQuickItem *scope, QQuickItem *item,
         Q_ASSERT(oldActiveFocusItem);
 
 #ifndef QT_NO_IM
-        qApp->inputPanel()->commit();
+        qApp->inputPanel()->reset();
 #endif
 
         activeFocusItem = 0;
index a114caf..b3387f5 100644 (file)
@@ -2004,8 +2004,11 @@ void QQuickTextInput::itemChange(ItemChange change, const ItemChangeData &value)
 #endif
             d->updatePasswordEchoEditing(false);//QQuickTextInputPrivate sets it on key events, but doesn't deal with focus events
         }
-        if (!hasFocus)
+
+        if (!hasFocus) {
+            d->commitPreedit();
             d->deselect();
+        }
     }
     QQuickItem::itemChange(change, value);
 }