aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2003-11-10 02:03:26 +0000
committerKeith Packard <keithp@keithp.com>2003-11-10 02:03:26 +0000
commite142128ddea840d8140fdd0b28fff121cb2b4598 (patch)
tree463cc242451884fc18a7b56ba7f8687e9c641dc8
parentAdd drop shadows. (diff)
downloadxcman-e142128ddea840d8140fdd0b28fff121cb2b4598.tar.gz
xcman-e142128ddea840d8140fdd0b28fff121cb2b4598.tar.bz2
xcman-e142128ddea840d8140fdd0b28fff121cb2b4598.tar.xz
Detect root pattern with undocumented _XROOTPMAP_ID property
-rw-r--r--ChangeLog5
-rw-r--r--xcompmgr.c54
2 files changed, 54 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 16ae2a2..4cd9f8b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2003-11-09 Keith Packard <keithp@keithp.com>
+ * xcompmgr.c: (root_tile), (paint_root):
+ Detect root pattern with undocumented _XROOTPMAP_ID property
+
+2003-11-09 Keith Packard <keithp@keithp.com>
+
* Makefile:
* xcompmgr.c: (gaussian), (make_gaussian_map), (sum_gaussian),
(make_shadow), (shadow_picture), (win_extents), (paint_all),
diff --git a/xcompmgr.c b/xcompmgr.c
index 2640221..30ede48 100644
--- a/xcompmgr.c
+++ b/xcompmgr.c
@@ -35,6 +35,7 @@ int scr;
Window root;
Picture rootPicture;
Picture transPicture;
+Picture rootTile;
XserverRegion allDamage;
#define WINDOW_PLAIN 0
@@ -285,15 +286,58 @@ find_win (Display *dpy, Window id)
return 0;
}
+Picture
+root_tile (Display *dpy)
+{
+ Picture picture;
+ Atom actual_type;
+ Pixmap pixmap;
+ int actual_format;
+ unsigned long nitems;
+ unsigned long bytes_after;
+ unsigned char *prop;
+ Bool fill;
+ XRenderPictureAttributes pa;
+
+ if (XGetWindowProperty (dpy, root, XInternAtom (dpy, "_XROOTPMAP_ID", False),
+ 0, 4, False, AnyPropertyType,
+ &actual_type, &actual_format, &nitems, &bytes_after, &prop) == Success)
+ {
+ memcpy (&pixmap, prop, 4);
+ XFree (prop);
+ fill = False;
+ }
+ else
+ {
+ pixmap = XCreatePixmap (dpy, root, 1, 1, DefaultDepth (dpy, scr));
+ fill = True;
+ }
+ pa.repeat = True;
+ picture = XRenderCreatePicture (dpy, pixmap,
+ XRenderFindVisualFormat (dpy,
+ DefaultVisual (dpy, scr)),
+ CPRepeat, &pa);
+ if (fill)
+ {
+ XRenderColor c;
+
+ c.red = c.green = c.blue = 0x8080;
+ c.alpha = 0xffff;
+ XRenderFillRectangle (dpy, PictOpSrc, picture, &c,
+ 0, 0, 1, 1);
+ }
+ return picture;
+}
+
void
paint_root (Display *dpy)
{
- XRenderColor c;
+ if (!rootTile)
+ rootTile = root_tile (dpy);
- c.red = c.green = c.blue = 0x8080;
- c.alpha = 0xffff;
- XRenderFillRectangle (dpy, PictOpSrc, rootPicture, &c,
- 0, 0, 32767, 32767);
+ XRenderComposite (dpy, PictOpSrc,
+ rootTile, None, rootPicture,
+ 0, 0, 0, 0, 0, 0, 32767, 32767);
}
XserverRegion