aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/rio
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-08-13 13:57:58 +0000
committerrsc <devnull@localhost>2004-08-13 13:57:58 +0000
commit2c1b986edff846e76c1ae7b04a23807055293366 (patch)
tree3ca122ef2c1274a669141ac1e8b5e6b4265d2a69 /src/cmd/rio
parent2fc26be665bc4b3fb27187ccb326f6a28bd6b9c7 (diff)
downloadplan9port-2c1b986edff846e76c1ae7b04a23807055293366.tar.gz
plan9port-2c1b986edff846e76c1ae7b04a23807055293366.tar.bz2
plan9port-2c1b986edff846e76c1ae7b04a23807055293366.zip
better mask handling, don't raise windows quite so eagerly.
Diffstat (limited to 'src/cmd/rio')
-rw-r--r--src/cmd/rio/client.c4
-rw-r--r--src/cmd/rio/event.c15
-rw-r--r--src/cmd/rio/main.c15
3 files changed, 17 insertions, 17 deletions
diff --git a/src/cmd/rio/client.c b/src/cmd/rio/client.c
index 16168b49..22d74dd9 100644
--- a/src/cmd/rio/client.c
+++ b/src/cmd/rio/client.c
@@ -23,11 +23,11 @@ setactive(Client *c, int on)
XUngrabButton(dpy, AnyButton, AnyModifier, c->parent);
XSetInputFocus(dpy, c->window, RevertToPointerRoot, timestamp());
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);
} else {
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,
ButtonMask, GrabModeAsync, GrabModeSync, None, None);
}
diff --git a/src/cmd/rio/event.c b/src/cmd/rio/event.c
index af405c02..39aff18a 100644
--- a/src/cmd/rio/event.c
+++ b/src/cmd/rio/event.c
@@ -130,12 +130,6 @@ configurereq(XConfigureRequestEvent *e)
if (e->value_mask & CWBorderWidth)
c->border = e->border_width;
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) {
wc.x = c->x-BORDER;
wc.y = c->y-BORDER;
@@ -146,8 +140,13 @@ configurereq(XConfigureRequestEvent *e)
wc.stack_mode = e->detail;
XConfigureWindow(dpy, c->parent, e->value_mask, &wc);
sendconfig(c);
- top(c);
- active(c);
+ }
+ if (e->value_mask & CWStackMode) {
+ if (wc.stack_mode == Above) {
+ top(c);
+ active(c);
+ }else
+ e->value_mask &= ~CWStackMode;
}
}
diff --git a/src/cmd/rio/main.c b/src/cmd/rio/main.c
index 7c7e7146..d2da22b3 100644
--- a/src/cmd/rio/main.c
+++ b/src/cmd/rio/main.c
@@ -411,13 +411,14 @@ sendcmessage(Window w, Atom a, long x, int isroot, int usemask)
ev.xclient.format = 32;
ev.xclient.data.l[0] = x;
ev.xclient.data.l[1] = timestamp();
- if (usemask == 0)
- mask = 0;
- else if (isroot)
- mask = SubstructureRedirectMask; /* magic! */
- else
- mask = ExposureMask; /* not really correct but so be it */
- mask |= KeyPressMask; /* seems to be necessary */
+ mask = 0;
+ if(usemask){
+ 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);
if (status == 0)
fprintf(stderr, "rio: sendcmessage failed\n");