From 81b041cae3a5ab4ae88780f8229f9d341cdf28bd Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Fri, 30 Aug 2024 20:30:03 +0200 Subject: [PATCH] Xnest: move per-screen screensaver window to xnest_screen_info struct --- hw/xnest/Color.c | 4 +++- hw/xnest/Screen.c | 17 +++++++++-------- hw/xnest/Screen.h | 2 -- hw/xnest/xnest-xcb.h | 4 ++++ 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/hw/xnest/Color.c b/hw/xnest/Color.c index bd550d280..74015acfd 100644 --- a/hw/xnest/Color.c +++ b/hw/xnest/Color.c @@ -281,9 +281,11 @@ xnestSetScreenSaverColormapWindow(ScreenPtr pScreen) { free(xnestOldInstalledColormapWindows); + struct xnest_screen_info *screenPriv = xnest_screen_priv(pScreen); + xnest_wm_colormap_windows(xnestUpstreamInfo.conn, xnest_screen_priv(pScreen)->upstream_frame_window, - &xnestScreenSaverWindows[pScreen->myNum], + &screenPriv->upstream_saver_window, 1); xnestOldInstalledColormapWindows = NULL; diff --git a/hw/xnest/Screen.c b/hw/xnest/Screen.c index 1ae631917..3ab8344bb 100644 --- a/hw/xnest/Screen.c +++ b/hw/xnest/Screen.c @@ -47,7 +47,6 @@ is" without express or implied warranty. #include "Args.h" #include "mipointrst.h" -xcb_window_t xnestScreenSaverWindows[MAXSCREENS]; DevPrivateKeyRec xnestScreenCursorFuncKeyRec; DevScreenPrivateKeyRec xnestScreenCursorPrivKeyRec; @@ -77,33 +76,35 @@ offset(unsigned long mask) static Bool xnestSaveScreen(ScreenPtr pScreen, int what) { + struct xnest_screen_info *screenPriv = xnest_screen_priv(pScreen); + if (xnestSoftwareScreenSaver) return FALSE; else { switch (what) { case SCREEN_SAVER_ON: - xcb_map_window(xnestUpstreamInfo.conn, xnestScreenSaverWindows[pScreen->myNum]); + xcb_map_window(xnestUpstreamInfo.conn, screenPriv->upstream_saver_window); uint32_t value = XCB_STACK_MODE_ABOVE; xcb_configure_window(xnestUpstreamInfo.conn, - xnestScreenSaverWindows[pScreen->myNum], + screenPriv->upstream_saver_window, XCB_CONFIG_WINDOW_STACK_MODE, &value); xnestSetScreenSaverColormapWindow(pScreen); break; case SCREEN_SAVER_OFF: - xcb_unmap_window(xnestUpstreamInfo.conn, xnestScreenSaverWindows[pScreen->myNum]); + xcb_unmap_window(xnestUpstreamInfo.conn, screenPriv->upstream_saver_window); xnestSetInstalledColormapWindows(pScreen); break; case SCREEN_SAVER_FORCER: lastEventTime = GetTimeInMillis(); - xcb_unmap_window(xnestUpstreamInfo.conn, xnestScreenSaverWindows[pScreen->myNum]); + xcb_unmap_window(xnestUpstreamInfo.conn, screenPriv->upstream_saver_window); xnestSetInstalledColormapWindows(pScreen); break; case SCREEN_SAVER_CYCLE: - xcb_unmap_window(xnestUpstreamInfo.conn, xnestScreenSaverWindows[pScreen->myNum]); + xcb_unmap_window(xnestUpstreamInfo.conn, screenPriv->upstream_saver_window); xnestSetInstalledColormapWindows(pScreen); break; } @@ -495,10 +496,10 @@ breakout: attributes.back_pixmap = xnestScreenSaverPixmap; attributes.colormap = xnestUpstreamInfo.screenInfo->default_colormap; - xnestScreenSaverWindows[pScreen->myNum] = xcb_generate_id(xnestUpstreamInfo.conn); + screenPriv->upstream_saver_window = xcb_generate_id(xnestUpstreamInfo.conn); xcb_aux_create_window(xnestUpstreamInfo.conn, xnestUpstreamInfo.screenInfo->root_depth, - xnestScreenSaverWindows[pScreen->myNum], + screenPriv->upstream_saver_window, screenPriv->upstream_frame_window, 0, 0, diff --git a/hw/xnest/Screen.h b/hw/xnest/Screen.h index 832c76839..9b560fde7 100644 --- a/hw/xnest/Screen.h +++ b/hw/xnest/Screen.h @@ -20,8 +20,6 @@ is" without express or implied warranty. #include -extern xcb_window_t xnestScreenSaverWindows[MAXSCREENS]; - ScreenPtr xnestScreen(xcb_window_t window); Bool xnestOpenScreen(ScreenPtr pScreen, int argc, char *argv[]); Bool xnestCloseScreen(ScreenPtr pScreen); diff --git a/hw/xnest/xnest-xcb.h b/hw/xnest/xnest-xcb.h index 9b8f480d7..01dc3d601 100644 --- a/hw/xnest/xnest-xcb.h +++ b/hw/xnest/xnest-xcb.h @@ -24,6 +24,10 @@ struct xnest_screen_info { several things easier, eg. embedding Xnest into another application, or maybe even adding some control widgets (eg. scroll bars) */ xcb_window_t upstream_frame_window; + + /* the SAVER window also is child of the FRAME. It's only mapped while the + screen saver is active, and then overlapping our ROOT window. */ + xcb_window_t upstream_saver_window; }; struct xnest_upstream_info {