better mask handling, don't raise windows quite so eagerly.

This commit is contained in:
rsc 2004-08-13 13:57:58 +00:00
parent 2fc26be665
commit 2c1b986edf
3 changed files with 17 additions and 17 deletions

View file

@ -23,11 +23,11 @@ setactive(Client *c, int on)
XUngrabButton(dpy, AnyButton, AnyModifier, c->parent); XUngrabButton(dpy, AnyButton, AnyModifier, c->parent);
XSetInputFocus(dpy, c->window, RevertToPointerRoot, timestamp()); XSetInputFocus(dpy, c->window, RevertToPointerRoot, timestamp());
if (c->proto & Ptakefocus) if (c->proto & Ptakefocus)
sendcmessage(c->window, wm_protocols, wm_take_focus, 0, 0); sendcmessage(c->window, wm_protocols, wm_take_focus, 0, 1);
cmapfocus(c); cmapfocus(c);
} else { } else {
if (c->proto & Plosefocus) if (c->proto & Plosefocus)
sendcmessage(c->window, wm_protocols, wm_lose_focus, 0, 0); sendcmessage(c->window, wm_protocols, wm_lose_focus, 0, 1);
XGrabButton(dpy, AnyButton, AnyModifier, c->parent, False, XGrabButton(dpy, AnyButton, AnyModifier, c->parent, False,
ButtonMask, GrabModeAsync, GrabModeSync, None, None); ButtonMask, GrabModeAsync, GrabModeSync, None, None);
} }

View file

@ -130,12 +130,6 @@ configurereq(XConfigureRequestEvent *e)
if (e->value_mask & CWBorderWidth) if (e->value_mask & CWBorderWidth)
c->border = e->border_width; c->border = e->border_width;
gravitate(c, 0); gravitate(c, 0);
if (e->value_mask & CWStackMode) {
if (e->detail == Above)
top(c);
else
e->value_mask &= ~CWStackMode;
}
if (c->parent != c->screen->root && c->window == e->window) { if (c->parent != c->screen->root && c->window == e->window) {
wc.x = c->x-BORDER; wc.x = c->x-BORDER;
wc.y = c->y-BORDER; wc.y = c->y-BORDER;
@ -146,8 +140,13 @@ configurereq(XConfigureRequestEvent *e)
wc.stack_mode = e->detail; wc.stack_mode = e->detail;
XConfigureWindow(dpy, c->parent, e->value_mask, &wc); XConfigureWindow(dpy, c->parent, e->value_mask, &wc);
sendconfig(c); sendconfig(c);
}
if (e->value_mask & CWStackMode) {
if (wc.stack_mode == Above) {
top(c); top(c);
active(c); active(c);
}else
e->value_mask &= ~CWStackMode;
} }
} }

View file

@ -411,13 +411,14 @@ sendcmessage(Window w, Atom a, long x, int isroot, int usemask)
ev.xclient.format = 32; ev.xclient.format = 32;
ev.xclient.data.l[0] = x; ev.xclient.data.l[0] = x;
ev.xclient.data.l[1] = timestamp(); ev.xclient.data.l[1] = timestamp();
if (usemask == 0)
mask = 0; mask = 0;
else if (isroot) if(usemask){
mask = SubstructureRedirectMask; /* magic! */
else
mask = ExposureMask; /* not really correct but so be it */
mask |= KeyPressMask; /* seems to be necessary */ mask |= KeyPressMask; /* seems to be necessary */
if (isroot)
mask |= SubstructureRedirectMask; /* magic! */
else
mask |= ExposureMask; /* not really correct but so be it */
}
status = XSendEvent(dpy, w, False, mask, &ev); status = XSendEvent(dpy, w, False, mask, &ev);
if (status == 0) if (status == 0)
fprintf(stderr, "rio: sendcmessage failed\n"); fprintf(stderr, "rio: sendcmessage failed\n");