123 lines
3.7 KiB
Diff
123 lines
3.7 KiB
Diff
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 |
|