summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-08-10 17:43:12 +0200
committerLiang Qi <liang.qi@qt.io>2016-08-10 17:43:13 +0200
commit8ba384a5645aebbefe34b814828024d511171497 (patch)
tree6f6cfe1b849b6e0e02de15ee74ad0f3d5fc740b6 /src/plugins
parente694ced803589b3504b6bdb2fc8bf97bc891c794 (diff)
parent25b72a63fffe800f2005b21d254b0b191d263b10 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/cocoa/qcocoadrag.mm16
-rw-r--r--src/plugins/platforms/winrt/qwinrtwindow.cpp51
2 files changed, 65 insertions, 2 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoadrag.mm b/src/plugins/platforms/cocoa/qcocoadrag.mm
index 872b97566f..bb8d12e3ce 100644
--- a/src/plugins/platforms/cocoa/qcocoadrag.mm
+++ b/src/plugins/platforms/cocoa/qcocoadrag.mm
@@ -40,6 +40,9 @@
#include "qcocoadrag.h"
#include "qmacclipboard.h"
#include "qcocoahelpers.h"
+#ifndef QT_NO_WIDGETS
+#include <QtWidgets/qwidget.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -187,7 +190,18 @@ QPixmap QCocoaDrag::dragPixmap(QDrag *drag, QPoint &hotSpot) const
const int width = fm.width(s);
const int height = fm.height();
if (width > 0 && height > 0) {
- pm = QPixmap(width, height);
+ qreal dpr = 1.0;
+ if (const QWindow *sourceWindow = qobject_cast<QWindow *>(drag->source())) {
+ dpr = sourceWindow->devicePixelRatio();
+ }
+#ifndef QT_NO_WIDGETS
+ else if (const QWidget *sourceWidget = qobject_cast<QWidget *>(drag->source())) {
+ if (const QWindow *sourceWindow = sourceWidget->window()->windowHandle())
+ dpr = sourceWindow->devicePixelRatio();
+ }
+#endif
+ pm = QPixmap(width * dpr, height * dpr);
+ pm.setDevicePixelRatio(dpr);
QPainter p(&pm);
p.fillRect(0, 0, pm.width(), pm.height(), Qt::color0);
p.setPen(Qt::color1);
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;