From 337fd02962f9d55347c18b20876f44d2600787ee Mon Sep 17 00:00:00 2001 From: okan Date: Wed, 23 Sep 2015 14:09:40 +0000 Subject: Only when mapping clients from an initial wm start or restart, query the pointer and if it matches the child window, activate it; new clients will not need to make this roundtrip to the server. Based on a patch from Preben Guldberg. --- client.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'client.c') diff --git a/client.c b/client.c index 5d93e81..50ed77c 100644 --- a/client.c +++ b/client.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: client.c,v 1.209 2015/08/27 18:53:15 okan Exp $ + * $OpenBSD: client.c,v 1.210 2015/09/23 14:09:40 okan Exp $ */ #include @@ -48,6 +48,9 @@ client_init(Window win, struct screen_ctx *sc) struct client_ctx *cc; XWindowAttributes wattr; int mapped; + Window rwin, cwin; + int x, y, wx, wy, activate = 0; + unsigned int mask; if (win == None) return(NULL); @@ -97,6 +100,10 @@ client_init(Window win, struct screen_ctx *sc) client_move(cc); if ((cc->wmh) && (cc->wmh->flags & StateHint)) client_set_wm_state(cc, cc->wmh->initial_state); + } else { + if ((XQueryPointer(X_Dpy, cc->win, &rwin, &cwin, + &x, &y, &wx, &wy, &mask)) && (cwin != None)) + activate = 1; } XSelectInput(X_Dpy, cc->win, ColormapChangeMask | EnterWindowMask | @@ -134,6 +141,9 @@ out: XSync(X_Dpy, False); XUngrabServer(X_Dpy); + if (activate) + client_setactive(cc); + return(cc); } -- cgit v1.2.3-2-gb3c3