X-Git-Url: https://git.xinqibao.xyz/dmenu.git/blobdiff_plain/03c2b05bb2265e0ef7ba33b7f6df36bd6e0ce54d..f555908cef580106a50c53e096ec12bf4d2bb2e2:/main.c?ds=sidebyside diff --git a/main.c b/main.c index b733feb..fa03ec8 100644 --- a/main.c +++ b/main.c @@ -108,11 +108,17 @@ drawmenu(void) { XFlush(dpy); } -static void +static Bool grabkeyboard(void) { - while(XGrabKeyboard(dpy, root, True, GrabModeAsync, - GrabModeAsync, CurrentTime) != GrabSuccess) + unsigned int len; + + for(len = 1000; len; len--) { + if(XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime) + == GrabSuccess) + break; usleep(1000); + } + return len > 0; } static unsigned long @@ -203,7 +209,7 @@ match(char *pattern) { static void kpress(XKeyEvent * e) { char buf[32]; - int i, num, prev_nitem; + int i, num; unsigned int len; KeySym ksym; @@ -456,10 +462,10 @@ main(int argc, char *argv[]) { root = RootWindow(dpy, screen); if(isatty(STDIN_FILENO)) { maxname = readstdin(); - grabkeyboard(); + running = grabkeyboard(); } else { /* prevent keypress loss */ - grabkeyboard(); + running = grabkeyboard(); maxname = readstdin(); } /* init modifier map */ @@ -493,6 +499,8 @@ main(int argc, char *argv[]) { dc.drawable = XCreatePixmap(dpy, root, mw, mh, DefaultDepth(dpy, screen)); 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); if(maxname) cmdw = textw(maxname); if(cmdw > mw / 3)