[vlc-devel] [PATCH] qt: prevent window jumps on resize (X11)

Romain Vimont rom1v at videolabs.io
Mon Apr 30 18:55:33 CEST 2018

On X11 with Qt < 5.10, a resize request invoked XMoveResizeWindow() (see
0285ba4eeaa55608573a48e50a036ee2b437ae8b), which both moves and resizes.
To avoid moving, it was called with the current geometry() coordinates
as position arguments.

However, it seems that X11 expects coordinates relative to the current
display (screen), while geometry() returns the position in absolute
coordinates (including the offset of the current display itself).

As a consequence, on a secondary display, every (automatic) resize of
the window made it jump to unexpected locations.

To avoid the problem, just call XResizeWindow(), so that the window is
not moved at all.
 modules/gui/qt/main_interface.cpp | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/modules/gui/qt/main_interface.cpp b/modules/gui/qt/main_interface.cpp
index 9029683aee..8868de4de2 100644
--- a/modules/gui/qt/main_interface.cpp
+++ b/modules/gui/qt/main_interface.cpp
@@ -1352,9 +1352,8 @@ void MainInterface::resizeWindow(int w, int h)
          * By calling XMoveResizeWindow directly, Qt will not see our change
          * request until the ConfigureNotify event on success
          * and not at all if it is rejected. */
-        XMoveResizeWindow( QX11Info::display(), winId(),
-                          geometry().x() * dpr, geometry().y() * dpr,
-                          (unsigned int)size.width() * dpr, (unsigned int)size.height() * dpr);
+        XResizeWindow( QX11Info::display(), winId(),
+                       (unsigned int)size.width() * dpr, (unsigned int)size.height() * dpr);

More information about the vlc-devel mailing list