tresizing vlist, new dinput binding - 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 7afd296c40a2e8af9477add1c3d02a7c4b444747
 (DIR) parent cc8b3b999ba0153029b1e5a97ebbd59563f9e7bb
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Wed, 30 Jun 2010 00:52:14 +0100
       
       resizing vlist, new dinput binding
       Diffstat:
         dmenu.c                             |      34 +++++++++++++++----------------
       
       1 file changed, 16 insertions(+), 18 deletions(-)
       ---
 (DIR) diff --git a/dmenu.c b/dmenu.c
       t@@ -109,6 +109,7 @@ calcoffsetsv(void) {
                next = prev = curr;
                for(i = 0; i < lines && next; i++)
                        next = next->right;
       +        mh = (dc.font.height + 2) * (i + 1);
                for(i = 0; i < lines && prev && prev->left; i++)
                        prev = prev->left;
        }
       t@@ -166,6 +167,8 @@ drawmenu(void) {
                dc.w = mw;
                dc.h = mh;
                drawtext(&dc, NULL, normcol, False);
       +        dc.h = dc.font.height + 2;
       +        dc.y = topbar ? 0 : mh - dc.h;
                /* print prompt? */
                if(prompt) {
                        dc.w = promptw;
       t@@ -177,12 +180,10 @@ drawmenu(void) {
                if(cmdw && item && lines == 0)
                        dc.w = cmdw;
                drawtext(&dc, *text ? text : NULL, normcol, False);
       -        if(curr) {
       -                if(lines > 0)
       -                        drawmenuv();
       -                else
       -                        drawmenuh();
       -        }
       +        if(lines > 0)
       +                drawmenuv();
       +        else
       +                drawmenuh();
                XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
                XFlush(dpy);
        }
       t@@ -193,7 +194,7 @@ drawmenuh(void) {
        
                dc.x += cmdw;
                dc.w = spaceitem;
       -        drawtext(&dc, curr->left ? "<" : NULL, normcol, False);
       +        drawtext(&dc, curr && curr->left ? "<" : NULL, normcol, False);
                dc.x += dc.w;
                for(i = curr; i != next; i = i->right) {
                        dc.w = MIN(textw(&dc, i->text), mw / 3);
       t@@ -208,16 +209,17 @@ drawmenuh(void) {
        void
        drawmenuv(void) {
                Item *i;
       +        XWindowAttributes wa;
        
       +        dc.y = topbar ? dc.h : 0;
                dc.w = mw - dc.x;
       -        dc.h = dc.font.height + 2;
       -        dc.y = dc.h;
                for(i = curr; i != next; i = i->right) {
                        drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False);
                        dc.y += dc.h;
                }
       -        dc.h = mh - dc.y;
       -        drawtext(&dc, NULL, normcol, False);
       +        if(!XGetWindowAttributes(dpy, win, &wa))
       +                eprint("cannot get window attributes");
       +        XMoveResizeWindow(dpy, win, wa.x, wa.y + (topbar ? 0 : wa.height - mh), mw, mh);
        }
        
        Bool
       t@@ -299,9 +301,6 @@ kpress(XKeyEvent *e) {
                                text[++i] = '\0';
                                match(text);
                                break;
       -                case XK_x:
       -                        dinput();
       -                        break;
                        }
                }
                switch(ksym) {
       t@@ -360,10 +359,9 @@ kpress(XKeyEvent *e) {
                        calcoffsets();
                        break;
                case XK_Return:
       -                if((e->state & ShiftMask) || !sel)
       -                        fprintf(stdout, "%s", text);
       -                else
       -                        fprintf(stdout, "%s", sel->text);
       +                if(e->state & ShiftMask)
       +                        dinput();
       +                fprintf(stdout, "%s", sel ? sel->text : text);
                        fflush(stdout);
                        running = False;
                        return;