summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-02-09 16:09:31 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-10 22:53:13 +0100
commitd43a01e1496c9be16cd2e3dc290bf70e926ceb99 (patch)
tree2e3f4427bf794b115147cb486183a948636be1ab /src
parent89b192a082652061ae1874f6bc1816c0f01e7a55 (diff)
Re-add default positioning for Widgets.
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>
Diffstat (limited to 'src')
-rw-r--r--src/widgets/kernel/qwidget_qpa.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/widgets/kernel/qwidget_qpa.cpp b/src/widgets/kernel/qwidget_qpa.cpp
index c0dbf0497e..a37de8547a 100644
--- a/src/widgets/kernel/qwidget_qpa.cpp
+++ b/src/widgets/kernel/qwidget_qpa.cpp
@@ -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);
}