fix focus handling (thanks roman) - ttabbed - Simple tabbing application for X11.
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit a93dac27981fce0e2fdd4a1924beb3b5d5e7b7a5
 (DIR) parent 0a9c6d02e6219eaf527f87429859b726baa73d27
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Mon, 26 Sep 2011 22:39:59 +0100
       
       fix focus handling (thanks roman)
       Diffstat:
         tabbed.c                            |      18 ++++++++++--------
       
       1 file changed, 10 insertions(+), 8 deletions(-)
       ---
 (DIR) diff --git a/tabbed.c b/tabbed.c
       @@ -94,7 +94,6 @@ static void die(const char *errstr, ...);
        static void drawbar();
        static void drawtext(const char *text, unsigned long col[ColLast]);
        static void *emallocz(size_t size);
       -static void enternotify(const XEvent *e);
        static void expose(const XEvent *e);
        static void focus(Client *c);
        static void focusin(const XEvent *e);
       @@ -134,7 +133,6 @@ static void (*handler[LASTEvent]) (const XEvent *) = {
                [ConfigureRequest] = configurerequest,
                [CreateNotify] = createnotify,
                [DestroyNotify] = destroynotify,
       -        [EnterNotify] = enternotify,
                [Expose] = expose,
                [FocusIn] = focusin,
                [KeyPress] = keypress,
       @@ -368,11 +366,6 @@ emallocz(size_t size) {
        }
        
        void
       -enternotify(const XEvent *e) {
       -        focus(sel);
       -}
       -
       -void
        expose(const XEvent *e) {
                const XExposeEvent *ev = &e->xexpose;
        
       @@ -390,6 +383,7 @@ focus(Client *c) {
                }
                resize(c, ww, wh - bh);
                XRaiseWindow(dpy, c->win);
       +        XSetInputFocus(dpy, c->win, RevertToParent, CurrentTime);
                sendxembed(c, XEMBED_FOCUS_IN, XEMBED_FOCUS_CURRENT, 0, 0);
                sendxembed(c, XEMBED_WINDOW_ACTIVATE, 0, 0, 0);
                XStoreName(dpy, win, c->name);
       @@ -402,7 +396,15 @@ focus(Client *c) {
        
        void
        focusin(const XEvent *e) {
       -        focus(sel);
       +        const XFocusChangeEvent *ev = &e->xfocus;
       +        int dummy;
       +        Window focused;
       +
       +        if(ev->mode != NotifyUngrab) {
       +                XGetInputFocus(dpy, &focused, &dummy);
       +                if(focused == win)
       +                        focus(sel);
       +        }
        }
        
        void