URI:
       tabbed-alpha-0.9.diff - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
       tabbed-alpha-0.9.diff (3881B)
       ---
            1 diff --git a/Makefile b/Makefile
            2 index d7a2c35..16ceff0 100644
            3 --- a/Makefile
            4 +++ b/Makefile
            5 @@ -10,7 +10,7 @@ DOCPREFIX = ${PREFIX}/share/doc/${NAME}
            6 
            7  # use system flags.
            8  TABBED_CFLAGS = -I/usr/X11R6/include -I/usr/include/freetype2 ${CFLAGS}
            9 -TABBED_LDFLAGS = -L/usr/X11R6/lib -lX11 -lfontconfig -lXft ${LDFLAGS}
           10 +TABBED_LDFLAGS = -L/usr/X11R6/lib -lX11 -lfontconfig -lXft -lXrender ${LDFLAGS}
           11  TABBED_CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700L
           12 
           13  # OpenBSD (uncomment)
           14 diff --git a/tabbed.c b/tabbed.c
           15 index aa45716..d1911a3 100644
           16 --- a/tabbed.c
           17 +++ b/tabbed.c
           18 @@ -170,6 +170,9 @@ static char **cmd;
           19  static char *wmname = "tabbed";
           20  static const char *geometry;
           21 
           22 +static Colormap cmap;
           23 +static Visual *visual = NULL;
           24 +
           25  char *argv0;
           26 
           27  /* configuration, allows nested code to access above variables */
           28 @@ -254,8 +257,8 @@ configurenotify(const XEvent *e)
           29                  ww = ev->width;
           30                  wh = ev->height;
           31                  XFreePixmap(dpy, dc.drawable);
           32 -                dc.drawable = XCreatePixmap(dpy, root, ww, wh,
           33 -                              DefaultDepth(dpy, screen));
           34 +                dc.drawable = XCreatePixmap(dpy, win, ww, wh,
           35 +                              32);
           36 
           37                  if (!obh && (wh <= bh)) {
           38                          obh = bh;
           39 @@ -407,7 +410,7 @@ drawtext(const char *text, XftColor col[ColLast])
           40                          ;
           41          }
           42 
           43 -        d = XftDrawCreate(dpy, dc.drawable, DefaultVisual(dpy, screen), DefaultColormap(dpy, screen));
           44 +        d = XftDrawCreate(dpy, dc.drawable, visual, cmap);
           45          XftDrawStringUtf8(d, &col[ColFG], dc.font.xfont, x, y, (XftChar8 *) buf, len);
           46          XftDrawDestroy(d);
           47  }
           48 @@ -587,7 +590,7 @@ getcolor(const char *colstr)
           49  {
           50          XftColor color;
           51 
           52 -        if (!XftColorAllocName(dpy, DefaultVisual(dpy, screen), DefaultColormap(dpy, screen), colstr, &color))
           53 +  if (!XftColorAllocName(dpy, visual, cmap, colstr, &color))
           54                  die("%s: cannot allocate color '%s'\n", argv0, colstr);
           55 
           56          return color;
           57 @@ -1049,18 +1052,60 @@ setup(void)
           58                          wy = dh + wy - wh - 1;
           59          }
           60 
           61 +        XVisualInfo *vis;
           62 +        XRenderPictFormat *fmt;
           63 +        int nvi;
           64 +        int i;
           65 +
           66 +        XVisualInfo tpl = {
           67 +                .screen = screen,
           68 +                .depth = 32,
           69 +                .class = TrueColor
           70 +        };
           71 +
           72 +        vis = XGetVisualInfo(dpy, VisualScreenMask | VisualDepthMask | VisualClassMask, &tpl, &nvi);
           73 +        for(i = 0; i < nvi; i ++) {
           74 +                fmt = XRenderFindVisualFormat(dpy, vis[i].visual);
           75 +                if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) {
           76 +                        visual = vis[i].visual;
           77 +                        break;
           78 +                }
           79 +        }
           80 +
           81 +        XFree(vis);
           82 +
           83 +        if (! visual) {
           84 +                fprintf(stderr, "Couldn't find ARGB visual.\n");
           85 +                exit(1);
           86 +        }
           87 +
           88 +        cmap = XCreateColormap( dpy, root, visual, None);
           89          dc.norm[ColBG] = getcolor(normbgcolor);
           90          dc.norm[ColFG] = getcolor(normfgcolor);
           91          dc.sel[ColBG] = getcolor(selbgcolor);
           92          dc.sel[ColFG] = getcolor(selfgcolor);
           93          dc.urg[ColBG] = getcolor(urgbgcolor);
           94          dc.urg[ColFG] = getcolor(urgfgcolor);
           95 -        dc.drawable = XCreatePixmap(dpy, root, ww, wh,
           96 -                                    DefaultDepth(dpy, screen));
           97 -        dc.gc = XCreateGC(dpy, root, 0, 0);
           98 
           99 -        win = XCreateSimpleWindow(dpy, root, wx, wy, ww, wh, 0,
          100 -                                  dc.norm[ColFG].pixel, dc.norm[ColBG].pixel);
          101 +        XSetWindowAttributes attrs;
          102 +        attrs.background_pixel = dc.norm[ColBG].pixel;
          103 +        attrs.border_pixel = dc.norm[ColFG].pixel;
          104 +        attrs.bit_gravity = NorthWestGravity;
          105 +        attrs.event_mask = FocusChangeMask | KeyPressMask
          106 +                | ExposureMask | VisibilityChangeMask | StructureNotifyMask
          107 +                | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
          108 +        attrs.background_pixmap = None ;
          109 +        attrs.colormap = cmap;
          110 +
          111 +        win = XCreateWindow(dpy, root, wx, wy,
          112 +        ww, wh, 0, 32, InputOutput,
          113 +        visual, CWBackPixmap | CWBorderPixel | CWBitGravity
          114 +        | CWEventMask | CWColormap, &attrs);
          115 +
          116 +        dc.drawable = XCreatePixmap(dpy, win, ww, wh,
          117 +                                    32);
          118 +        dc.gc = XCreateGC(dpy, dc.drawable, 0, 0);
          119 +
          120          XMapRaised(dpy, win);
          121          XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask |
          122                       ButtonPressMask | ExposureMask | KeyPressMask |
          123 --
          124 2.51.0