all repos — dmenu @ 7afd296c40a2e8af9477add1c3d02a7c4b444747

my build of dmenu

resizing vlist, new dinput binding
Connor Lane Smith cls@lubutu.com
Wed, 30 Jun 2010 00:52:14 +0100
commit

7afd296c40a2e8af9477add1c3d02a7c4b444747

parent

cc8b3b999ba0153029b1e5a97ebbd59563f9e7bb

1 files changed, 16 insertions(+), 18 deletions(-)

jump to
M dmenu.cdmenu.c

@@ -109,6 +109,7 @@

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; }

@@ -166,6 +167,8 @@ dc.y = 0;

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;

@@ -177,12 +180,10 @@ /* print command */

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); }

@@ -193,7 +194,7 @@ Item *i;

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);

@@ -208,16 +209,17 @@

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

@@ -299,9 +301,6 @@ while(i-- > 0 && text[i] != ' ');

text[++i] = '\0'; match(text); break; - case XK_x: - dinput(); - break; } } switch(ksym) {

@@ -360,10 +359,9 @@ sel = curr = prev;

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;