wmii

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

commit ec658d058f2d3b9ad925d540a1efaa52881e7293
parent 939677d2f0a9ad558c55cc8440fa7732ffcc4a68
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Mon,  1 May 2006 21:15:24 +0200

hopefully this fixes the issue seen by Sander


Diffstat:
cmd/wm/client.c | 12++++++------
cmd/wm/event.c | 8++++----
cmd/wm/mouse.c | 22++++++++--------------
cmd/wm/view.c | 2+-
cmd/wm/wm.h | 6+++---
cmd/wm/wmiiwm.1 | 2+-
6 files changed, 23 insertions(+), 29 deletions(-)

diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -388,7 +388,7 @@ manage_client(Client *c) XSync(dpy, False); if(c->frame.data[c->sel]->area->view == view.data[sel]) focus_client(c, False); - flush_events(EnterWindowMask); + flush_masked_events(EnterWindowMask); } static int @@ -425,7 +425,7 @@ destroy_client(Client *c) XSync(dpy, False); XSetErrorHandler(wmii_error_handler); XUngrabServer(dpy); - flush_events(EnterWindowMask); + flush_masked_events(EnterWindowMask); } Client * @@ -534,7 +534,7 @@ select_client(Client *c, char *arg) return; } focus_client(a->frame.data[i]->client, True); - flush_events(EnterWindowMask); + flush_masked_events(EnterWindowMask); } void @@ -591,7 +591,7 @@ Swaparea: if(idx_of_area(a)) arrange_column(a, False); focus_client(c, True); - flush_events(EnterWindowMask); + flush_masked_events(EnterWindowMask); } void @@ -641,7 +641,7 @@ send_client_to(Client *c, char *arg) to = v->area.data[i]; } send_to_area(to, a, c); - flush_events(EnterWindowMask); + flush_masked_events(EnterWindowMask); } void @@ -657,7 +657,7 @@ resize_all_clients() resize_client(c, &c->frame.data[c->sel]->rect, False); } } - flush_events(EnterWindowMask); + flush_masked_events(EnterWindowMask); } /* convenience function */ diff --git a/cmd/wm/event.c b/cmd/wm/event.c @@ -57,7 +57,7 @@ check_x_event(IXPConn *c) } unsigned int -flush_events(long even_mask) +flush_masked_events(long even_mask) { XEvent ev; unsigned int n = 0; @@ -100,13 +100,13 @@ handle_buttonpress(XEvent *e) if((ev->button == Button1 || ev->button == Button3)) focus(c, True); if(ev->button == Button1) - do_mouse_move(c); + do_mouse_move(c, ev); else if (ev->button == Button3) { BlitzAlign align = blitz_align_of_rect(&c->rect, ev->x, ev->y); if(align != CENTER) - do_mouse_resize(c, align); + do_mouse_resize(c, ev, align); else - do_mouse_move(c); + do_mouse_move(c, ev); } } else if(ev->button == Button1) diff --git a/cmd/wm/mouse.c b/cmd/wm/mouse.c @@ -199,7 +199,7 @@ draw_pseudo_border(XRectangle * r) } void -do_mouse_move(Client *c) +do_mouse_move(Client *c, XButtonPressedEvent *e) { int px = 0, py = 0, wex, wey, ex, ey, first = 1, i; Window dummy; @@ -220,14 +220,11 @@ do_mouse_move(Client *c) pt.y = ey; XSync(dpy, False); - if(flush_events(ButtonReleaseMask)) + if(XGrabPointer(dpy, root, False, ButtonMotionMask | ButtonReleaseMask, + GrabModeAsync, GrabModeAsync, None, cursor[CurMove], + e->time) != GrabSuccess) return; - XGrabServer(dpy); - while(XGrabPointer(dpy, root, False, ButtonMotionMask | ButtonReleaseMask, - GrabModeAsync, GrabModeAsync, None, cursor[CurMove], - CurrentTime) != GrabSuccess) - usleep(1000); for(;;) { while(!XCheckMaskEvent(dpy, ButtonReleaseMask | ButtonMotionMask, &ev)) { @@ -445,7 +442,7 @@ snap_resize(XRectangle * r, XRectangle * o, BlitzAlign align, } void -do_mouse_resize(Client *c, BlitzAlign align) +do_mouse_resize(Client *c, XButtonPressedEvent *e, BlitzAlign align) { int px = 0, py = 0, i, ox, oy, first = 1; Window dummy; @@ -463,14 +460,11 @@ do_mouse_resize(Client *c, BlitzAlign align) XQueryPointer(dpy, c->framewin, &dummy, &dummy, &i, &i, &ox, &oy, &dmask); XSync(dpy, False); - if(flush_events(ButtonReleaseMask)) + if(XGrabPointer(dpy, c->framewin, False, ButtonMotionMask | ButtonReleaseMask, + GrabModeAsync, GrabModeAsync, None, cursor[CurResize], + e->time) != GrabSuccess) return; - XGrabServer(dpy); - while(XGrabPointer(dpy, c->framewin, False, ButtonMotionMask | ButtonReleaseMask, - GrabModeAsync, GrabModeAsync, None, cursor[CurResize], - CurrentTime) != GrabSuccess) - usleep(1000); for(;;) { while(!XCheckMaskEvent(dpy, ButtonReleaseMask | ButtonMotionMask, &ev)) { diff --git a/cmd/wm/view.c b/cmd/wm/view.c @@ -105,7 +105,7 @@ focus_view(View *v) update_view_bars(); XSync(dpy, False); XUngrabServer(dpy); - flush_events(EnterWindowMask); + flush_masked_events(EnterWindowMask); } XRectangle * diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -247,7 +247,7 @@ Area *new_right_column(View *v); /* event.c */ void init_x_event_handler(); void check_x_event(IXPConn *c); -unsigned int flush_events(long even_mask); +unsigned int flush_masked_events(long even_mask); /* frame.c */ Frame *create_frame(Area *a, Client *c); @@ -269,8 +269,8 @@ void init_lock_keys(); unsigned long mod_key_of_str(char *val); /* mouse.c */ -void do_mouse_resize(Client *c, BlitzAlign align); -void do_mouse_move(Client *c); +void do_mouse_resize(Client *c, XButtonPressedEvent *e, BlitzAlign align); +void do_mouse_move(Client *c, XButtonPressedEvent *e); void grab_mouse(Window w, unsigned long mod, unsigned int button); void ungrab_mouse(Window w, unsigned long mod, unsigned int button); diff --git a/cmd/wm/wmiiwm.1 b/cmd/wm/wmiiwm.1 @@ -457,7 +457,7 @@ then the last rule should be defined in the following form: .SS Processing events Running .B wmiiwm -in an useful way needs to control it through reading events +in a useful way needs to control it through reading events from the .I /event file described above.