JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
changed grabkeys, removed initmodmap
[dwm.git] / dwm.c
diff --git a/dwm.c b/dwm.c
index 9c0ebcf..2bf0ba0 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -751,25 +751,27 @@ grabbuttons(Client *c, Bool focused) {
 void
 grabkeys(void) {
        unsigned int i, j;
-       unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
-       KeyCode code;
        XModifierKeymap *modmap;
 
-       /* init modifier map */
+       /* update modifier map */
        modmap = XGetModifierMapping(dpy);
        for(i = 0; i < 8; i++)
-               for(j = 0; j < modmap->max_keypermod; j++) {
+               for(j = 0; j < modmap->max_keypermod; j++)
                        if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock))
                                numlockmask = (1 << i);
-               }
        XFreeModifiermap(modmap);
 
-       XUngrabKey(dpy, AnyKey, AnyModifier, root);
-       for(i = 0; i < LENGTH(keys); i++) {
-               code = XKeysymToKeycode(dpy, keys[i].keysym);
-               for(j = 0; j < LENGTH(modifiers); j++)
-                       XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, True,
-                                GrabModeAsync, GrabModeAsync);
+       { /* grab keys */
+               unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
+               KeyCode code;
+
+               XUngrabKey(dpy, AnyKey, AnyModifier, root);
+               for(i = 0; i < LENGTH(keys); i++) {
+                       code = XKeysymToKeycode(dpy, keys[i].keysym);
+                       for(j = 0; j < LENGTH(modifiers); j++)
+                               XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, True,
+                                        GrabModeAsync, GrabModeAsync);
+               }
        }
 }
 
@@ -1128,7 +1130,7 @@ resizemouse(const Arg *arg) {
                return;
        XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
        do {
-               XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask , &ev);
+               XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
                switch(ev.type) {
                case ConfigureRequest:
                case Expose:
@@ -1373,8 +1375,6 @@ setup(void) {
        XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
        XSelectInput(dpy, root, wa.event_mask);
 
-
-       /* grab keys */
        grabkeys();
 }
 
@@ -1469,8 +1469,12 @@ togglefloating(const Arg *arg) {
 
 void
 toggletag(const Arg *arg) {
-       unsigned int mask = sel->tags ^ (arg->ui & TAGMASK);
+       unsigned int mask;
 
+       if (!sel)
+               return;
+       
+       mask = sel->tags ^ (arg->ui & TAGMASK);
        if(sel && mask) {
                sel->tags = mask;
                arrange();