[PATCH] dix/window: Use ConfigureWindow instead of MoveWindow

Michal Srb msrb at suse.com
Mon Nov 12 12:51:48 UTC 2018


The screensaver can regularly move its window to random offsets. It should
use the ConfigureWindow function instead of calling the Screen's MoveWindow
directly. Some MoveWindow implementations, such as compMoveWindow, rely on
Screen's ConfigNotify being called first as it happens in ConfigureWindow.
---
This fixes abort from assertion failure if compositing is used together with
screensaver configured using "xset s 2 1 s noblank" command.

The compCopyWindow function would abort because of:

  assert(cw->oldx != COMP_ORIGIN_INVALID);

Because the cw->oldx is set from compReallocPixmap which is only called
from compConfigNotify.

Alternatively, if the MoveWindow is supposed to work independently, the
compMoveWindow must be adapted to handle the case when oldx/oldy is
set to COMP_ORIGIN_INVALID.

 dix/window.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/dix/window.c b/dix/window.c
index 2b599e788..f4ace76c7 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -3094,6 +3094,7 @@ int
 dixSaveScreens(ClientPtr client, int on, int mode)
 {
     int rc, i, what, type;
+    XID vlist[2];
 
     if (on == SCREEN_SAVER_FORCER) {
         if (mode == ScreenSaverReset)
@@ -3146,14 +3147,11 @@ dixSaveScreens(ClientPtr client, int on, int mode)
                  * for the root window, so PaintWindow works
                  */
                 screenIsSaved = SCREEN_SAVER_OFF;
-                (*pWin->drawable.pScreen->MoveWindow) (pWin,
-                                                       (short) (-
-                                                                (rand() %
-                                                                 RANDOM_WIDTH)),
-                                                       (short) (-
-                                                                (rand() %
-                                                                 RANDOM_WIDTH)),
-                                                       pWin->nextSib, VTMove);
+
+                vlist[0] = -(rand() % RANDOM_WIDTH);
+                vlist[1] = -(rand() % RANDOM_WIDTH);
+                ConfigureWindow(pWin, CWX | CWY, vlist, client);
+
                 screenIsSaved = SCREEN_SAVER_ON;
             }
             /*
-- 
2.16.4



More information about the xorg-devel mailing list