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:
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];