summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-03-31 10:03:31 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-03-31 10:03:31 +0200
commitce9519593a0b3deb99d1dd2529770f7e9fffef92 (patch)
treec9bca05230dd68f49494240ae930bad1fe0c5956 /src/gui/kernel
parent509f77cca28aa3edea5523c5869bae4412ed2ccc (diff)
parent7baaec17edb06634f1d6235a55c7adbd112cba3e (diff)
Merge remote-tracking branch 'origin/5.4' into 5.5
Conflicts: mkspecs/android-g++/qmake.conf qmake/generators/unix/unixmake2.cpp src/gui/image/qimage_conversions.cpp Change-Id: Ib76264b8c2d29a0228438ec02bd97d4b97545be0
Diffstat (limited to 'src/gui/kernel')
-rw-r--r--src/gui/kernel/qguiapplication.cpp26
-rw-r--r--src/gui/kernel/qguiapplication_p.h2
-rw-r--r--src/gui/kernel/qwindow.cpp9
3 files changed, 22 insertions, 15 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 3d21b4affc..9f73f019a3 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -236,9 +236,7 @@ struct QWindowGeometrySpecification
{
QWindowGeometrySpecification() : corner(Qt::TopLeftCorner), xOffset(-1), yOffset(-1), width(-1), height(-1) {}
static QWindowGeometrySpecification fromArgument(const QByteArray &a);
- QRect apply(const QRect &windowGeometry, const QSize &windowMinimumSize, const QSize &windowMaximumSize, const QRect &availableGeometry) const;
- inline QRect apply(const QRect &windowGeometry, const QWindow *window) const
- { return apply(windowGeometry, window->minimumSize(), window->maximumSize(), window->screen()->virtualGeometry()); }
+ void applyTo(QWindow *window) const;
Qt::Corner corner;
int xOffset;
@@ -300,32 +298,34 @@ QWindowGeometrySpecification QWindowGeometrySpecification::fromArgument(const QB
return result;
}
-QRect QWindowGeometrySpecification::apply(const QRect &windowGeometry, const QSize &windowMinimumSize, const QSize &windowMaximumSize, const QRect &availableGeometry) const
+void QWindowGeometrySpecification::applyTo(QWindow *window) const
{
- QRect result = windowGeometry;
+ QRect windowGeometry = window->frameGeometry();
+ QSize size = windowGeometry.size();
if (width >= 0 || height >= 0) {
- QSize size = windowGeometry.size();
+ const QSize windowMinimumSize = window->minimumSize();
+ const QSize windowMaximumSize = window->maximumSize();
if (width >= 0)
size.setWidth(qBound(windowMinimumSize.width(), width, windowMaximumSize.width()));
if (height >= 0)
size.setHeight(qBound(windowMinimumSize.height(), height, windowMaximumSize.height()));
- result.setSize(size);
+ window->resize(size);
}
if (xOffset >= 0 || yOffset >= 0) {
+ const QRect availableGeometry = window->screen()->virtualGeometry();
QPoint topLeft = windowGeometry.topLeft();
if (xOffset >= 0) {
topLeft.setX(corner == Qt::TopLeftCorner || corner == Qt::BottomLeftCorner ?
xOffset :
- qMax(availableGeometry.right() - result.width() - xOffset, availableGeometry.left()));
+ qMax(availableGeometry.right() - size.width() - xOffset, availableGeometry.left()));
}
if (yOffset >= 0) {
topLeft.setY(corner == Qt::TopLeftCorner || corner == Qt::TopRightCorner ?
yOffset :
- qMax(availableGeometry.bottom() - result.height() - yOffset, availableGeometry.top()));
+ qMax(availableGeometry.bottom() - size.height() - yOffset, availableGeometry.top()));
}
- result.moveTopLeft(topLeft);
+ window->setFramePosition(topLeft);
}
- return result;
}
static QWindowGeometrySpecification windowGeometrySpecification;
@@ -2757,9 +2757,9 @@ void QGuiApplication::setPalette(const QPalette &pal)
emit qGuiApp->paletteChanged(*QGuiApplicationPrivate::app_pal);
}
-QRect QGuiApplicationPrivate::applyWindowGeometrySpecification(const QRect &windowGeometry, const QWindow *window)
+void QGuiApplicationPrivate::applyWindowGeometrySpecificationTo(QWindow *window)
{
- return windowGeometrySpecification.apply(windowGeometry, window);
+ windowGeometrySpecification.applyTo(window);
}
/*!
diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h
index 7ae6e64b26..0559442049 100644
--- a/src/gui/kernel/qguiapplication_p.h
+++ b/src/gui/kernel/qguiapplication_p.h
@@ -279,7 +279,7 @@ public:
virtual void notifyWindowIconChanged();
- static QRect applyWindowGeometrySpecification(const QRect &windowGeometry, const QWindow *window);
+ static void applyWindowGeometrySpecificationTo(QWindow *window);
static void setApplicationState(Qt::ApplicationState state, bool forcePropagate = false);
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index 06674d204d..c0f953bcef 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -489,6 +489,13 @@ void QWindow::setVisible(bool visible)
}
if (!app_priv->forcedWindowIcon.isNull())
setIcon(app_priv->forcedWindowIcon);
+
+ // Handling of the -qwindowgeometry, -geometry command line arguments
+ static bool geometryApplied = false;
+ if (!geometryApplied) {
+ geometryApplied = true;
+ QGuiApplicationPrivate::applyWindowGeometrySpecificationTo(this);
+ }
}
QShowEvent showEvent;
@@ -1502,10 +1509,10 @@ void QWindow::setFramePosition(const QPoint &point)
{
Q_D(QWindow);
d->positionPolicy = QWindowPrivate::WindowFrameInclusive;
+ d->positionAutomatic = false;
if (d->platformWindow) {
d->platformWindow->setGeometry(QRect(point, size()));
} else {
- d->positionAutomatic = false;
d->geometry.moveTopLeft(point);
}
}