aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Makefile2
-rw-r--r--xcompmgr.c20
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 <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):
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);