From 41293ef7559c2b6ed8f97ee3634f6399ccd241e7 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 10 Nov 2003 18:34:35 +0000 Subject: [PATCH] Track changes to _XROOTPMAP_ID property --- ChangeLog | 6 ++++++ Makefile | 2 ++ xcompmgr.c | 20 ++++++++++++++++++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3eea662..bbc41dc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-11-10 Keith Packard + + * Makefile: + * xcompmgr.c: (root_tile), (main): + Track changes to _XROOTPMAP_ID property + 2003-11-09 Keith Packard * xcompmgr.c: (time_in_millis), (main): diff --git a/Makefile b/Makefile index f3c7dea..139ed49 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,7 @@ LIBS=`pkg-config --cflags --libs xcomposite xfixes xdamage xrender` -lm +CFLAGS=-O -g + xcompmgr: xcompmgr.c $(CC) -o $@ $(CFLAGS) xcompmgr.c $(LIBS) diff --git a/xcompmgr.c b/xcompmgr.c index 0662b82..299a511 100644 --- a/xcompmgr.c +++ b/xcompmgr.c @@ -65,6 +65,7 @@ Picture rootTile; XserverRegion allDamage; int root_height, root_width; +#define BACKGROUND_PROP "_XROOTPMAP_ID" #define WINDOW_PLAIN 0 #define WINDOW_DROP 1 #define WINDOW_TRANS 2 @@ -326,7 +327,7 @@ root_tile (Display *dpy) Bool fill; XRenderPictureAttributes pa; - if (XGetWindowProperty (dpy, root, XInternAtom (dpy, "_XROOTPMAP_ID", False), + if (XGetWindowProperty (dpy, root, XInternAtom (dpy, BACKGROUND_PROP, False), 0, 4, False, AnyPropertyType, &actual_type, &actual_format, &nitems, &bytes_after, &prop) == Success && actual_type == XInternAtom (dpy, "PIXMAP", False) && actual_format == 32 && nitems == 1) @@ -816,7 +817,11 @@ main () XGrabServer (dpy); XCompositeRedirectSubwindows (dpy, root, CompositeRedirectManual); paint_all (dpy, None); - XSelectInput (dpy, root, SubstructureNotifyMask|ExposureMask|StructureNotifyMask); + XSelectInput (dpy, root, + SubstructureNotifyMask| + ExposureMask| + StructureNotifyMask| + PropertyChangeMask); XQueryTree (dpy, root, &root_return, &parent_return, &children, &nchildren); for (i = 0; i < nchildren; i++) add_win (dpy, children[i], i ? children[i-1] : None); @@ -882,6 +887,17 @@ main () } } break; + case PropertyNotify: + if (ev.xproperty.atom == XInternAtom (dpy, BACKGROUND_PROP, False)) + { + if (rootTile) + { + XClearArea (dpy, root, 0, 0, 0, 0, True); + XRenderFreePicture (dpy, rootTile); + rootTile = None; + } + } + break; default: if (ev.type == damage_event + XDamageNotify) damage_win (dpy, (XDamageNotifyEvent *) &ev); -- 1.9.1