dmenu

my fork of dmenu
Index Commits Files Refs README LICENSE
commit d57c873f104cb8be34299efe70e02df4bf275d92
parent 724f72142f6dc880068a92e412f3f3366e643569
Author: Anselm R. Garbe <arg@suckless.org>
Date:   Fri,  2 Mar 2007 21:48:48 +0100

keyboard grab works on the dmenu window now (not on the root window) - thx for Kris for this hint
Diffstat:
Mmain.c | 41++++++++++++++++++++---------------------
1 file changed, 20 insertions(+), 21 deletions(-)
diff --git a/main.c b/main.c
@@ -110,7 +110,7 @@ drawmenu(void) {
 
 static void
 grabkeyboard(void) {
-    while(XGrabKeyboard(dpy, root, True, GrabModeAsync,
+    while(XGrabKeyboard(dpy, win, True, GrabModeAsync,
              GrabModeAsync, CurrentTime) != GrabSuccess)
         usleep(1000);
 }
@@ -454,24 +454,6 @@ main(int argc, char *argv[]) {
         eprint("dmenu: cannot open display\n");
     screen = DefaultScreen(dpy);
     root = RootWindow(dpy, screen);
-    if(isatty(STDIN_FILENO)) {
-        maxname = readstdin();
-        grabkeyboard();
-    }
-    else { /* prevent keypress loss */
-        grabkeyboard();
-        maxname = readstdin();
-    }
-    /* init 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);
     /* style */
     dc.norm[ColBG] = initcolor(normbg);
     dc.norm[ColFG] = initcolor(normfg);
@@ -495,6 +477,25 @@ main(int argc, char *argv[]) {
     XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
     if(!dc.font.set)
         XSetFont(dpy, dc.gc, dc.font.xfont->fid);
+    drawmenu();
+    XMapRaised(dpy, win);
+    if(isatty(STDIN_FILENO)) {
+        maxname = readstdin();
+        grabkeyboard();
+    }
+    else { /* prevent keypress loss */
+        grabkeyboard();
+        maxname = readstdin();
+    }
+    /* init 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);
     if(maxname)
         cmdw = textw(maxname);
     if(cmdw > mw / 3)
@@ -505,8 +506,6 @@ main(int argc, char *argv[]) {
         promptw = mw / 5;
     text[0] = 0;
     match(text);
-    XMapRaised(dpy, win);
-    drawmenu();
     XSync(dpy, False);
 
     /* main event loop */