tabbed

tab interface for application supporting Xembed
git clone git://git.suckless.org/tabbed
Log | Files | Refs | README | LICENSE

commit a93dac27981fce0e2fdd4a1924beb3b5d5e7b7a5
parent 0a9c6d02e6219eaf527f87429859b726baa73d27
Author: Connor Lane Smith <cls@lubutu.com>
Date:   Mon, 26 Sep 2011 22:39:59 +0100

fix focus handling (thanks roman)
Diffstat:
Mtabbed.c | 18++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)

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