diff options
| author | Anselm R Garbe <garbeam@gmail.com> | 2008-08-23 09:31:28 +0100 | 
|---|---|---|
| committer | Anselm R Garbe <garbeam@gmail.com> | 2008-08-23 09:31:28 +0100 | 
| commit | 85da53785614bcaa626cd1346ce8753291b01760 (patch) | |
| tree | 765698a71a0bf30309937d72106fdbce7b59e6e1 | |
| parent | 2b4157eccd649682c200de837193dd0a24129dc7 (diff) | |
| download | dwm-85da53785614bcaa626cd1346ce8753291b01760.tar.gz | |
changed grabkeys, removed initmodmap
| -rw-r--r-- | dwm.c | 47 | 
1 files changed, 21 insertions, 26 deletions
| @@ -158,7 +158,6 @@ static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);  static void grabbuttons(Client *c, Bool focused);  static void grabkeys(void);  static void initfont(const char *fontstr); -static void initmodmap(void);  static Bool isprotodel(Client *c);  static void keypress(XEvent *e);  static void killclient(const Arg *arg); @@ -752,15 +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; -	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); +	/* update modifier map */ +	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); +	XFreeModifiermap(modmap); + +	{ /* 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); +		}  	}  } @@ -804,19 +815,6 @@ initfont(const char *fontstr) {  	dc.font.height = dc.font.ascent + dc.font.descent;  } -void -initmodmap(void) { -	unsigned int i, j; -	XModifierKeymap *modmap; - -	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); -	XFreeModifiermap(modmap); -} -  Bool  isprotodel(Client *c) {  	int i, n; @@ -929,10 +927,8 @@ mappingnotify(XEvent *e) {  	XMappingEvent *ev = &e->xmapping;  	XRefreshKeyboardMapping(ev); -	if(ev->request == MappingKeyboard) { -		initmodmap(); +	if(ev->request == MappingKeyboard)  		grabkeys(); -	}  }  void @@ -1379,7 +1375,6 @@ setup(void) {  	XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);  	XSelectInput(dpy, root, wa.event_mask); -	initmodmap();  	grabkeys();  } | 
