summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/winrt/qwinrtintegration.cpp
diff options
context:
space:
mode:
authorSamuel Nevala <samuel.nevala@intopalo.com>2015-10-19 15:14:52 +0300
committerSamuel Nevala <samuel.nevala@intopalo.com>2015-10-22 08:58:23 +0000
commitceec35a6deb0e14cb2edadab8dbd18cfeff7320f (patch)
tree06274321564e92efaa0ac2f684db09545fbe92a0 /src/plugins/platforms/winrt/qwinrtintegration.cpp
parent9388bbe4bdc366760c0ee5953d5f2157c51a8e68 (diff)
winrt: Connect callbacks after after integration class constructed.
It was possible for Windows Runtime callback to run while integration class was constructed. That caused an assert when handling application state change. Fix this by connecting callbacks after integration class fully constructed. Change-Id: I029c2e1f932e8edc3665443cc17dbf11eaae1bf6 Task-Id: QTBUG-48109 Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Diffstat (limited to 'src/plugins/platforms/winrt/qwinrtintegration.cpp')
-rw-r--r--src/plugins/platforms/winrt/qwinrtintegration.cpp29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/plugins/platforms/winrt/qwinrtintegration.cpp b/src/plugins/platforms/winrt/qwinrtintegration.cpp
index 612f722481..fd50d4f579 100644
--- a/src/plugins/platforms/winrt/qwinrtintegration.cpp
+++ b/src/plugins/platforms/winrt/qwinrtintegration.cpp
@@ -133,25 +133,13 @@ QWinRTIntegration::QWinRTIntegration() : d_ptr(new QWinRTIntegrationPrivate)
Q_ASSERT_SUCCEEDED(hr);
#endif // Q_OS_WINPHONE
- hr = QEventDispatcherWinRT::runOnXamlThread([this, d]() {
- HRESULT hr;
- ComPtr<Xaml::IWindowStatics> windowStatics;
- hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_UI_Xaml_Window).Get(),
- IID_PPV_ARGS(&windowStatics));
- Q_ASSERT_SUCCEEDED(hr);
- ComPtr<Xaml::IWindow> window;
- hr = windowStatics->get_Current(&window);
- Q_ASSERT_SUCCEEDED(hr);
- hr = window->Activate();
- Q_ASSERT_SUCCEEDED(hr);
-
- d->mainScreen = new QWinRTScreen(window.Get());
- d->inputContext.reset(new QWinRTInputContext(d->mainScreen));
- screenAdded(d->mainScreen);
+ QEventDispatcherWinRT::runOnXamlThread([d]() {
+ d->mainScreen = new QWinRTScreen;
return S_OK;
});
- Q_ASSERT_SUCCEEDED(hr);
+ d->inputContext.reset(new QWinRTInputContext(d->mainScreen));
+ screenAdded(d->mainScreen);
d->platformServices = new QWinRTServices;
}
@@ -184,6 +172,15 @@ QAbstractEventDispatcher *QWinRTIntegration::createEventDispatcher() const
return new QWinRTEventDispatcher;
}
+void QWinRTIntegration::initialize()
+{
+ Q_D(const QWinRTIntegration);
+ QEventDispatcherWinRT::runOnXamlThread([d]() {
+ d->mainScreen->initialize();
+ return S_OK;
+ });
+}
+
bool QWinRTIntegration::hasCapability(QPlatformIntegration::Capability cap) const
{
switch (cap) {