From fb049254c80ecff168542fe8ae035a3abd03cf08 Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Tue, 13 Oct 2015 15:07:54 +0200 Subject: WinRT: Fix InputPanel on Windows 10 Check for MSVC2015 to enable usage of IInputPane(2). Move object construction to the XAML Thread, otherwise instantiation will fail when running on desktop. Task-number: QTBUG-44494 Change-Id: I816230cc5b0def796e86e6c6bb05a552a4e59d1b Reviewed-by: Andrew Knight --- src/plugins/platforms/winrt/qwinrtinputcontext.cpp | 28 ++++++++++------------ src/plugins/platforms/winrt/qwinrtinputcontext.h | 2 +- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/plugins/platforms/winrt/qwinrtinputcontext.cpp b/src/plugins/platforms/winrt/qwinrtinputcontext.cpp index f3b390b4d6..750233c94f 100644 --- a/src/plugins/platforms/winrt/qwinrtinputcontext.cpp +++ b/src/plugins/platforms/winrt/qwinrtinputcontext.cpp @@ -131,7 +131,7 @@ HRESULT QWinRTInputContext::handleVisibilityChange(IInputPane *pane) return S_OK; } -#ifdef Q_OS_WINPHONE +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) static HRESULT getInputPane(ComPtr *inputPane2) { @@ -160,13 +160,11 @@ static HRESULT getInputPane(ComPtr *inputPane2) void QWinRTInputContext::showInputPanel() { - ComPtr inputPane; - HRESULT hr = getInputPane(&inputPane); - if (FAILED(hr)) - return; - - QEventDispatcherWinRT::runOnXamlThread([&inputPane]() { - HRESULT hr; + QEventDispatcherWinRT::runOnXamlThread([&]() { + ComPtr inputPane; + HRESULT hr = getInputPane(&inputPane); + if (FAILED(hr)) + return hr; boolean success; hr = inputPane->TryShow(&success); if (FAILED(hr) || !success) @@ -177,13 +175,11 @@ void QWinRTInputContext::showInputPanel() void QWinRTInputContext::hideInputPanel() { - ComPtr inputPane; - HRESULT hr = getInputPane(&inputPane); - if (FAILED(hr)) - return; - - QEventDispatcherWinRT::runOnXamlThread([&inputPane]() { - HRESULT hr; + QEventDispatcherWinRT::runOnXamlThread([&]() { + ComPtr inputPane; + HRESULT hr = getInputPane(&inputPane); + if (FAILED(hr)) + return hr; boolean success; hr = inputPane->TryHide(&success); if (FAILED(hr) || !success) @@ -192,6 +188,6 @@ void QWinRTInputContext::hideInputPanel() }); } -#endif // Q_OS_WINPHONE +#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) QT_END_NAMESPACE diff --git a/src/plugins/platforms/winrt/qwinrtinputcontext.h b/src/plugins/platforms/winrt/qwinrtinputcontext.h index cc3bce435f..6f88ff46e6 100644 --- a/src/plugins/platforms/winrt/qwinrtinputcontext.h +++ b/src/plugins/platforms/winrt/qwinrtinputcontext.h @@ -68,7 +68,7 @@ public: bool isInputPanelVisible() const; -#ifdef Q_OS_WINPHONE +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) void showInputPanel(); void hideInputPanel(); #endif -- cgit v1.2.3