diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-02-09 16:09:31 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-10 22:53:13 +0100 |
commit | d43a01e1496c9be16cd2e3dc290bf70e926ceb99 (patch) | |
tree | 2e3f4427bf794b115147cb486183a948636be1ab /src | |
parent | 89b192a082652061ae1874f6bc1816c0f01e7a55 (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.cpp | 18 |
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); } |