all repos — dwm @ 68ff133857244347cc6c8512040f1eb32fe2ed2f

my dwm build

fixed focus steeling bug done by clients like opera
Anselm R. Garbe garbeam@gmail.com
Sat, 17 Nov 2007 19:59:13 +0100
commit

68ff133857244347cc6c8512040f1eb32fe2ed2f

parent

4380db468aa81f73e3a31f434bc5bd4a2fe35bf0

1 files changed, 12 insertions(+), 3 deletions(-)

jump to
M dwm.cdwm.c

@@ -137,6 +137,7 @@ void eprint(const char *errstr, ...);

void expose(XEvent *e); void floating(void); /* default floating layout */ void focus(Client *c); +void focusin(XEvent *e); void focusnext(const char *arg); void focusprev(const char *arg); Client *getclient(Window w);

@@ -206,9 +207,10 @@ [ConfigureRequest] = configurerequest,

[ConfigureNotify] = configurenotify, [DestroyNotify] = destroynotify, [EnterNotify] = enternotify, - [LeaveNotify] = leavenotify, [Expose] = expose, + [FocusIn] = focusin, [KeyPress] = keypress, + [LeaveNotify] = leavenotify, [MappingNotify] = mappingnotify, [MapRequest] = maprequest, [PropertyNotify] = propertynotify,

@@ -710,6 +712,14 @@ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);

} void +focusin(XEvent *e) { /* there are some broken focus acquiring clients */ + XFocusChangeEvent *ev = &e->xfocus; + + if(sel && ev->window != sel->win) + XSetInputFocus(dpy, sel->win, RevertToPointerRoot, CurrentTime); +} + +void focusnext(const char *arg) { Client *c;

@@ -1026,8 +1036,7 @@ XConfigureWindow(dpy, w, CWBorderWidth, &wc);

XSetWindowBorder(dpy, w, dc.norm[ColBorder]); configure(c); /* propagates border_width, if size doesn't change */ updatesizehints(c); - XSelectInput(dpy, w, - StructureNotifyMask | PropertyChangeMask | EnterWindowMask); + XSelectInput(dpy, w, EnterWindowMask | FocusChangeMask | PropertyChangeMask | StructureNotifyMask); grabbuttons(c, False); updatetitle(c); if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success))