X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/4ad20ffc2c23d29329bc7349985d889f2cb45612..aa1bda81646e9d6188fd584009be0eee619f6966:/event.c diff --git a/event.c b/event.c index 5c21fcb..0f74478 100644 --- a/event.c +++ b/event.c @@ -18,7 +18,7 @@ typedef struct { KEYS -#define CLEANMASK(mask) (mask & ~(NUMLOCKMASK | LockMask)) +#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) static void movemouse(Client *c) @@ -109,16 +109,22 @@ buttonpress(XEvent *e) for(a.i = 0; a.i < ntags; a.i++) { x += textw(tags[a.i]); if(ev->x < x) { - if(ev->button == Button3) - toggleview(&a); - else + if(ev->button == Button1) view(&a); + else if(ev->button == Button3) + toggleview(&a); return; } } + if(ev->x < x + bmw) { + if(ev->button == Button1) + togglemode(NULL); + } } else if((c = getclient(ev->window))) { focus(c); + if(CLEANMASK(ev->state) != MODKEY) + return; switch(ev->button) { default: break; @@ -144,6 +150,7 @@ buttonpress(XEvent *e) static void configurerequest(XEvent *e) { + int ox, oy, ow, oh; unsigned long newmask; Client *c; XConfigureRequestEvent *ev = &e->xconfigurerequest; @@ -151,6 +158,10 @@ configurerequest(XEvent *e) XWindowChanges wc; if((c = getclient(ev->window))) { + ox = c->x; + oy = c->y; + ow = c->w; + oh = c->h; gravitate(c, True); if(ev->value_mask & CWX) c->x = ev->x; @@ -185,8 +196,13 @@ configurerequest(XEvent *e) XSendEvent(dpy, c->win, True, NoEventMask, &synev); } XSync(dpy, False); - if(c->isfloat) + if(c->isfloat || c->ismax) { resize(c, False, TopLeft); + c->x = ox; + c->y = oy; + c->w = ow; + c->h = oh; + } else arrange(NULL); } @@ -378,9 +394,22 @@ grabkeys() GrabModeAsync, GrabModeAsync); XGrabKey(dpy, code, key[i].mod | LockMask, root, True, GrabModeAsync, GrabModeAsync); - XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True, + XGrabKey(dpy, code, key[i].mod | numlockmask, root, True, GrabModeAsync, GrabModeAsync); - XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True, + XGrabKey(dpy, code, key[i].mod | numlockmask | LockMask, root, True, GrabModeAsync, GrabModeAsync); } } + +void +procevent() +{ + XEvent ev; + + while(XPending(dpy)) { + XNextEvent(dpy, &ev); + if(handler[ev.type]) + (handler[ev.type])(&ev); /* call handler */ + } +} +