From 2220a26450eea133815e91bed7d1a71c848a99cc Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 25 Aug 2014 17:13:26 +0200 Subject: [PATCH] WIP: Query input method hints in Windows QPA plugin. TODO: Does not work; there does not seem to be a way to cancel the composition once WM_IME_STARTCOMPOSITION is received. Canceling in WM_IME_COMPOSITION does not work either, it immediately restarts. Task-number: QTBUG-40691 Change-Id: Idcab144e9d7dd77f6ead7ac2ee8219b8417d6e4b --- .../platforms/windows/qwindowsinputcontext.cpp | 26 +++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.cpp b/src/plugins/platforms/windows/qwindowsinputcontext.cpp index f8676c3..68ad4b0 100644 --- a/src/plugins/platforms/windows/qwindowsinputcontext.cpp +++ b/src/plugins/platforms/windows/qwindowsinputcontext.cpp @@ -334,12 +334,26 @@ bool QWindowsInputContext::startComposition(HWND hwnd) QWindow *window = qApp->focusWindow(); if (!window) return false; - qCDebug(lcQpaInputMethods) << __FUNCTION__ << fo << window; - if (!fo || QWindowsWindow::handleOf(window) != hwnd) - return false; - initContext(hwnd, fo); - startContextComposition(); - return true; + bool startComposition = false; + do { + if (!fo || QWindowsWindow::handleOf(window) != hwnd) + break; + const QVariant hintsV = QInputMethod::queryFocusObject(Qt::ImHints, QVariant()); + if (!hintsV.isValid()) // QQuickRootItem, etc do not have the query method. + break; + const Qt::InputMethodHints hints(hintsV.toInt()); + if (hints.testFlag(Qt::ImhHiddenText)) + break; + startComposition = true; + } while (false); + qCDebug(lcQpaInputMethods) << __FUNCTION__ << fo << window << "startComposition=" << startComposition; + if (startComposition) { + initContext(hwnd, fo); + startContextComposition(); + } else { + imeNotifyCancelComposition(hwnd); + } + return startComposition; } void QWindowsInputContext::startContextComposition() -- 1.9.4.msysgit.0