Retrieve QPlatformScreen from top level when querying widget metrics.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Tue, 26 Jul 2011 08:30:56 +0000 (10:30 +0200)
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>
Tue, 26 Jul 2011 08:33:54 +0000 (10:33 +0200)
Check for 0 and use primary screen as default.

Change-Id: Ib4d0d3f507e7fb17687f5e126b49f98cfdbead6c
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Reviewed-on: http://codereview.qt.nokia.com/2166
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
src/widgets/kernel/qwidget_qpa.cpp

index b8f1f4e..507cb11 100644 (file)
@@ -53,6 +53,8 @@
 #include "QtGui/private/qwindow_p.h"
 
 #include <QtGui/QPlatformCursor>
+#include <QtGui/QGuiApplication>
+#include <QtGui/QScreen>
 
 QT_BEGIN_NAMESPACE
 
@@ -733,7 +735,13 @@ int QWidget::metric(PaintDeviceMetric m) const
 {
     Q_D(const QWidget);
 
-    QPlatformScreen *screen = QPlatformScreen::platformScreenForWindow(windowHandle());
+    QPlatformScreen *screen = 0;
+    if (QWidget *topLevel = window())
+        if (QWindow *topLevelWindow = topLevel->windowHandle())
+            screen = QPlatformScreen::platformScreenForWindow(topLevelWindow);
+    if (!screen && QGuiApplication::primaryScreen())
+        screen = QGuiApplication::primaryScreen()->handle();
+
     if (!screen) {
         if (m == PdmDpiX || m == PdmDpiY)
               return 72;