cvsimport
* refs/heads/master: During init, query screen for _NET_ACTIVE_WINDOW and set that client as active; while we already look at what's under the pointer, use this information first, then look under the pointer (saving that round-trip). This restores the active state to a client after restart even if the pointer is not above it (and of course the pointer is not above another client).
This commit is contained in:
10
client.c
10
client.c
@@ -43,13 +43,13 @@ static int client_inbound(struct client_ctx *, int, int);
|
||||
struct client_ctx *curcc = NULL;
|
||||
|
||||
struct client_ctx *
|
||||
client_init(Window win, struct screen_ctx *sc)
|
||||
client_init(Window win, struct screen_ctx *sc, int active)
|
||||
{
|
||||
struct client_ctx *cc;
|
||||
XWindowAttributes wattr;
|
||||
int mapped;
|
||||
Window rwin, cwin;
|
||||
int x, y, wx, wy, activate = 0;
|
||||
int x, y, wx, wy;
|
||||
unsigned int mask;
|
||||
|
||||
if (win == None)
|
||||
@@ -105,9 +105,9 @@ client_init(Window win, struct screen_ctx *sc)
|
||||
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,
|
||||
if ((active == 0) && (XQueryPointer(X_Dpy, cc->win, &rwin, &cwin,
|
||||
&x, &y, &wx, &wy, &mask)) && (cwin != None))
|
||||
activate = 1;
|
||||
active = 1;
|
||||
}
|
||||
|
||||
XSelectInput(X_Dpy, cc->win, ColormapChangeMask | EnterWindowMask |
|
||||
@@ -145,7 +145,7 @@ out:
|
||||
XSync(X_Dpy, False);
|
||||
XUngrabServer(X_Dpy);
|
||||
|
||||
if (activate)
|
||||
if (active)
|
||||
client_setactive(cc);
|
||||
|
||||
return(cc);
|
||||
|
||||
Reference in New Issue
Block a user