diff options
author | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2016-09-09 13:55:57 +0200 |
---|---|---|
committer | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2016-09-15 14:26:01 +0000 |
commit | 60da6313cf990ebf341cc688b20fd60a67f53dd2 (patch) | |
tree | 170cea4f149136a9651649b2cece4d7fc89e14ca /src/plugins/platforms/winrt | |
parent | 6320ca79e956241f9dfab829be9cb3800339fdb3 (diff) |
winrt: Fix initialization of input context
f104e43a72380f66f8c517b90326a9209612106d moved QWinRTInputContext to the
gui thread. However, IInputPane needs to be queried from Xaml itself.
Otherwise it might cause unhandled exceptions.
Change-Id: I43848c796e7ff163e6befa7c58f0ad68445b9865
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Diffstat (limited to 'src/plugins/platforms/winrt')
-rw-r--r-- | src/plugins/platforms/winrt/qwinrtinputcontext.cpp | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/src/plugins/platforms/winrt/qwinrtinputcontext.cpp b/src/plugins/platforms/winrt/qwinrtinputcontext.cpp index 968c47f2c2..63e5b0cf27 100644 --- a/src/plugins/platforms/winrt/qwinrtinputcontext.cpp +++ b/src/plugins/platforms/winrt/qwinrtinputcontext.cpp @@ -86,30 +86,31 @@ QWinRTInputContext::QWinRTInputContext(QWinRTScreen *screen) { qCDebug(lcQpaInputMethods) << __FUNCTION__ << screen; - ComPtr<IInputPaneStatics> statics; - if (FAILED(GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_UI_ViewManagement_InputPane).Get(), - &statics))) { - qWarning("failed to retrieve input pane statics."); - return; - } + QEventDispatcherWinRT::runOnXamlThread([this]() { + ComPtr<IInputPaneStatics> statics; + if (FAILED(GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_UI_ViewManagement_InputPane).Get(), + &statics))) { + qWarning("failed to retrieve input pane statics."); + return S_OK; + } - ComPtr<IInputPane> inputPane; - statics->GetForCurrentView(&inputPane); - if (inputPane) { - QEventDispatcherWinRT::runOnXamlThread([this, inputPane]() { + ComPtr<IInputPane> inputPane; + statics->GetForCurrentView(&inputPane); + if (inputPane) { EventRegistrationToken showToken, hideToken; inputPane->add_Showing(Callback<InputPaneVisibilityHandler>( this, &QWinRTInputContext::onShowing).Get(), &showToken); inputPane->add_Hiding(Callback<InputPaneVisibilityHandler>( this, &QWinRTInputContext::onHiding).Get(), &hideToken); - return S_OK; - }); - m_keyboardRect = getInputPaneRect(inputPane, m_screen->scaleFactor()); - m_isInputPanelVisible = !m_keyboardRect.isEmpty(); - } else { - qWarning("failed to retrieve InputPane."); - } + m_keyboardRect = getInputPaneRect(inputPane, m_screen->scaleFactor()); + m_isInputPanelVisible = !m_keyboardRect.isEmpty(); + } else { + qWarning("failed to retrieve InputPane."); + } + return S_OK; + }); + connect(QGuiApplication::inputMethod(), &QInputMethod::cursorRectangleChanged, this, &QWinRTInputContext::updateScreenCursorRect); } |