diff -r b46ae56abe65 dwm.c --- a/dwm.c Wed Jul 27 19:59:10 2011 +0200 +++ b/dwm.c Mon Aug 01 14:48:35 2011 +0300 @@ -42,7 +42,6 @@ /* macros */ #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) -#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) #define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH)) #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) #define LENGTH(X) (sizeof X / sizeof X[0]) @@ -292,7 +291,6 @@ XClassHint ch = { 0 }; /* rule matching */ - c->isfloating = c->tags = 0; if(XGetClassHint(dpy, c->win, &ch)) { class = ch.res_class ? ch.res_class : broken; instance = ch.res_name ? ch.res_name : broken; @@ -453,8 +451,10 @@ } for(i = 0; i < LENGTH(buttons); i++) if(click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button - && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) + && (buttons[i].mask & ev->state) == buttons[i].mask) { buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); + break; + } } void @@ -1078,9 +1078,11 @@ keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); for(i = 0; i < LENGTH(keys); i++) if(keysym == keys[i].keysym - && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) - && keys[i].func) + && (keys[i].mod & ev->state) == keys[i].mod + && keys[i].func) { keys[i].func(&(keys[i].arg)); + break; + } } void