diff options
author | okan <okan> | 2015-09-23 14:09:40 +0000 |
---|---|---|
committer | okan <okan> | 2015-09-23 14:09:40 +0000 |
commit | 5fcf2516721dd441b435ba07f73c6315c104f5a3 (patch) | |
tree | 86e4cce5033d2bc4e26f65ac0cd5ed1ea4e63610 | |
parent | 0fdcf3f3dfd336e7593482286dff49cd8be6ce44 (diff) | |
download | cwm-5fcf2516721dd441b435ba07f73c6315c104f5a3.tar.gz cwm-5fcf2516721dd441b435ba07f73c6315c104f5a3.tar.xz cwm-5fcf2516721dd441b435ba07f73c6315c104f5a3.zip |
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.
-rw-r--r-- | client.c | 10 |
1 files changed, 10 insertions, 0 deletions
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); } |