diff options
author | Keith Packard <keithp@keithp.com> | 2003-11-10 18:34:35 +0000 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2003-11-10 18:34:35 +0000 |
commit | 41293ef7559c2b6ed8f97ee3634f6399ccd241e7 (patch) | |
tree | e61da905f45f8fad49e023f529f2bde900702931 | |
parent | 9e767b89cfa434e762f65f23c3be872cd5d99087 (diff) |
Track changes to _XROOTPMAP_ID property
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | xcompmgr.c | 20 |
3 files changed, 26 insertions, 2 deletions
@@ -1,3 +1,9 @@ +2003-11-10 Keith Packard <keithp@keithp.com> + + * Makefile: + * xcompmgr.c: (root_tile), (main): + Track changes to _XROOTPMAP_ID property + 2003-11-09 Keith Packard <keithp@keithp.com> * xcompmgr.c: (time_in_millis), (main): @@ -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) @@ -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); |