X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=dwm.c;h=8da3b6fb070a150b759df2771b0a61e3131b3611;hb=667da18b31e09c7c6d9359b66ff8e2ded7b20365;hp=f5f7c99ee6ab2903bc6088caa505f5a7b504607f;hpb=35efafe8ac901b7764b7950d3a7c8565e53c5381;p=dwm.git diff --git a/dwm.c b/dwm.c index f5f7c99..8da3b6f 100644 --- a/dwm.c +++ b/dwm.c @@ -44,8 +44,11 @@ /* macros */ #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) +#define LENGTH(x) (sizeof x / sizeof x[0]) +#define MAXTAGLEN 16 #define MOUSEMASK (BUTTONMASK | PointerMotionMask) + /* enums */ enum { BarTop, BarBot, BarOff }; /* bar position */ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ @@ -141,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); @@ -229,6 +233,8 @@ Regs *regs = NULL; /* configuration, allows nested code to access above variables */ #include "config.h" +Bool prevtags[LENGTH(tags)]; + /* function implementations */ void applyrules(Client *c) { @@ -834,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; @@ -921,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++) @@ -1044,7 +1052,7 @@ mappingnotify(XEvent *e) { XRefreshKeyboardMapping(ev); if(ev->request == MappingKeyboard) - keypress(NULL); + grabkeys(); } void @@ -1456,9 +1464,10 @@ setup(void) { XSelectInput(dpy, root, wa.event_mask); /* grab keys */ - keypress(NULL); + grabkeys(); /* init tags */ + memcpy(prevtags, seltags, sizeof seltags); compileregs(); /* init appearance */ @@ -1841,11 +1850,11 @@ view(const char *arg) { void viewprevtag(const char *arg) { - static Bool tmptags[sizeof tags / sizeof tags[0]]; + static Bool tmp[LENGTH(tags)]; - memcpy(tmptags, seltags, sizeof seltags); + memcpy(tmp, seltags, sizeof seltags); memcpy(seltags, prevtags, sizeof seltags); - memcpy(prevtags, tmptags, sizeof seltags); + memcpy(prevtags, tmp, sizeof seltags); arrange(); }