added classhints, tab-clicking works again. - ttabbed - Simple tabbing application for X11.
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 9ed035a5c117b501d5f708a9fd677a6b85543475
 (DIR) parent d16553bcbcca9bb05c93276df7fbd3c1f1bfb45d
 (HTM) Author: Enno Boland (tox) <tox@s01.de>
       Date:   Tue,  8 Sep 2009 15:55:23 +0200
       
       added classhints, tab-clicking works again.
       Diffstat:
         config.def.h                        |       2 ++
         tabbed.c                            |      20 ++++++++++++++------
       
       2 files changed, 16 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/config.def.h b/config.def.h
       @@ -4,6 +4,8 @@ static const char normfgcolor[]     = "#c0c0c0";
        static const char selbgcolor[]      = "#884400";
        static const char selfgcolor[]      = "#f0f0f0";
        static const int tabwidth           = 200;
       +static const char before[]          = "<";
       +static const char after[]           = ">";
        
        #define EXEC "surf", "-x"
        #define MODKEY ControlMask
 (DIR) diff --git a/tabbed.c b/tabbed.c
       @@ -69,6 +69,7 @@ typedef struct Client {
                char name[256];
                struct Client *next;
                Window win;
       +        int tabx;
        } Client;
        
        ttypedef struct Listener {
       @@ -148,8 +149,11 @@ buttonpress(XEvent *e) {
                Client *c;
                XButtonPressedEvent *ev = &e->xbutton;
        
       -        for(i = 0, c = getfirsttab(); c; c = c->next, i++) {
       -                if(i * tabwidth < ev->x && (i + 1) * tabwidth > ev->x) {
       +        c = getfirsttab();
       +        if(c != clients && ev->x < TEXTW(before))
       +                return;
       +        for(i = 0; c; c = c->next, i++) {
       +                if(c->tabx > ev->x) {
                                focus(c);
                                break;
                        }
       @@ -210,6 +214,8 @@ drawbar() {
                Client *c, *fc;
        
                width = ww;
       +        for(c = clients; c; c = c->next)
       +                c->tabx = -1;
                for(n = 0, fc = c = getfirsttab(); c; c = c->next, n++);
                if(n * 200 > width) {
                        dc.w = TEXTW(after);
       @@ -238,6 +244,7 @@ drawbar() {
                        }
                        drawtext(c->name, col);
                        dc.x += dc.w;
       +                c->tabx = dc.x;
                }
                XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, ww, bh, 0, 0);
                XSync(dpy, False);
       @@ -607,6 +614,7 @@ run(void) {
                                case -1:
                                        perror("tabbed: fd error");
                                case 0:
       +                                close(l->fd);
                                        if(listeners == l)
                                                listeners = l->next;
                                        else {
       @@ -674,8 +682,8 @@ setup(void) {
                XSetErrorHandler(xerror);
                XClassHint class_hint;
                XStoreName(dpy, win, "Tabbed");
       -        class_hint.res_name = "Tabbed";
       -        class_hint.res_class = "tabbed";
       +        class_hint.res_name = "tabbed";
       +        class_hint.res_class = "Tabbed";
                XSetClassHint(dpy, win, &class_hint);
        }
        
       @@ -709,10 +717,10 @@ unmanage(Client *c) {
                if(pc)
                        pc->next = c->next;
                else
       -                pc = clients = pc->next;
       +                pc = clients = c->next;
       +        focus(pc);
                free(c);
                XSync(dpy, False);
       -        focus(pc);
        }
        
        void