diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-03-31 19:22:44 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-04-02 10:33:29 +0200 |
commit | 7e9481f1fb00bee9d20e8c13d761c0f16ee04973 (patch) | |
tree | c08929f98a5dfdfe100b1ef4d5649a67fa8f6a5d /src/plugins | |
parent | c83ae88faf5b28872cb4bda92e9dddf22b989265 (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')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoadrag.mm | 25 |
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); |