On 2009-02-08 21:52 +0100, Daniel Clemente wrote: > > Hi; thanks for the helpful explanations. > > I tried doing that change and it stayed the same. I also tried doing a > sleep(2) before sending the WM_TAKE_FOCUS (with the +2s timestamp), but > without success. > > What did work is this:
Try the attached patch. (Disclaimer: I haven't particularly tried it; just quickly threw it together.) -- Stop Gnomes and other pests! Purchase Windows today!
diff -rN -u old-ion-3/ioncore/clientwin.c new-ion-3/ioncore/clientwin.c --- old-ion-3/ioncore/clientwin.c 2009-02-09 00:35:07.380883290 +0200 +++ new-ion-3/ioncore/clientwin.c 2009-02-09 00:35:07.488878930 +0200 @@ -1015,10 +1015,11 @@ { if(cwin->flags&CLIENTWIN_P_WM_TAKE_FOCUS){ Time stmp=ioncore_get_timestamp(); + region_finalise_focusing((WRegion*)cwin, cwin->win, warp, stmp); send_clientmsg(cwin->win, ioncore_g.atom_wm_take_focus, stmp); + }else{ + region_finalise_focusing((WRegion*)cwin, cwin->win, warp, CurrentTime); } - - region_finalise_focusing((WRegion*)cwin, cwin->win, warp); XSync(ioncore_g.dpy, 0); } diff -rN -u old-ion-3/ioncore/focus.c new-ion-3/ioncore/focus.c --- old-ion-3/ioncore/focus.c 2009-02-09 00:35:07.368883774 +0200 +++ new-ion-3/ioncore/focus.c 2009-02-09 00:35:07.484879092 +0200 @@ -347,7 +347,7 @@ /*Time ioncore_focus_time=CurrentTime;*/ -void region_finalise_focusing(WRegion* reg, Window win, bool warp) +void region_finalise_focusing(WRegion* reg, Window win, bool warp, Time time) { if(warp) region_do_warp(reg); @@ -356,10 +356,7 @@ return; region_set_await_focus(reg); - /*xwindow_do_set_focus(win);*/ - XSetInputFocus(ioncore_g.dpy, win, RevertToParent, - CurrentTime/*ioncore_focus_time*/); - /*ioncore_focus_time=CurrentTime;*/ + XSetInputFocus(ioncore_g.dpy, win, RevertToParent, time); } diff -rN -u old-ion-3/ioncore/focus.h new-ion-3/ioncore/focus.h --- old-ion-3/ioncore/focus.h 2009-02-09 00:35:07.368883774 +0200 +++ new-ion-3/ioncore/focus.h 2009-02-09 00:35:07.484879092 +0200 @@ -23,7 +23,7 @@ extern void region_warp(WRegion *reg); /* maybewarp TRUE */ extern void region_set_focus(WRegion *reg); /* maybewarp FALSE */ -extern void region_finalise_focusing(WRegion* reg, Window win, bool warp); +extern void region_finalise_focusing(WRegion* reg, Window win, bool warp, Time time); DYNFUN void region_do_set_focus(WRegion *reg, bool warp); extern void region_do_warp(WRegion *reg); diff -rN -u old-ion-3/ioncore/group.c new-ion-3/ioncore/group.c --- old-ion-3/ioncore/group.c 2009-02-09 00:35:07.272887653 +0200 +++ new-ion-3/ioncore/group.c 2009-02-09 00:35:07.460880061 +0200 @@ -241,7 +241,7 @@ if(st!=NULL && st->reg!=NULL) region_do_set_focus(st->reg, warp); else - region_finalise_focusing((WRegion*)ws, ws->dummywin, warp); + region_finalise_focusing((WRegion*)ws, ws->dummywin, warp, CurrentTime); } diff -rN -u old-ion-3/ioncore/window.c new-ion-3/ioncore/window.c --- old-ion-3/ioncore/window.c 2009-02-09 00:35:07.332885230 +0200 +++ new-ion-3/ioncore/window.c 2009-02-09 00:35:07.480879252 +0200 @@ -182,7 +182,7 @@ void window_do_set_focus(WWindow *wwin, bool warp) { - region_finalise_focusing((WRegion*)wwin, wwin->win, warp); + region_finalise_focusing((WRegion*)wwin, wwin->win, warp, CurrentTime); } diff -rN -u old-ion-3/mod_tiling/tiling.c new-ion-3/mod_tiling/tiling.c --- old-ion-3/mod_tiling/tiling.c 2009-02-09 00:35:07.124893627 +0200 +++ new-ion-3/mod_tiling/tiling.c 2009-02-09 00:35:07.416881837 +0200 @@ -158,7 +158,7 @@ void tiling_fallback_focus(WTiling *ws, bool warp) { - region_finalise_focusing((WRegion*)ws, ws->dummywin, warp); + region_finalise_focusing((WRegion*)ws, ws->dummywin, warp, CurrentTime); }