From b14550fa45395d6b57d958bb4a4e42212ba0da0f Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Date: Thu, 20 Aug 2015 14:51:53 +0200
Subject: [PATCH] Windows/Input context: Update enabling of IME in in update(),
 too.

Amend change b55f88caba339a49bf0ebabfa324dde523c2b866 by splitting
out the enabling into a separate function and call that when
QWindowsInputContext::update() is triggered to reflect updates
of the microfocus in QGraphicsView or item view widgets.

Task-number: QTBUG-47679
Task-number: QTBUG-47705
Task-number: QTBUG-40691
Change-Id: I84a6647944f1aaedcd72d7060cc90e29a177f577
Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
Reviewed-by: Andy Shaw <andy.shaw@theqtcompany.com>
---
 .../platforms/windows/qwindowsinputcontext.cpp  | 17 ++++++++++++++---
 .../platforms/windows/qwindowsinputcontext.h    |  1 +
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.cpp b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
index c9434385701..68e38dc4a6f 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.cpp
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
@@ -200,18 +200,27 @@ void QWindowsInputContext::reset()
     doneContext();
 }
 
-void QWindowsInputContext::setFocusObject(QObject *object)
+void QWindowsInputContext::setFocusObject(QObject *)
 {
     // ### fixme: On Windows 8.1, it has been observed that the Input context
     // remains active when this happens resulting in a lock-up. Consecutive
     // key events still have VK_PROCESSKEY set and are thus ignored.
     if (m_compositionContext.isComposing)
         reset();
+    updateEnabled();
+}
 
+void QWindowsInputContext::updateEnabled()
+{
+    if (!QGuiApplication::focusObject())
+        return;
     const QWindow *window = QGuiApplication::focusWindow();
-    if (object && window && window->handle()) {
+    if (window && window->handle()) {
         QWindowsWindow *platformWindow = QWindowsWindow::baseWindowOf(window);
-        if (inputMethodAccepted()) {
+        const bool accepted = inputMethodAccepted();
+        if (QWindowsContext::verbose > 1)
+            qCDebug(lcQpaInputMethods) << __FUNCTION__ << window << "accepted=" << accepted;
+        if (accepted) {
             // Re-enable IME by associating default context saved on first disabling.
             if (platformWindow->testFlag(QWindowsWindow::InputMethodDisabled)) {
                 ImmAssociateContext(platformWindow->handle(), QWindowsInputContext::m_defaultContext);
@@ -235,6 +244,8 @@ void QWindowsInputContext::setFocusObject(QObject *object)
 
 void QWindowsInputContext::update(Qt::InputMethodQueries queries)
 {
+    if (queries & Qt::ImEnabled)
+        updateEnabled();
     QPlatformInputContext::update(queries);
 }
 
diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.h b/src/plugins/platforms/windows/qwindowsinputcontext.h
index 83a39989f6f..110986c20c4 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.h
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.h
@@ -87,6 +87,7 @@ private:
     void doneContext();
     void startContextComposition();
     void endContextComposition();
+    void updateEnabled();
 
     const DWORD m_WM_MSIME_MOUSE;
     static HIMC m_defaultContext;
-- 
GitLab