wmii

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

commit 70b69693ca04cb58a7483dadada9070e4ca4a748
parent b025650e3e32ca42f2883545ea4190202b0f9def
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Fri,  3 Feb 2006 20:00:00 +0200

rearranged grab stuff


Diffstat:
cmd/wm/client.c | 34+++++-----------------------------
cmd/wm/event.c | 17+++++++----------
cmd/wm/wm.c | 25++++++++++++++++++++++++-
cmd/wm/wm.h | 6++----
4 files changed, 38 insertions(+), 44 deletions(-)

diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -109,13 +109,12 @@ focus_client(Client *c) } if(old && (old != c)) { - ungrab_client(old, AnyModifier, AnyButton); - grab_client(old, AnyModifier, AnyButton); + grab_window(old->win, AnyModifier, AnyButton); draw_client(old); } - ungrab_client(c, AnyModifier, AnyButton); - grab_client(c, Mod1Mask, Button1); - grab_client(c, Mod1Mask, Button3); + ungrab_window(c->win, AnyModifier, AnyButton); + grab_window(c->win, Mod1Mask, Button1); + grab_window(c->win, Mod1Mask, Button3); XRaiseWindow(dpy, c->frame.win); XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); XDefineCursor(dpy, c->win, normal_cursor); @@ -134,7 +133,7 @@ map_client(Client * c) void unmap_client(Client * c) { - ungrab_client(c, AnyModifier, AnyButton); + ungrab_window(c->win, AnyModifier, AnyButton); XUnmapWindow(dpy, c->win); set_client_state(c, WithdrawnState); } @@ -147,29 +146,6 @@ reparent_client(Client *c, Window w, int x, int y) } void -grab_client(Client * c, unsigned long mod, unsigned int button) -{ - XGrabButton(dpy, button, mod, c->win, False, - ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None); - if((mod != AnyModifier) && num_lock_mask) { - XGrabButton(dpy, button, mod | num_lock_mask, c->win, False, - ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None); - XGrabButton(dpy, button, mod | num_lock_mask | LockMask, c->win, - False, ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None); - } -} - -void -ungrab_client(Client * c, unsigned long mod, unsigned int button) -{ - XUngrabButton(dpy, button, mod, c->win); - if(mod != AnyModifier && num_lock_mask) { - XUngrabButton(dpy, button, mod | num_lock_mask, c->win); - XUngrabButton(dpy, button, mod | num_lock_mask | LockMask, c->win); - } -} - -void configure_client(Client * c) { XConfigureEvent e; diff --git a/cmd/wm/event.c b/cmd/wm/event.c @@ -60,25 +60,20 @@ handle_buttonpress(XEvent * e) XButtonPressedEvent *ev = &e->xbutton; Align align; static char buf[32]; - - if((c = win_to_frame(ev->window))) { + if((c = win_to_frame(ev->window))) { focus_client(c); if(ev->button == Button1) { align = cursor_to_align(c->frame.cursor); if(align == CENTER) mouse_move(c); - else + else mouse_resize(c, align); - return; } - snprintf(buf, sizeof(buf), "Button%dPress\n", ev->button); - do_pend_fcall(buf); } else if((c = win_to_client(ev->window))) { focus_client(c); ev->state &= valid_mask; if(ev->state & Mod1Mask) { - Align align; XRaiseWindow(dpy, c->frame.win); switch (ev->button) { case Button1: @@ -91,11 +86,13 @@ handle_buttonpress(XEvent * e) else mouse_resize(c, align); break; - default: - break; } } - } + } + if(c) { + snprintf(buf, sizeof(buf), "Button%dPress\n", ev->button); + do_pend_fcall(buf); + } } static void diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -278,7 +278,7 @@ map_detached_client() XMoveResizeWindow(dpy, det[i]->win, cr.x, cr.y, cr.width, cr.height); configure_client(det[i]); map_client(det[i]); - grab_client(det[i], AnyModifier, Button1); + grab_window(det[i]->win, AnyModifier, Button1); XRaiseWindow(dpy, det[i]->win); XSync(dpy, False); } @@ -615,6 +615,29 @@ cleanup() XSync(dpy, False); } +void +grab_window(Window w, unsigned long mod, unsigned int button) +{ + XGrabButton(dpy, button, mod, w, False, + ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None); + if((mod != AnyModifier) && num_lock_mask) { + XGrabButton(dpy, button, mod | num_lock_mask, w, False, + ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None); + XGrabButton(dpy, button, mod | num_lock_mask | LockMask, w, + False, ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None); + } +} + +void +ungrab_window(Window w, unsigned long mod, unsigned int button) +{ + XUngrabButton(dpy, button, mod, w); + if(mod != AnyModifier && num_lock_mask) { + XUngrabButton(dpy, button, mod | num_lock_mask, w); + XUngrabButton(dpy, button, mod | num_lock_mask | LockMask, w); + } +} + int main(int argc, char *argv[]) { diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -173,8 +173,6 @@ void handle_client_property(Client * c, XPropertyEvent * e); void close_client(Client * c); void draw_client(Client * client); void gravitate(Client * c, unsigned int tabh, unsigned int bw, int invert); -void grab_client(Client * c, unsigned long mod, unsigned int button); -void ungrab_client(Client * c, unsigned long mod, unsigned int button); void unmap_client(Client * c); void map_client(Client * c); void reparent_client(Client * c, Window w, int x, int y); @@ -228,5 +226,5 @@ Client *win_to_client(Window w); int win_proto(Window w); int win_state(Window w); /*void handle_after_write(IXPServer * s, File * f);*/ -void detach(Client * f, int client_destroyed); -void set_client_state(Client * c, int state); +void grab_window(Window w, unsigned long mod, unsigned int button); +void ungrab_window(Window w, unsigned long mod, unsigned int button);