Re-add default positioning for Widgets.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Thu, 9 Feb 2012 15:09:31 +0000 (16:09 +0100)
committerQt by Nokia <qt-info@nokia.com>
Fri, 10 Feb 2012 21:53:13 +0000 (22:53 +0100)
Center widgets on the screen in show_sys() in case they
are top levels that have not been moved yet.
This was previously done in platform-specific code
on Window creation.

Change-Id: I191f20c0105ed3f27274c6505852b212d400b395
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
src/widgets/kernel/qwidget_qpa.cpp

index c0dbf04..a37de85 100644 (file)
@@ -424,6 +424,19 @@ void QWidget::activateWindow()
         windowHandle()->requestActivateWindow();
 }
 
+// Position top level windows at the center, avoid showing
+// Windows at the default 0,0 position excluding the frame.
+static inline QRect positionTopLevelWindow(QRect geometry, const QScreen *screen)
+{
+    if (screen && geometry.x() == 0 && geometry.y() == 0) {
+       const QRect availableGeometry = screen->availableGeometry();
+        if (availableGeometry.width() > geometry.width()
+            && availableGeometry.height() > geometry.height())
+            geometry.moveCenter(availableGeometry.center());
+    }
+    return geometry;
+}
+
 void QWidgetPrivate::show_sys()
 {
     Q_Q(QWidget);
@@ -441,7 +454,10 @@ void QWidgetPrivate::show_sys()
     QWindow *window = q->windowHandle();
     if (window) {
         QRect geomRect = q->geometry();
-        if (!q->isWindow()) {
+        if (q->isWindow()) {
+            if (!q->testAttribute(Qt::WA_Moved))
+                geomRect = positionTopLevelWindow(geomRect, window->screen());
+        } else {
             QPoint topLeftOfWindow = q->mapTo(q->nativeParentWidget(),QPoint());
             geomRect.moveTopLeft(topLeftOfWindow);
         }