From 5fcf2516721dd441b435ba07f73c6315c104f5a3 Mon Sep 17 00:00:00 2001 From: okan Date: Wed, 23 Sep 2015 14:09:40 +0000 Subject: [PATCH] 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 | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/client.c b/client.c index 54eced1..4df5be8 100644 --- a/client.c +++ b/client.c @@ -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); }