123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- diff --git a/config.mk b/config.mk
- index 3a71529..095cead 100644
- --- a/config.mk
- +++ b/config.mk
- @@ -9,7 +9,7 @@ MANPREFIX = ${PREFIX}/share/man
-
- # includes and libs
- INCS = -I. -I/usr/include -I/usr/include/freetype2
- -LIBS = -L/usr/lib -lc -lX11 -lfontconfig -lXft
- +LIBS = -L/usr/lib -lc -lX11 -lfontconfig -lXft -lXrender
-
- # flags
- CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE
- diff --git a/tabbed.c b/tabbed.c
- index 9a44795..b4d47d1 100644
- --- a/tabbed.c
- +++ b/tabbed.c
- @@ -170,6 +170,9 @@ static char **cmd;
- static char *wmname = "tabbed";
- static const char *geometry;
-
- +static Colormap cmap;
- +static Visual *visual = NULL;
- +
- char *argv0;
-
- /* configuration, allows nested code to access above variables */
- @@ -255,8 +258,8 @@ configurenotify(const XEvent *e)
- ww = ev->width;
- wh = ev->height;
- XFreePixmap(dpy, dc.drawable);
- - dc.drawable = XCreatePixmap(dpy, root, ww, wh,
- - DefaultDepth(dpy, screen));
- + dc.drawable = XCreatePixmap(dpy, win, ww, wh,
- + 32);
- if (sel > -1)
- resize(sel, ww, wh - bh);
- XSync(dpy, False);
- @@ -399,7 +402,7 @@ drawtext(const char *text, XftColor col[ColLast])
- ;
- }
-
- - d = XftDrawCreate(dpy, dc.drawable, DefaultVisual(dpy, screen), DefaultColormap(dpy, screen));
- + d = XftDrawCreate(dpy, dc.drawable, visual, cmap);
- XftDrawStringUtf8(d, &col[ColFG], dc.font.xfont, x, y, (XftChar8 *) buf, len);
- XftDrawDestroy(d);
- }
- @@ -564,7 +567,7 @@ getcolor(const char *colstr)
- {
- XftColor color;
-
- - if (!XftColorAllocName(dpy, DefaultVisual(dpy, screen), DefaultColormap(dpy, screen), colstr, &color))
- + if (!XftColorAllocName(dpy, visual, cmap, colstr, &color))
- die("%s: cannot allocate color '%s'\n", argv0, colstr);
-
- return color;
- @@ -1016,18 +1019,60 @@ setup(void)
- wy = dh + wy - wh - 1;
- }
-
- + XVisualInfo *vis;
- + XRenderPictFormat *fmt;
- + int nvi;
- + int i;
- +
- + XVisualInfo tpl = {
- + .screen = screen,
- + .depth = 32,
- + .class = TrueColor
- + };
- +
- + vis = XGetVisualInfo(dpy, VisualScreenMask | VisualDepthMask | VisualClassMask, &tpl, &nvi);
- + for(i = 0; i < nvi; i ++) {
- + fmt = XRenderFindVisualFormat(dpy, vis[i].visual);
- + if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) {
- + visual = vis[i].visual;
- + break;
- + }
- + }
- +
- + XFree(vis);
- +
- + if (! visual) {
- + fprintf(stderr, "Couldn't find ARGB visual.\n");
- + exit(1);
- + }
- +
- + cmap = XCreateColormap( dpy, root, visual, None);
- dc.norm[ColBG] = getcolor(normbgcolor);
- dc.norm[ColFG] = getcolor(normfgcolor);
- dc.sel[ColBG] = getcolor(selbgcolor);
- dc.sel[ColFG] = getcolor(selfgcolor);
- dc.urg[ColBG] = getcolor(urgbgcolor);
- dc.urg[ColFG] = getcolor(urgfgcolor);
- - dc.drawable = XCreatePixmap(dpy, root, ww, wh,
- - DefaultDepth(dpy, screen));
- - dc.gc = XCreateGC(dpy, root, 0, 0);
-
- - win = XCreateSimpleWindow(dpy, root, wx, wy, ww, wh, 0,
- - dc.norm[ColFG].pixel, dc.norm[ColBG].pixel);
- + XSetWindowAttributes attrs;
- + attrs.background_pixel = dc.norm[ColBG].pixel;
- + attrs.border_pixel = dc.norm[ColFG].pixel;
- + attrs.bit_gravity = NorthWestGravity;
- + attrs.event_mask = FocusChangeMask | KeyPressMask
- + | ExposureMask | VisibilityChangeMask | StructureNotifyMask
- + | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
- + attrs.background_pixmap = None ;
- + attrs.colormap = cmap;
- +
- + win = XCreateWindow(dpy, root, wx, wy,
- + ww, wh, 0, 32, InputOutput,
- + visual, CWBackPixmap | CWBorderPixel | CWBitGravity
- + | CWEventMask | CWColormap, &attrs);
- +
- + dc.drawable = XCreatePixmap(dpy, win, ww, wh,
- + 32);
- + dc.gc = XCreateGC(dpy, dc.drawable, 0, 0);
- +
- XMapRaised(dpy, win);
- XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask |
- ButtonPressMask | ExposureMask | KeyPressMask |
|