tupdated to new libdraw - 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 29e8faed6cf4b296382439651cf04596d276f080
 (DIR) parent d9c24564d2f46312a9ed94539e0299a9859e87d9
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Fri,  2 Jul 2010 05:50:19 +0100
       
       updated to new libdraw
       Diffstat:
         dinput.c                            |      31 ++++++++++---------------------
         dmenu.c                             |      21 ++++++++++-----------
       
       2 files changed, 20 insertions(+), 32 deletions(-)
       ---
 (DIR) diff --git a/dinput.c b/dinput.c
       t@@ -21,9 +21,8 @@
        
        /* forward declarations */
        static void cleanup(void);
       -static void drawcursor(void);
        static void drawinput(void);
       -static Bool grabkeyboard(void);
       +static void grabkeyboard(void);
        static void kpress(XKeyEvent *e);
        static void run(void);
        static void setup(void);
       t@@ -35,7 +34,7 @@ static char *prompt = NULL;
        static char text[4096];
        static int promptw = 0;
        static int screen;
       -static unsigned int cursor = 0;
       +static size_t cursor = 0;
        static unsigned int numlockmask = 0;
        static unsigned int mw, mh;
        static unsigned long normcol[ColLast];
       t@@ -54,46 +53,36 @@ cleanup(void) {
        }
        
        void
       -drawcursor(void) {
       -        XRectangle r = { dc.x, dc.y + 2, 1, dc.font.height - 2 };
       -
       -        r.x += textnw(&dc, text, cursor) + dc.font.height / 2;
       -
       -        XSetForeground(dpy, dc.gc, normcol[ColFG]);
       -        XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
       -}
       -
       -void
        drawinput(void)
        {
                dc.x = 0;
                dc.y = 0;
                dc.w = mw;
                dc.h = mh;
       -        drawtext(&dc, NULL, normcol, False);
       +        drawtext(&dc, NULL, normcol);
                /* print prompt? */
                if(prompt) {
                        dc.w = promptw;
       -                drawtext(&dc, prompt, selcol, False);
       +                drawtext(&dc, prompt, selcol);
                        dc.x += dc.w;
                }
                dc.w = mw - dc.x;
       -        drawtext(&dc, *text ? text : NULL, normcol, False);
       -        drawcursor();
       -        XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
       +        drawtext(&dc, text, normcol);
       +        drawcursor(&dc, text, cursor, normcol);
       +        commitdraw(&dc, win);
        }
        
       -Bool
       +void
        grabkeyboard(void) {
                unsigned int len;
        
                for(len = 1000; len; len--) {
                        if(XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime)
                        == GrabSuccess)
       -                        break;
       +                        return;
                        usleep(1000);
                }
       -        return len > 0;
       +        exit(EXIT_FAILURE);
        }
        
        void
 (DIR) diff --git a/dmenu.c b/dmenu.c
       t@@ -162,25 +162,25 @@ drawmenu(void) {
                dc.y = 0;
                dc.w = mw;
                dc.h = mh;
       -        drawtext(&dc, NULL, normcol, False);
       +        drawtext(&dc, NULL, normcol);
                dc.h = dc.font.height + 2;
                dc.y = topbar ? 0 : mh - dc.h;
                /* print prompt? */
                if(prompt) {
                        dc.w = promptw;
       -                drawtext(&dc, prompt, selcol, False);
       +                drawtext(&dc, prompt, selcol);
                        dc.x += dc.w;
                }
                dc.w = mw - dc.x;
                /* print command */
                if(cmdw && item && lines == 0)
                        dc.w = cmdw;
       -        drawtext(&dc, *text ? text : NULL, normcol, False);
       +        drawtext(&dc, text, normcol);
                if(lines > 0)
                        drawmenuv();
                else if(curr)
                        drawmenuh();
       -        XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
       +        commitdraw(&dc, win);
        }
        
        void
       t@@ -189,16 +189,16 @@ drawmenuh(void) {
        
                dc.x += cmdw;
                dc.w = spaceitem;
       -        drawtext(&dc, curr->left ? "<" : NULL, normcol, False);
       +        drawtext(&dc, curr->left ? "<" : NULL, normcol);
                dc.x += dc.w;
                for(i = curr; i != next; i = i->right) {
                        dc.w = MIN(textw(&dc, i->text), mw / 3);
       -                drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False);
       +                drawtext(&dc, i->text, (sel == i) ? selcol : normcol);
                        dc.x += dc.w;
                }
                dc.w = spaceitem;
                dc.x = mw - dc.w;
       -        drawtext(&dc, next ? ">" : NULL, normcol, False);
       +        drawtext(&dc, next ? ">" : NULL, normcol);
        }
        
        void
       t@@ -209,7 +209,7 @@ drawmenuv(void) {
                dc.y = topbar ? dc.h : 0;
                dc.w = mw - dc.x;
                for(i = curr; i != next; i = i->right) {
       -                drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False);
       +                drawtext(&dc, i->text, (sel == i) ? selcol : normcol);
                        dc.y += dc.h;
                }
                if(!XGetWindowAttributes(dpy, win, &wa))
       t@@ -224,11 +224,10 @@ grabkeyboard(void) {
                for(len = 1000; len; len--) {
                        if(XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime)
                        == GrabSuccess)
       -                        break;
       +                        return;
                        usleep(1000);
                }
       -        if(!len)
       -                exit(EXIT_FAILURE);
       +        exit(EXIT_FAILURE);
        }
        
        void