rearranged grab stuff

This commit is contained in:
Anselm R. Garbe 2006-02-03 20:00:00 +02:00
parent b025650e3e
commit 70b69693ca
4 changed files with 38 additions and 44 deletions

View File

@ -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);
}
@ -146,29 +145,6 @@ reparent_client(Client *c, Window w, int x, int y)
c->ignore_unmap++;
}
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)
{

View File

@ -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

View File

@ -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[])
{

View File

@ -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);