From a4c8129d099840b366a27e4342a65d7cae5890e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 28 Jun 2017 10:20:35 +0200 Subject: Relieve platform plugins of having to persist geometry on WM callbacks We can offload this to QGuiApplication, just like the geometry of the QWindow is set. This ensures that all platforms behave the same, and that the documentation of QPlatformWindow::setGeometry is adhered. Change-Id: I19dbc32cb4fb146d716ec289c28030a547d3afaa Reviewed-by: Simon Hausmann --- src/gui/kernel/qplatformwindow.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/gui/kernel/qplatformwindow.cpp') diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp index dda7cc94fe..a26a23243d 100644 --- a/src/gui/kernel/qplatformwindow.cpp +++ b/src/gui/kernel/qplatformwindow.cpp @@ -105,10 +105,17 @@ QSurfaceFormat QPlatformWindow::format() const } /*! - This function is called by Qt whenever a window is moved or the window is resized. The resize - can happen programatically(from ie. user application) or by the window manager. This means that - there is no need to call this function specifically from the window manager callback, instead - call QWindowSystemInterface::handleGeometryChange(QWindow *w, const QRect &newRect); + This function is called by Qt whenever a window is moved or resized using the QWindow API. + + Unless you also override QPlatformWindow::geometry(), you need to call the baseclass + implementation of this function in any override of QPlatformWindow::setGeometry(), as + QWindow::geometry() is expected to report back the set geometry until a confirmation + (or rejection) of the new geometry comes back from the window manager and is reported + via handleGeometryChange(). + + Window move/resizes can also be triggered spontaneously by the window manager, or as a + response to an earlier requested move/resize via the Qt APIs. There is no need to call + this function from the window manager callback, instead call QPA::handleGeometryChange. The position(x, y) part of the rect might be inclusive or exclusive of the window frame as returned by frameMargins(). You can detect this in the plugin by checking -- cgit v1.2.3