works better now with windowmanager who use mapping/unmapping - ttabbed - Simple tabbing application for X11.
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f2aba1fe0e666f3ad777356cecc1dea04236d15c
 (DIR) parent e3b3233230ef694b260503879fd747eca5c266af
 (HTM) Author: Enno Boland (tox) <tox@s01.de>
       Date:   Wed, 28 Oct 2009 11:40:02 +0100
       
       works better now with windowmanager who use mapping/unmapping
       Diffstat:
         tabbed.c                            |      22 +++++++++++-----------
       
       1 file changed, 11 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/tabbed.c b/tabbed.c
       @@ -83,6 +83,7 @@ typedef struct Client {
                struct Client *next;
                Window win;
                int tabx;
       +        Bool mapped;
        } Client;
        
        /* function declarations */
       @@ -121,7 +122,6 @@ static void sigchld(int unused);
        static void spawn(const Arg *arg);
        static int textnw(const char *text, unsigned int len);
        static void unmanage(Client *c);
       -static void unmapnotify(const XEvent *e);
        static void updatenumlockmask(void);
        static void updatetitle(Client *c);
        static int xerror(Display *dpy, XErrorEvent *ee);
       @@ -140,7 +140,6 @@ static void (*handler[LASTEvent]) (const XEvent *) = {
                [FocusIn] = focusin,
                [KeyPress] = keypress,
                [PropertyNotify] = propertynotify,
       -        [UnmapNotify] = unmapnotify,
        };
        static int bh, wx, wy, ww, wh;
        static unsigned int numlockmask = 0;
       @@ -765,15 +764,6 @@ unmanage(Client *c) {
        }
        
        void
       -unmapnotify(const XEvent *e) {
       -        const XUnmapEvent *ev = &e->xunmap;
       -        Client *c;
       -
       -        if((c = getclient(ev->window)))
       -                unmanage(c);
       -}
       -
       -void
        updatenumlockmask(void) {
                unsigned int i, j;
                XModifierKeymap *modmap;
       @@ -801,6 +791,16 @@ updatetitle(Client *c) {
         * default error handler, which may call exit.  */
        int
        xerror(Display *dpy, XErrorEvent *ee) {
       +        if(ee->error_code == BadWindow
       +        || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch)
       +        || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable)
       +        || (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable)
       +        || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable)
       +        || (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch)
       +        || (ee->request_code == X_GrabButton && ee->error_code == BadAccess)
       +        || (ee->request_code == X_GrabKey && ee->error_code == BadAccess)
       +        || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable))
       +                return 0;
                fprintf(stderr, "tabbed: fatal error: request code=%d, error code=%d\n",
                                ee->request_code, ee->error_code);
                return xerrorxlib(dpy, ee); /* may call exit */