removed NUMLOCKMASK, added dynamically calculated numlockmask instead
ee31e38d
6 file(s) · +29 −19
| 228 | 228 | GrabModeAsync, GrabModeSync, None, None); |
|
| 229 | 229 | XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK, |
|
| 230 | 230 | GrabModeAsync, GrabModeSync, None, None); |
|
| 231 | - | XGrabButton(dpy, Button1, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK, |
|
| 231 | + | XGrabButton(dpy, Button1, MODKEY | numlockmask, c->win, False, BUTTONMASK, |
|
| 232 | 232 | GrabModeAsync, GrabModeSync, None, None); |
|
| 233 | - | XGrabButton(dpy, Button1, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK, |
|
| 233 | + | XGrabButton(dpy, Button1, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, |
|
| 234 | 234 | GrabModeAsync, GrabModeSync, None, None); |
|
| 235 | 235 | ||
| 236 | 236 | XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK, |
|
| 237 | 237 | GrabModeAsync, GrabModeSync, None, None); |
|
| 238 | 238 | XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BUTTONMASK, |
|
| 239 | 239 | GrabModeAsync, GrabModeSync, None, None); |
|
| 240 | - | XGrabButton(dpy, Button2, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK, |
|
| 240 | + | XGrabButton(dpy, Button2, MODKEY | numlockmask, c->win, False, BUTTONMASK, |
|
| 241 | 241 | GrabModeAsync, GrabModeSync, None, None); |
|
| 242 | - | XGrabButton(dpy, Button2, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK, |
|
| 242 | + | XGrabButton(dpy, Button2, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, |
|
| 243 | 243 | GrabModeAsync, GrabModeSync, None, None); |
|
| 244 | 244 | ||
| 245 | 245 | XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK, |
|
| 246 | 246 | GrabModeAsync, GrabModeSync, None, None); |
|
| 247 | 247 | XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK, |
|
| 248 | 248 | GrabModeAsync, GrabModeSync, None, None); |
|
| 249 | - | XGrabButton(dpy, Button3, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK, |
|
| 249 | + | XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK, |
|
| 250 | 250 | GrabModeAsync, GrabModeSync, None, None); |
|
| 251 | - | XGrabButton(dpy, Button3, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK, |
|
| 251 | + | XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, |
|
| 252 | 252 | GrabModeAsync, GrabModeSync, None, None); |
|
| 253 | 253 | ||
| 254 | 254 | settags(c); |
| 13 | 13 | #define FGCOLOR "#eeeeee" |
|
| 14 | 14 | #define BORDERCOLOR "#3f484d" |
|
| 15 | 15 | #define MODKEY Mod1Mask |
|
| 16 | - | #define NUMLOCKMASK Mod2Mask |
|
| 17 | 16 | #define MASTERW 60 /* percent */ |
|
| 18 | 17 | ||
| 19 | 18 | #define KEYS \ |
| 13 | 13 | #define FGCOLOR "#eeeeee" |
|
| 14 | 14 | #define BORDERCOLOR "#9999CC" |
|
| 15 | 15 | #define MODKEY Mod1Mask |
|
| 16 | - | #define NUMLOCKMASK Mod2Mask |
|
| 17 | 16 | #define MASTERW 60 /* percent */ |
|
| 18 | 17 | ||
| 19 | 18 | #define KEYS \ |
| 70 | 70 | extern const char *tags[]; |
|
| 71 | 71 | extern char stext[1024]; |
|
| 72 | 72 | extern int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; |
|
| 73 | - | extern unsigned int ntags; |
|
| 73 | + | extern unsigned int ntags, numlockmask; |
|
| 74 | 74 | extern void (*handler[LASTEvent])(XEvent *); |
|
| 75 | 75 | extern void (*arrange)(Arg *); |
|
| 76 | 76 | extern Atom wmatom[WMLast], netatom[NetLast]; |
| 18 | 18 | ||
| 19 | 19 | KEYS |
|
| 20 | 20 | ||
| 21 | - | #define CLEANMASK(mask) (mask & ~(NUMLOCKMASK | LockMask)) |
|
| 21 | + | #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) |
|
| 22 | 22 | ||
| 23 | 23 | static void |
|
| 24 | 24 | movemouse(Client *c) |
|
| 378 | 378 | GrabModeAsync, GrabModeAsync); |
|
| 379 | 379 | XGrabKey(dpy, code, key[i].mod | LockMask, root, True, |
|
| 380 | 380 | GrabModeAsync, GrabModeAsync); |
|
| 381 | - | XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True, |
|
| 381 | + | XGrabKey(dpy, code, key[i].mod | numlockmask, root, True, |
|
| 382 | 382 | GrabModeAsync, GrabModeAsync); |
|
| 383 | - | XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True, |
|
| 383 | + | XGrabKey(dpy, code, key[i].mod | numlockmask | LockMask, root, True, |
|
| 384 | 384 | GrabModeAsync, GrabModeAsync); |
|
| 385 | 385 | } |
|
| 386 | 386 | } |
|
| 11 | 11 | #include <unistd.h> |
|
| 12 | 12 | #include <sys/select.h> |
|
| 13 | 13 | #include <X11/cursorfont.h> |
|
| 14 | + | #include <X11/keysym.h> |
|
| 14 | 15 | #include <X11/Xatom.h> |
|
| 15 | 16 | #include <X11/Xproto.h> |
|
| 16 | 17 | ||
| 85 | 86 | char stext[1024]; |
|
| 86 | 87 | Bool *seltag; |
|
| 87 | 88 | int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; |
|
| 88 | - | unsigned int ntags; |
|
| 89 | + | unsigned int ntags, numlockmask; |
|
| 89 | 90 | Atom wmatom[WMLast], netatom[NetLast]; |
|
| 90 | 91 | Bool running = True; |
|
| 91 | 92 | Bool issel = True; |
|
| 162 | 163 | int |
|
| 163 | 164 | main(int argc, char *argv[]) |
|
| 164 | 165 | { |
|
| 165 | - | int i, xfd; |
|
| 166 | + | int i, j, xfd; |
|
| 166 | 167 | unsigned int mask; |
|
| 167 | 168 | fd_set rd; |
|
| 168 | 169 | Bool readin = True; |
|
| 169 | 170 | Window w; |
|
| 170 | 171 | XEvent ev; |
|
| 172 | + | XModifierKeymap *modmap; |
|
| 171 | 173 | XSetWindowAttributes wa; |
|
| 172 | 174 | ||
| 173 | 175 | if(argc == 2 && !strncmp("-v", argv[1], 3)) { |
|
| 211 | 213 | cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); |
|
| 212 | 214 | cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); |
|
| 213 | 215 | ||
| 214 | - | wa.event_mask = SubstructureRedirectMask | EnterWindowMask | LeaveWindowMask; |
|
| 216 | + | modmap = XGetModifierMapping(dpy); |
|
| 217 | + | for (i = 0; i < 8; i++) { |
|
| 218 | + | for (j = 0; j < modmap->max_keypermod; j++) { |
|
| 219 | + | if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) |
|
| 220 | + | numlockmask = (1 << i); |
|
| 221 | + | } |
|
| 222 | + | } |
|
| 223 | + | XFree(modmap); |
|
| 224 | + | ||
| 225 | + | wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask; |
|
| 215 | 226 | wa.cursor = cursor[CurNormal]; |
|
| 216 | 227 | XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); |
|
| 217 | 228 | ||
| 233 | 244 | sh = DisplayHeight(dpy, screen); |
|
| 234 | 245 | mw = (sw * MASTERW) / 100; |
|
| 235 | 246 | ||
| 247 | + | bx = by = 0; |
|
| 248 | + | bw = sw; |
|
| 249 | + | dc.h = bh = dc.font.height + 4; |
|
| 236 | 250 | wa.override_redirect = 1; |
|
| 237 | 251 | wa.background_pixmap = ParentRelative; |
|
| 238 | 252 | wa.event_mask = ButtonPressMask | ExposureMask; |
|
| 239 | - | ||
| 240 | - | bx = by = 0; |
|
| 241 | - | bw = sw; |
|
| 242 | - | dc.h = bh = dc.font.height + 4; |
|
| 243 | 253 | barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen), |
|
| 244 | 254 | CopyFromParent, DefaultVisual(dpy, screen), |
|
| 245 | 255 | CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); |
|
| 258 | 268 | ||
| 259 | 269 | /* main event loop, also reads status text from stdin */ |
|
| 260 | 270 | XSync(dpy, False); |
|
| 271 | + | goto XLoop; |
|
| 261 | 272 | while(running) { |
|
| 262 | 273 | FD_ZERO(&rd); |
|
| 263 | 274 | if(readin) |
|
| 278 | 289 | drawstatus(); |
|
| 279 | 290 | } |
|
| 280 | 291 | if(FD_ISSET(xfd, &rd)) { |
|
| 292 | + | XLoop: |
|
| 281 | 293 | while(XPending(dpy)) { |
|
| 282 | 294 | XNextEvent(dpy, &ev); |
|
| 283 | 295 | if(handler[ev.type]) |
|