wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 6884033956792bc41a45372bb3193753a4b0ef66
parent 91525a7b52ba74c41b25442ce6837eac23d0848f
Author: Kris Maglione <jg@suckless.org>
Date:   Sat, 16 May 2009 10:43:03 -0400

Fix wimenu when numlock is on.

Diffstat:
cmd/menu/keys.c | 25+++++++++++++++++++++++++
1 file changed, 25 insertions(+), 0 deletions(-)

diff --git a/cmd/menu/keys.c b/cmd/menu/keys.c @@ -29,6 +29,28 @@ static struct KMask { {0,} }; +static void +init_numlock(void) { + static int masks[] = { + ShiftMask, LockMask, ControlMask, Mod1Mask, + Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask + }; + XModifierKeymap *modmap; + KeyCode kcode; + int i, max; + + modmap = XGetModifierMapping(display); + kcode = keycode("Num_Lock"); + if(kcode) + if(modmap && modmap->max_keypermod > 0) { + max = nelem(masks) * modmap->max_keypermod; + for(i = 0; i < max; i++) + if(modmap->modifiermap[i] == kcode) + numlock = masks[i / modmap->max_keypermod]; + } + XFreeModifiermap(modmap); +} + /* * To do: Find my red black tree implementation. */ @@ -43,6 +65,9 @@ parse_keys(char *spec) { long mask; int i, j, nlines, nwords, nkeys; + if(!numlock) + init_numlock(); + nlines = tokenize(lines, nelem(lines), spec, '\n'); for(i=0; i < nlines; i++) { line = lines[i];