summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/winrt/qwinrtwindow.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-08-16 07:58:32 +0200
committerLiang Qi <liang.qi@qt.io>2016-08-16 07:58:32 +0200
commit17198e03ab36e5f579a1477b09cc3e601975eb5f (patch)
tree61ba826e9edd53469abdc1e1f58b1223d0336c56 /src/plugins/platforms/winrt/qwinrtwindow.cpp
parenta5e89005445ac8ca18ac046eaf55fe2230e47cd6 (diff)
parent2e2b32a9ab459f6618d02e4b454c75a787172def (diff)
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: qmake/doc/src/qmake-manual.qdoc src/corelib/global/qglobal.cpp src/corelib/tools/qstring.cpp src/network/socket/qabstractsocket.cpp src/network/socket/qnativesocketengine_unix.cpp src/plugins/platforms/eglfs/api/qeglfsglobal.h Change-Id: Id5dfdbd30fa996f9b4b66a0b030b7d3b8c0ef288
Diffstat (limited to 'src/plugins/platforms/winrt/qwinrtwindow.cpp')
-rw-r--r--src/plugins/platforms/winrt/qwinrtwindow.cpp51
1 files changed, 50 insertions, 1 deletions
diff --git a/src/plugins/platforms/winrt/qwinrtwindow.cpp b/src/plugins/platforms/winrt/qwinrtwindow.cpp
index a910967f87..606ca22bcd 100644
--- a/src/plugins/platforms/winrt/qwinrtwindow.cpp
+++ b/src/plugins/platforms/winrt/qwinrtwindow.cpp
@@ -322,10 +322,59 @@ void QWinRTWindow::setWindowState(Qt::WindowState state)
if (d->state == state)
return;
+#if _MSC_VER >= 1900
+ if (state == Qt::WindowFullScreen) {
+ HRESULT hr;
+ boolean success;
+ hr = QEventDispatcherWinRT::runOnXamlThread([&hr, &success]() {
+ ComPtr<IApplicationViewStatics2> applicationViewStatics;
+ hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_UI_ViewManagement_ApplicationView).Get(),
+ IID_PPV_ARGS(&applicationViewStatics));
+ RETURN_HR_IF_FAILED("Could not access application view statics.");
+ ComPtr<IApplicationView> view;
+ hr = applicationViewStatics->GetForCurrentView(&view);
+ RETURN_HR_IF_FAILED("Could not access application view.");
+ ComPtr<IApplicationView3> view3;
+ hr = view.As(&view3);
+ Q_ASSERT_SUCCEEDED(hr);
+ hr = view3->TryEnterFullScreenMode(&success);
+ return hr;
+ });
+ if (FAILED(hr) || !success) {
+ qCDebug(lcQpaWindows) << "Failed to enter full screen mode.";
+ return;
+ }
+ d->state = state;
+ return;
+ }
+
+ if (d->state == Qt::WindowFullScreen) {
+ HRESULT hr;
+ hr = QEventDispatcherWinRT::runOnXamlThread([&hr]() {
+ ComPtr<IApplicationViewStatics2> applicationViewStatics;
+ hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_UI_ViewManagement_ApplicationView).Get(),
+ IID_PPV_ARGS(&applicationViewStatics));
+ RETURN_HR_IF_FAILED("Could not access application view statics.");
+ ComPtr<IApplicationView> view;
+ hr = applicationViewStatics->GetForCurrentView(&view);
+ RETURN_HR_IF_FAILED("Could not access application view.");
+ ComPtr<IApplicationView3> view3;
+ hr = view.As(&view3);
+ Q_ASSERT_SUCCEEDED(hr);
+ hr = view3->ExitFullScreenMode();
+ return hr;
+ });
+ if (FAILED(hr)) {
+ qCDebug(lcQpaWindows) << "Failed to exit full screen mode.";
+ return;
+ }
+ }
+#endif // _MSC_VER >= 1900
+
if (state == Qt::WindowMinimized)
setUIElementVisibility(d->uiElement.Get(), false);
- if (d->state == Qt::WindowMinimized)
+ if (d->state == Qt::WindowMinimized || state == Qt::WindowNoState || state == Qt::WindowActive)
setUIElementVisibility(d->uiElement.Get(), true);
d->state = state;