tfaster grab - dmenu - Dmenu fork with xft fonts.
 (HTM) git clone git://r-36.net/dmenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit d0051e7bb858815866fbaf3a8fd5b50319c0c86d
 (DIR) parent fb67bd666ed22a28caff505f3319184735e05311
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Sun, 15 May 2011 14:13:31 +0100
       
       faster grab
       Diffstat:
         dmenu.c                             |      23 ++++++++++++-----------
       
       1 file changed, 12 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/dmenu.c b/dmenu.c
       t@@ -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;
        
       t@@ -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;
        
       t@@ -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);
                }
       t@@ -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);
       t@@ -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();
        }