all repos — dmenu @ 73120414e2e4a3a8031b243fb0d893506d4a0dc1

my build of dmenu

reverting keyboard grab to root window - invoking several dmenu's now works again...
Anselm R. Garbe arg@suckless.org
Wed, 07 Mar 2007 10:54:21 +0100
commit

73120414e2e4a3a8031b243fb0d893506d4a0dc1

parent

9911455f5b7787c999a570faf33cf6ad0bec056c

1 files changed, 24 insertions(+), 22 deletions(-)

jump to
M main.cmain.c

@@ -110,7 +110,7 @@ }

static void grabkeyboard(void) { - while(XGrabKeyboard(dpy, win, True, GrabModeAsync, + while(XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime) != GrabSuccess) usleep(1000); }

@@ -454,6 +454,24 @@ if(!dpy)

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);

@@ -477,27 +495,6 @@ dc.gc = XCreateGC(dpy, root, 0, 0);

XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); if(!dc.font.set) XSetFont(dpy, dc.gc, dc.font.xfont->fid); - drawmenu(); - XMapRaised(dpy, win); - XMaskEvent(dpy, ExposureMask, &ev); - drawmenu(); - 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)

@@ -508,6 +505,7 @@ if(promptw > mw / 5)

promptw = mw / 5; text[0] = 0; match(text); + XMapRaised(dpy, win); drawmenu(); XSync(dpy, False);

@@ -518,6 +516,10 @@ default: /* ignore all crap */

break; case KeyPress: kpress(&ev.xkey); + break; + case Expose: + if(ev.xexpose.count == 0) + drawmenu(); break; }