handle configurerequest. - ttabbed - Simple tabbing application for X11.
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit a9ad7e7201fddb96e41060292a0a1c060daac579
 (DIR) parent 204af1549bb5f1e8e848579ff41ee52d58dd593f
 (HTM) Author: Enno Boland (tox) <tox@s01.de>
       Date:   Tue, 13 Oct 2009 08:13:30 +0200
       
       handle configurerequest.
       Diffstat:
         tabbed.c                            |      38 ++++++++++++++++++++++++-------
       
       1 file changed, 30 insertions(+), 8 deletions(-)
       ---
 (DIR) diff --git a/tabbed.c b/tabbed.c
       @@ -92,6 +92,7 @@ static void buttonpress(XEvent *e);
        static void cleanup(void);
        static void clientmessage(XEvent *e);
        static void configurenotify(XEvent *e);
       +static void configurerequest(XEvent *e);
        static void createnotify(XEvent *e);
        static void destroynotify(XEvent *e);
        static void die(const char *errstr, ...);
       @@ -133,6 +134,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
                [ButtonPress] = buttonpress,
                [ClientMessage] = clientmessage,
                [ConfigureNotify] = configurenotify,
       +        [ConfigureRequest] = configurerequest,
                [CreateNotify] = createnotify,
                [DestroyNotify] = destroynotify,
                [EnterNotify] = enternotify,
       @@ -152,7 +154,7 @@ static Atom wmatom[WMLast], netatom[NetLast], xembedatom;
        static Window root, win;
        static Client *clients = NULL, *sel = NULL;
        static int (*xerrorxlib)(Display *, XErrorEvent *);
       -static char winid[128];
       +static char winid[64];
        /* configuration, allows nested code to access above variables */
        #include "config.h"
        
       @@ -193,6 +195,7 @@ clientmessage(XEvent *e) {
                        printf("%ld %ld %ld %ld %ld\n", ev->data.l[0], ev->data.l[1], ev->data.l[2], ev->data.l[3], ev->data.l[4]);
                }
        }
       +
        void
        configurenotify(XEvent *e) {
                XConfigureEvent *ev = &e->xconfigure;
       @@ -210,6 +213,24 @@ configurenotify(XEvent *e) {
        }
        
        void
       +configurerequest(XEvent *e) {
       +        XConfigureRequestEvent *ev = &e->xconfigurerequest;
       +        XWindowChanges wc;
       +        Client *c;
       +
       +        if((c = getclient(ev->window))) {
       +                wc.x = 0;
       +                wc.y = bh;
       +                wc.width = ww;
       +                wc.height = wh - bh;
       +                wc.border_width = 0;
       +                wc.sibling = ev->above;
       +                wc.stack_mode = ev->detail;
       +                XConfigureWindow(dpy, c->win, ev->value_mask, &wc);
       +        }
       +}
       +
       +void
        createnotify(XEvent *e) {
                XCreateWindowEvent *ev = &e->xcreatewindow;
        
       @@ -241,11 +262,13 @@ drawbar() {
                unsigned long *col;
                int n, width;
                Client *c, *fc;
       +        char *name = NULL;
        
                if(!clients) {
                        dc.x = 0;
                        dc.w = ww;
       -                drawtext("tabbed-"VERSION, dc.norm);
       +                XFetchName(dpy, win, &name);
       +                drawtext(name ? name : "", dc.norm);
                        XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, ww, bh, 0, 0);
                        XSync(dpy, False);
                        return;
       @@ -341,13 +364,12 @@ void
        focus(Client *c) {
                XEvent e;
        
       -        if(!c)
       -                c = clients;
       -        if(!c) {
       -                sel = NULL;
       +        if(!clients) {
                        XStoreName(dpy, win, "tabbed-"VERSION);
                        return;
                }
       +        if(!c)
       +                return;
                XRaiseWindow(dpy, c->win);
                XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
                e.xclient.window = c->win;
       @@ -683,11 +705,11 @@ setup(void) {
                                StructureNotifyMask);
                xerrorxlib = XSetErrorHandler(xerror);
                XClassHint class_hint;
       -        XStoreName(dpy, win, "tabbed-"VERSION);
                class_hint.res_name = "tabbed";
                class_hint.res_class = "Tabbed";
                XSetClassHint(dpy, win, &class_hint);
                snprintf(winid, LENGTH(winid), "%u", (int)win);
       +        focus(clients);
        }
        
        void
       @@ -725,7 +747,6 @@ void
        unmanage(Client *c) {
                Client *pc;
        
       -        focus(NULL);
                if(!clients)
                        return;
                else if(c == clients)
       @@ -735,6 +756,7 @@ unmanage(Client *c) {
                        pc->next = c->next;
                }
                free(c);
       +        focus(clients);
                XSync(dpy, False);
        }