From: Connor Lane Smith Date: Sun, 15 May 2011 13:13:31 +0000 (+0100) Subject: faster grab X-Git-Url: https://git.danieliu.xyz/?a=commitdiff_plain;h=d0051e7bb858815866fbaf3a8fd5b50319c0c86d;p=dmenu.git faster grab --- diff --git a/dmenu.c b/dmenu.c index cf5e4a6..d54b1b3 100644 --- a/dmenu.c +++ b/dmenu.c @@ -57,7 +57,7 @@ static DC *dc; static Item *items = NULL; static Item *matches, *matchend; static Item *prev, *curr, *next, *sel; -static Window root, win; +static Window win; static int (*fstrncmp)(const char *, const char *, size_t) = strncmp; @@ -104,14 +104,14 @@ main(int argc, char *argv[]) { initfont(dc, font); if(fast) { - setup(); + grabkeyboard(); readstdin(); } else { readstdin(); - setup(); + grabkeyboard(); } - match(); + setup(); run(); return EXIT_FAILURE; @@ -209,7 +209,8 @@ grabkeyboard(void) { int i; for(i = 0; i < 1000; i++) { - if(!XGrabKeyboard(dc->dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime)) + if(XGrabKeyboard(dc->dpy, DefaultRootWindow(dc->dpy), True, + GrabModeAsync, GrabModeAsync, CurrentTime) == GrabSuccess) return; usleep(1000); } @@ -487,22 +488,21 @@ run(void) { void setup(void) { - int x, y, screen; + int x, y, screen = DefaultScreen(dc->dpy); + Window root = RootWindow(dc->dpy, screen); XSetWindowAttributes wa; #ifdef XINERAMA int n; XineramaScreenInfo *info; #endif - screen = DefaultScreen(dc->dpy); - root = RootWindow(dc->dpy, screen); - utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False); - normcol[ColBG] = getcolor(dc, normbgcolor); normcol[ColFG] = getcolor(dc, normfgcolor); selcol[ColBG] = getcolor(dc, selbgcolor); selcol[ColFG] = getcolor(dc, selfgcolor); + utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False); + /* menu geometry */ bh = dc->font.height + 2; lines = MAX(lines, 0); @@ -539,9 +539,10 @@ setup(void) { DefaultVisual(dc->dpy, screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); - grabkeyboard(); resizedc(dc, mw, mh); inputw = MIN(inputw, mw/3); promptw = prompt ? textw(dc, prompt) : 0; XMapRaised(dc->dpy, win); + drawmenu(); + match(); }