summaryrefslogtreecommitdiffstats
path: root/src/widgets/styles/qwindowsxpstyle.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-03-01 17:31:37 +0100
committerQt by Nokia <qt-info@nokia.com>2012-03-02 14:44:00 +0100
commit099029a3425bf44704672b8105b91968a3a46148 (patch)
treedfcf3049dc1dd5dfef8077dc7ce9f57d8c4e6408 /src/widgets/styles/qwindowsxpstyle.cpp
parentd505886dd696d0f01bb64cbc7a1191d960d4d060 (diff)
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 <miikka.heikkinen@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Diffstat (limited to 'src/widgets/styles/qwindowsxpstyle.cpp')
-rw-r--r--src/widgets/styles/qwindowsxpstyle.cpp7
1 files changed, 5 insertions, 2 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)