dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit e9a07335060337222c94260797582aae2c74d455
parent 198502f41dc3c436b73215f5e2a6b58b050ecfce
Author: Anselm R. Garbe <garbeam@gmail.com>
Date:   Sat, 10 Nov 2007 19:16:11 +0100

Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
Diffstat:
Mconfig.def.h | 115+++++++++++++++++++++++++++++++++++++++----------------------------------------
Mdwm.c | 44++++++++++++++++++++++++--------------------
2 files changed, 81 insertions(+), 78 deletions(-)
diff --git a/config.def.h b/config.def.h
@@ -12,7 +12,7 @@
 #define SELFGCOLOR        "#ffffff"
 
 /* tagging */
-const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" };
+const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" };
 Bool seltags[LENGTH(tags)] = {[0] = True};
 Rule rules[] = {
     /* class:instance:title regex    tags regex    isfloating */
@@ -34,61 +34,60 @@ Layout layouts[] = {
 
 /* key definitions */
 #define MODKEY            Mod1Mask
-#define KEYS \
-Key keys[] = { \
-    /* modifier            key        function    argument */ \
-    { MODKEY,            XK_p,        spawn, \
-        "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'" \
-        " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" }, \
-    { MODKEY|ShiftMask,        XK_Return,    spawn, "exec uxterm" }, \
-    { MODKEY,            XK_space,    setlayout,    NULL }, \
-    { MODKEY,            XK_b,        togglebar,    NULL }, \
-    { MODKEY,            XK_j,        focusnext,    NULL }, \
-    { MODKEY,            XK_k,        focusprev,    NULL }, \
-    { MODKEY,            XK_h,        setmwfact,    "-0.05" }, \
-    { MODKEY,            XK_l,        setmwfact,    "+0.05" }, \
-    { MODKEY,            XK_m,        togglemax,    NULL }, \
-    { MODKEY,            XK_Return,    zoom,        NULL }, \
-    { MODKEY,            XK_Tab,        viewprevtag,    NULL }, \
-    { MODKEY|ShiftMask,        XK_space,    togglefloating,    NULL }, \
-    { MODKEY|ShiftMask,        XK_c,        killclient,    NULL }, \
-    { MODKEY,            XK_0,        view,        NULL }, \
-    { MODKEY,            XK_1,        view,        tags[0] }, \
-    { MODKEY,            XK_2,        view,        tags[1] }, \
-    { MODKEY,            XK_3,        view,        tags[2] }, \
-    { MODKEY,            XK_4,        view,        tags[3] }, \
-    { MODKEY,            XK_5,        view,        tags[4] }, \
-    { MODKEY,            XK_6,        view,        tags[5] }, \
-    { MODKEY,            XK_7,        view,        tags[6] }, \
-    { MODKEY,            XK_8,        view,        tags[7] }, \
-    { MODKEY,            XK_9,        view,        tags[8] }, \
-    { MODKEY|ControlMask,        XK_1,        toggleview,    tags[0] }, \
-    { MODKEY|ControlMask,        XK_2,        toggleview,    tags[1] }, \
-    { MODKEY|ControlMask,        XK_3,        toggleview,    tags[2] }, \
-    { MODKEY|ControlMask,        XK_4,        toggleview,    tags[3] }, \
-    { MODKEY|ControlMask,        XK_5,        toggleview,    tags[4] }, \
-    { MODKEY|ControlMask,        XK_6,        toggleview,    tags[5] }, \
-    { MODKEY|ControlMask,        XK_7,        toggleview,    tags[6] }, \
-    { MODKEY|ControlMask,        XK_8,        toggleview,    tags[7] }, \
-    { MODKEY|ControlMask,        XK_9,        toggleview,    tags[8] }, \
-    { MODKEY|ShiftMask,        XK_0,        tag,        NULL }, \
-    { MODKEY|ShiftMask,        XK_1,        tag,        tags[0] }, \
-    { MODKEY|ShiftMask,        XK_2,        tag,        tags[1] }, \
-    { MODKEY|ShiftMask,        XK_3,        tag,        tags[2] }, \
-    { MODKEY|ShiftMask,        XK_4,        tag,        tags[3] }, \
-    { MODKEY|ShiftMask,        XK_5,        tag,        tags[4] }, \
-    { MODKEY|ShiftMask,        XK_6,        tag,        tags[5] }, \
-    { MODKEY|ShiftMask,        XK_7,        tag,        tags[6] }, \
-    { MODKEY|ShiftMask,        XK_8,        tag,        tags[7] }, \
-    { MODKEY|ShiftMask,        XK_9,        tag,        tags[8] }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_1,        toggletag,    tags[0] }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_2,        toggletag,    tags[1] }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_3,        toggletag,    tags[2] }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_4,        toggletag,    tags[3] }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_5,        toggletag,    tags[4] }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_6,        toggletag,    tags[5] }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_7,        toggletag,    tags[6] }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_8,        toggletag,    tags[7] }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_9,        toggletag,    tags[8] }, \
-    { MODKEY|ShiftMask,        XK_q,        quit,        NULL }, \
+Key keys[] = {
+    /* modifier            key        function    argument */
+    { MODKEY,            XK_p,        spawn,
+        "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'"
+        " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" },
+    { MODKEY|ShiftMask,        XK_Return,    spawn, "exec uxterm" },
+    { MODKEY,            XK_space,    setlayout,    NULL },
+    { MODKEY,            XK_b,        togglebar,    NULL },
+    { MODKEY,            XK_j,        focusnext,    NULL },
+    { MODKEY,            XK_k,        focusprev,    NULL },
+    { MODKEY,            XK_h,        setmwfact,    "-0.05" },
+    { MODKEY,            XK_l,        setmwfact,    "+0.05" },
+    { MODKEY,            XK_m,        togglemax,    NULL },
+    { MODKEY,            XK_Return,    zoom,        NULL },
+    { MODKEY,            XK_Tab,        viewprevtag,    NULL },
+    { MODKEY|ShiftMask,        XK_space,    togglefloating,    NULL },
+    { MODKEY|ShiftMask,        XK_c,        killclient,    NULL },
+    { MODKEY,            XK_0,        view,        NULL },
+    { MODKEY,            XK_1,        view,        tags[0] },
+    { MODKEY,            XK_2,        view,        tags[1] },
+    { MODKEY,            XK_3,        view,        tags[2] },
+    { MODKEY,            XK_4,        view,        tags[3] },
+    { MODKEY,            XK_5,        view,        tags[4] },
+    { MODKEY,            XK_6,        view,        tags[5] },
+    { MODKEY,            XK_7,        view,        tags[6] },
+    { MODKEY,            XK_8,        view,        tags[7] },
+    { MODKEY,            XK_9,        view,        tags[8] },
+    { MODKEY|ControlMask,        XK_1,        toggleview,    tags[0] },
+    { MODKEY|ControlMask,        XK_2,        toggleview,    tags[1] },
+    { MODKEY|ControlMask,        XK_3,        toggleview,    tags[2] },
+    { MODKEY|ControlMask,        XK_4,        toggleview,    tags[3] },
+    { MODKEY|ControlMask,        XK_5,        toggleview,    tags[4] },
+    { MODKEY|ControlMask,        XK_6,        toggleview,    tags[5] },
+    { MODKEY|ControlMask,        XK_7,        toggleview,    tags[6] },
+    { MODKEY|ControlMask,        XK_8,        toggleview,    tags[7] },
+    { MODKEY|ControlMask,        XK_9,        toggleview,    tags[8] },
+    { MODKEY|ShiftMask,        XK_0,        tag,        NULL },
+    { MODKEY|ShiftMask,        XK_1,        tag,        tags[0] },
+    { MODKEY|ShiftMask,        XK_2,        tag,        tags[1] },
+    { MODKEY|ShiftMask,        XK_3,        tag,        tags[2] },
+    { MODKEY|ShiftMask,        XK_4,        tag,        tags[3] },
+    { MODKEY|ShiftMask,        XK_5,        tag,        tags[4] },
+    { MODKEY|ShiftMask,        XK_6,        tag,        tags[5] },
+    { MODKEY|ShiftMask,        XK_7,        tag,        tags[6] },
+    { MODKEY|ShiftMask,        XK_8,        tag,        tags[7] },
+    { MODKEY|ShiftMask,        XK_9,        tag,        tags[8] },
+    { MODKEY|ControlMask|ShiftMask,    XK_1,        toggletag,    tags[0] },
+    { MODKEY|ControlMask|ShiftMask,    XK_2,        toggletag,    tags[1] },
+    { MODKEY|ControlMask|ShiftMask,    XK_3,        toggletag,    tags[2] },
+    { MODKEY|ControlMask|ShiftMask,    XK_4,        toggletag,    tags[3] },
+    { MODKEY|ControlMask|ShiftMask,    XK_5,        toggletag,    tags[4] },
+    { MODKEY|ControlMask|ShiftMask,    XK_6,        toggletag,    tags[5] },
+    { MODKEY|ControlMask|ShiftMask,    XK_7,        toggletag,    tags[6] },
+    { MODKEY|ControlMask|ShiftMask,    XK_8,        toggletag,    tags[7] },
+    { MODKEY|ControlMask|ShiftMask,    XK_9,        toggletag,    tags[8] },
+    { MODKEY|ShiftMask,        XK_q,        quit,        NULL },
 };
diff --git a/dwm.c b/dwm.c
@@ -44,8 +44,9 @@
 /* macros */
 #define BUTTONMASK        (ButtonPressMask | ButtonReleaseMask)
 #define CLEANMASK(mask)        (mask & ~(numlockmask | LockMask))
-#define MOUSEMASK        (BUTTONMASK | PointerMotionMask)
 #define LENGTH(x)        (sizeof x / sizeof x[0])
+#define MAXTAGLEN        16
+#define MOUSEMASK        (BUTTONMASK | PointerMotionMask)
 
 
 /* enums */
@@ -143,6 +144,7 @@ unsigned long getcolor(const char *colstr);
 long getstate(Window w);
 Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
 void grabbuttons(Client *c, Bool focused);
+void grabkeys(void);
 unsigned int idxoftag(const char *tag);
 void initfont(const char *fontstr);
 Bool isoccupied(unsigned int t);
@@ -838,6 +840,25 @@ grabbuttons(Client *c, Bool focused) {
                 GrabModeAsync, GrabModeSync, None, None);
 }
 
+void
+grabkeys(void)  {
+    unsigned int i;
+    KeyCode code;
+
+    XUngrabKey(dpy, AnyKey, AnyModifier, root);
+    for(i = 0; i < LENGTH(keys); i++) {
+        code = XKeysymToKeycode(dpy, keys[i].keysym);
+        XGrabKey(dpy, code, keys[i].mod, root, True,
+                GrabModeAsync, GrabModeAsync);
+        XGrabKey(dpy, code, keys[i].mod | LockMask, root, True,
+                GrabModeAsync, GrabModeAsync);
+        XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True,
+                GrabModeAsync, GrabModeAsync);
+        XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True,
+                GrabModeAsync, GrabModeAsync);
+    }
+}
+
 unsigned int
 idxoftag(const char *tag) {
     unsigned int i;
@@ -925,27 +946,10 @@ isvisible(Client *c) {
 
 void
 keypress(XEvent *e) {
-    KEYS
     unsigned int i;
-    KeyCode code;
     KeySym keysym;
     XKeyEvent *ev;
 
-    if(!e) { /* grabkeys */
-        XUngrabKey(dpy, AnyKey, AnyModifier, root);
-        for(i = 0; i < LENGTH(keys); i++) {
-            code = XKeysymToKeycode(dpy, keys[i].keysym);
-            XGrabKey(dpy, code, keys[i].mod, root, True,
-                    GrabModeAsync, GrabModeAsync);
-            XGrabKey(dpy, code, keys[i].mod | LockMask, root, True,
-                    GrabModeAsync, GrabModeAsync);
-            XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True,
-                    GrabModeAsync, GrabModeAsync);
-            XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True,
-                    GrabModeAsync, GrabModeAsync);
-        }
-        return;
-    }
     ev = &e->xkey;
     keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
     for(i = 0; i < LENGTH(keys); i++)
@@ -1048,7 +1052,7 @@ mappingnotify(XEvent *e) {
 
     XRefreshKeyboardMapping(ev);
     if(ev->request == MappingKeyboard)
-        keypress(NULL);
+        grabkeys();
 }
 
 void
@@ -1460,7 +1464,7 @@ setup(void) {
     XSelectInput(dpy, root, wa.event_mask);
 
     /* grab keys */
-    keypress(NULL);
+    grabkeys();
 
     /* init tags */
     compileregs();