summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qcocoadrag.mm
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-03-31 19:22:44 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-04-02 10:33:29 +0200
commit7e9481f1fb00bee9d20e8c13d761c0f16ee04973 (patch)
treec08929f98a5dfdfe100b1ef4d5649a67fa8f6a5d /src/plugins/platforms/cocoa/qcocoadrag.mm
parentc83ae88faf5b28872cb4bda92e9dddf22b989265 (diff)
Resolve QWidget window handle without depending on QtWidgets
Change-Id: If5b2f17283193d7a1718f476b72f380e9e67d0f0 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoadrag.mm')
-rw-r--r--src/plugins/platforms/cocoa/qcocoadrag.mm25
1 files changed, 10 insertions, 15 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoadrag.mm b/src/plugins/platforms/cocoa/qcocoadrag.mm
index b4a16ab912..3525fddfd1 100644
--- a/src/plugins/platforms/cocoa/qcocoadrag.mm
+++ b/src/plugins/platforms/cocoa/qcocoadrag.mm
@@ -40,9 +40,6 @@
#include "qcocoadrag.h"
#include "qmacclipboard.h"
#include "qcocoahelpers.h"
-#ifndef QT_NO_WIDGETS
-#include <QtWidgets/qwidget.h>
-#endif
#include <QtGui/private/qcoregraphics_p.h>
QT_BEGIN_NAMESPACE
@@ -189,19 +186,17 @@ QPixmap QCocoaDrag::dragPixmap(QDrag *drag, QPoint &hotSpot) const
const int height = fm.height();
if (width > 0 && height > 0) {
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
- else {
- if (const QWindow *focusWindow = qApp->focusWindow())
- dpr = focusWindow->devicePixelRatio();
+ QWindow *window = qobject_cast<QWindow *>(drag->source());
+ if (!window && drag->source()->metaObject()->indexOfMethod("_q_closestWindowHandle()") != -1) {
+ QMetaObject::invokeMethod(drag->source(), "_q_closestWindowHandle",
+ Q_RETURN_ARG(QWindow *, window));
}
+ if (!window)
+ window = qApp->focusWindow();
+
+ if (window)
+ dpr = window->devicePixelRatio();
+
pm = QPixmap(width * dpr, height * dpr);
pm.setDevicePixelRatio(dpr);
QPainter p(&pm);