From 099029a3425bf44704672b8105b91968a3a46148 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 1 Mar 2012 17:31:37 +0100 Subject: Fix QPixmap::grabWidget() on Windows. Do not draw on the backingstore DC when drawing to a pixmap. Access the paintdevice for checking via the QPaintEngine since QPainter returns the clipdevice, which is a widget. Fix warning about accessing handle of 0-window in the test. Task-number: QTBUG-24183 Change-Id: Ie91ea6ab9d09528c7ec1d35633f9a0ee667719b1 Reviewed-by: Miikka Heikkinen Reviewed-by: Friedemann Kleint --- src/widgets/styles/qwindowsxpstyle.cpp | 7 +++++-- tests/auto/gui/image/qpixmap/qpixmap.pro | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp index a24f42c5f1..5aab69983c 100644 --- a/src/widgets/styles/qwindowsxpstyle.cpp +++ b/src/widgets/styles/qwindowsxpstyle.cpp @@ -339,7 +339,7 @@ HWND QWindowsXPStylePrivate::winId(const QWidget *widget) // Find top level with native window (there might be dialogs that do not have one). foreach (const QWidget *toplevel, QApplication::topLevelWidgets()) - if (toplevel->windowHandle()) + if (toplevel->windowHandle() && toplevel->windowHandle()->handle()) if (const HWND topLevelHwnd = QApplicationPrivate::getHWNDForWidget(toplevel)) return topLevelHwnd; @@ -698,7 +698,10 @@ void QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData) } // Draw on backing store DC only for real widgets. - const bool useFallback = !themeData.widget || painter->device()->devType() != QInternal::Widget + // Access paintDevice via engine since the painter may + // return the clip device which can still be a widget device in case of grabWidget(). + const bool useFallback = !themeData.widget + || painter->paintEngine()->paintDevice()->devType() != QInternal::Widget || painter->opacity() != 1.0 || themeData.rotate || complexXForm || themeData.mirrorVertically || (themeData.mirrorHorizontally && pDrawThemeBackgroundEx == 0) diff --git a/tests/auto/gui/image/qpixmap/qpixmap.pro b/tests/auto/gui/image/qpixmap/qpixmap.pro index 91d93a781d..15098770c6 100644 --- a/tests/auto/gui/image/qpixmap/qpixmap.pro +++ b/tests/auto/gui/image/qpixmap/qpixmap.pro @@ -10,5 +10,3 @@ SOURCES += tst_qpixmap.cpp RESOURCES += qpixmap.qrc TESTDATA += convertFromImage/* convertFromToHICON/* loadFromData/* images/* - -win32:CONFIG += insignificant_test # QTBUG-24183 -- cgit v1.2.3