mirror of
https://github.com/0intro/wmii
synced 2025-02-21 16:54:53 +03:00
rearranged grab stuff
This commit is contained in:
parent
b025650e3e
commit
70b69693ca
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
25
cmd/wm/wm.c
25
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[])
|
||||
{
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user