From e142128ddea840d8140fdd0b28fff121cb2b4598 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 10 Nov 2003 02:03:26 +0000 Subject: [PATCH] Detect root pattern with undocumented _XROOTPMAP_ID property --- ChangeLog | 5 +++++ xcompmgr.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 16ae2a2..4cd9f8b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-11-09 Keith Packard + + * xcompmgr.c: (root_tile), (paint_root): + Detect root pattern with undocumented _XROOTPMAP_ID property + 2003-11-09 Keith Packard * Makefile: 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