wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit a3d5acc926dfd698e895ae167d55a4b5cf2972f2
parent 0ac783e0339048c219810d1180ee2df104a57ef6
Author: Kris Maglione <jg@suckless.org>
Date:   Fri,  9 Feb 2007 16:27:10 -0500

Improvements to button grabs


Diffstat:
client.c | 10+++++-----
event.c | 19++++++++++++-------
2 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/client.c b/client.c @@ -44,17 +44,17 @@ create_client(Window w, XWindowAttributes *wa) { fwa.background_pixmap = ParentRelative; fwa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | ExposureMask - | ButtonPressMask | PointerMotionMask | ButtonReleaseMask | KeyPressMask; + | PointerMotionMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask; c->framewin = XCreateWindow(blz.dpy, blz.root, c->rect.x, c->rect.y, c->rect.width + 2 * def.border, c->rect.height + def.border + labelh(&def.font), 0, DefaultDepth(blz.dpy, blz.screen), CopyFromParent, DefaultVisual(blz.dpy, blz.screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &fwa); - XGrabButton(blz.dpy, Button1, AnyModifier, c->framewin, False, ButtonMask, - GrabModeSync, GrabModeSync, None, None); - XGrabButton(blz.dpy, Button3, AnyModifier, c->framewin, False, ButtonMask, - GrabModeSync, GrabModeSync, None, None); + XGrabButton(blz.dpy, Button1, AnyModifier, c->framewin, True, ButtonPressMask, + GrabModeSync, GrabModeAsync, None, None); + XGrabButton(blz.dpy, Button3, AnyModifier, c->framewin, True, ButtonPressMask, + GrabModeSync, GrabModeAsync, None, None); c->gc = XCreateGC(blz.dpy, c->framewin, 0, 0); XSync(blz.dpy, False); for(t=&client; *t; t=&(*t)->next); diff --git a/event.c b/event.c @@ -44,9 +44,12 @@ buttonrelease(XEvent *e) { static void buttonpress(XEvent *e) { Frame *f; - XButtonPressedEvent *ev = &e->xbutton; - + Bool inclient; + XButtonPressedEvent *ev; + + ev = &e->xbutton; if((f = frame_of_win(ev->window))) { + inclient = ispointinrect(ev->x, ev->y, &f->client->rect); ev->state &= valid_mask; if((ev->state & def.mod) == def.mod) { switch(ev->button) { @@ -66,17 +69,19 @@ buttonpress(XEvent *e) { break; } }else{ + if(inclient) + XAllowEvents(blz.dpy, ReplayPointer, ev->time); + else + XAllowEvents(blz.dpy, AsyncPointer, ev->time); if(ev->button == Button1) { if(frame_to_top(f) || f->client != sel_client()) focus(f->client, True); - if(ispointinrect(ev->x, ev->y, &f->titlebar.rect) - ||ispointinrect(ev->x, ev->y, &f->grabbox.rect)) + if(!inclient) do_mouse_resize(f->client, CENTER); } - XAllowEvents(blz.dpy, ReplayPointer, ev->time); } - } - XSync(blz.dpy, False); + }else + XAllowEvents(blz.dpy, AsyncPointer, ev->time); } static void