On Mon, Aug 01, 2011 at 03:52:37PM +0400, anonymous wrote:
> On Mon, Aug 01, 2011 at 03:34:46PM +0400, anonymous wrote:
> Patch is attached.
Forgot to attach.
To make it work, you should reorder TAGKEYS, so masks with more modifiers are
matched first.
#define TAGKEYS(KEY,TAG) \
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
{ MODKEY,
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