diff options
| -rw-r--r-- | client.c | 12 | ||||
| -rw-r--r-- | config.arg.h | 1 | ||||
| -rw-r--r-- | config.default.h | 1 | ||||
| -rw-r--r-- | dwm.h | 2 | ||||
| -rw-r--r-- | event.c | 6 | ||||
| -rw-r--r-- | main.c | 26 | 
6 files changed, 29 insertions, 19 deletions
| @@ -228,27 +228,27 @@ manage(Window w, XWindowAttributes *wa)  			GrabModeAsync, GrabModeSync, None, None);  	XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None); -	XGrabButton(dpy, Button1, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK, +	XGrabButton(dpy, Button1, MODKEY | numlockmask, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None); -	XGrabButton(dpy, Button1, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK, +	XGrabButton(dpy, Button1, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None);  	XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None);  	XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None); -	XGrabButton(dpy, Button2, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK, +	XGrabButton(dpy, Button2, MODKEY | numlockmask, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None); -	XGrabButton(dpy, Button2, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK, +	XGrabButton(dpy, Button2, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None);  	XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None);  	XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None); -	XGrabButton(dpy, Button3, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK, +	XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None); -	XGrabButton(dpy, Button3, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK, +	XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,  			GrabModeAsync, GrabModeSync, None, None);  	settags(c); diff --git a/config.arg.h b/config.arg.h index a2257cf..2e49f81 100644 --- a/config.arg.h +++ b/config.arg.h @@ -13,7 +13,6 @@ const char *tags[] = { "work", "net", "fnord", NULL };  #define FGCOLOR			"#eeeeee"  #define BORDERCOLOR		"#3f484d"  #define MODKEY			Mod1Mask -#define NUMLOCKMASK		Mod2Mask  #define MASTERW			60 /* percent */  #define KEYS \ diff --git a/config.default.h b/config.default.h index a8a2c0e..44f0daf 100644 --- a/config.default.h +++ b/config.default.h @@ -13,7 +13,6 @@ const char *tags[] = { "0", "1", "2", "3", "4", NULL };  #define FGCOLOR			"#eeeeee"  #define BORDERCOLOR		"#9999CC"  #define MODKEY			Mod1Mask -#define NUMLOCKMASK		Mod2Mask  #define MASTERW			60 /* percent */  #define KEYS \ @@ -70,7 +70,7 @@ struct Client {  extern const char *tags[];  extern char stext[1024];  extern int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; -extern unsigned int ntags; +extern unsigned int ntags, numlockmask;  extern void (*handler[LASTEvent])(XEvent *);  extern void (*arrange)(Arg *);  extern Atom wmatom[WMLast], netatom[NetLast]; @@ -18,7 +18,7 @@ typedef struct {  KEYS -#define CLEANMASK(mask) (mask & ~(NUMLOCKMASK | LockMask)) +#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask))  static void  movemouse(Client *c) @@ -378,9 +378,9 @@ grabkeys()  				GrabModeAsync, GrabModeAsync);  		XGrabKey(dpy, code, key[i].mod | LockMask, root, True,  				GrabModeAsync, GrabModeAsync); -		XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True, +		XGrabKey(dpy, code, key[i].mod | numlockmask, root, True,  				GrabModeAsync, GrabModeAsync); -		XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True, +		XGrabKey(dpy, code, key[i].mod | numlockmask | LockMask, root, True,  				GrabModeAsync, GrabModeAsync);  	}  } @@ -11,6 +11,7 @@  #include <unistd.h>  #include <sys/select.h>  #include <X11/cursorfont.h> +#include <X11/keysym.h>  #include <X11/Xatom.h>  #include <X11/Xproto.h> @@ -85,7 +86,7 @@ xerrorstart(Display *dsply, XErrorEvent *ee)  char stext[1024];  Bool *seltag;  int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; -unsigned int ntags; +unsigned int ntags, numlockmask;  Atom wmatom[WMLast], netatom[NetLast];  Bool running = True;  Bool issel = True; @@ -162,12 +163,13 @@ xerror(Display *dpy, XErrorEvent *ee)  int  main(int argc, char *argv[])  { -	int i, xfd; +	int i, j, xfd;  	unsigned int mask;  	fd_set rd;  	Bool readin = True;  	Window w;  	XEvent ev; +	XModifierKeymap *modmap;  	XSetWindowAttributes wa;  	if(argc == 2 && !strncmp("-v", argv[1], 3)) { @@ -211,7 +213,16 @@ main(int argc, char *argv[])  	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);  	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); -	wa.event_mask = SubstructureRedirectMask | EnterWindowMask | LeaveWindowMask; +	modmap = XGetModifierMapping(dpy); +	for (i = 0; i < 8; i++) { +		for (j = 0; j < modmap->max_keypermod; j++) { +			if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) +				numlockmask = (1 << i); +		} +	} +	XFree(modmap); + +	wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask;  	wa.cursor = cursor[CurNormal];  	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); @@ -233,13 +244,12 @@ main(int argc, char *argv[])  	sh = DisplayHeight(dpy, screen);  	mw = (sw * MASTERW) / 100; -	wa.override_redirect = 1; -	wa.background_pixmap = ParentRelative; -	wa.event_mask = ButtonPressMask | ExposureMask; -  	bx = by = 0;  	bw = sw;  	dc.h = bh = dc.font.height + 4; +	wa.override_redirect = 1; +	wa.background_pixmap = ParentRelative; +	wa.event_mask = ButtonPressMask | ExposureMask;  	barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen),  			CopyFromParent, DefaultVisual(dpy, screen),  			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); @@ -258,6 +268,7 @@ main(int argc, char *argv[])  	/* main event loop, also reads status text from stdin */  	XSync(dpy, False); +	goto XLoop;  	while(running) {  		FD_ZERO(&rd);  		if(readin) @@ -278,6 +289,7 @@ main(int argc, char *argv[])  				drawstatus();  			}  			if(FD_ISSET(xfd, &rd)) { +XLoop:  				while(XPending(dpy)) {  					XNextEvent(dpy, &ev);  					if(handler[ev.type]) | 
