all repos — dmenu @ 37236f8840624d5e9d590e7be9ba365bc61913a6

my build of dmenu

applied Connor's patch, thanks!
Anselm R Garbe anselm@garbe.us
Sun, 07 Mar 2010 08:32:16 +0000
commit

37236f8840624d5e9d590e7be9ba365bc61913a6

parent

7082ba1e1050664309de707bbc5b7194a53ed5ac

1 files changed, 33 insertions(+), 44 deletions(-)

jump to
M dmenu.cdmenu.c

@@ -52,6 +52,7 @@ static void calcoffsetsh(void);

static void calcoffsetsv(void); static char *cistrstr(const char *s, const char *sub); static void cleanup(void); +static void drawmenu(void); static void drawmenuh(void); static void drawmenuv(void); static void drawtext(const char *text, unsigned long col[ColLast]);

@@ -95,7 +96,6 @@ static char *(*fstrstr)(const char *, const char *) = strstr;

static Bool vlist = False; static unsigned int lines = 5; static void (*calcoffsets)(void) = calcoffsetsh; -static void (*drawmenu)(void) = drawmenuh; void appenditem(Item *i, Item **list, Item **last) {

@@ -200,7 +200,7 @@ }

void drawcursor(void) { - XRectangle r = { dc.x, dc.y + 2, 1, dc.h - 4 }; + XRectangle r = { dc.x, dc.y + 2, 1, dc.font.height - 2 }; r.x += textnw(text, cursor) + dc.font.height / 2;

@@ -209,9 +209,7 @@ XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);

} void -drawmenuh(void) { - Item *i; - +drawmenu(void) { dc.x = 0; dc.y = 0; dc.w = mw;

@@ -231,56 +229,48 @@ drawtext(text[0] ? text : NULL, dc.norm);

drawcursor(); dc.x += cmdw; if(curr) { - dc.w = spaceitem; - drawtext((curr && curr->left) ? "<" : NULL, dc.norm); - dc.x += dc.w; - /* determine maximum items */ - for(i = curr; i != next; i=i->right) { - dc.w = textw(i->text); - if(dc.w > mw / 3) - dc.w = mw / 3; - drawtext(i->text, (sel == i) ? dc.sel : dc.norm); - dc.x += dc.w; - } - dc.x = mw - spaceitem; - dc.w = spaceitem; - drawtext(next ? ">" : NULL, dc.norm); + if(vlist) + drawmenuv(); + else + drawmenuh(); } XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0); XFlush(dpy); } void +drawmenuh(void) { + Item *i; + + dc.w = spaceitem; + drawtext((curr && curr->left) ? "<" : NULL, dc.norm); + dc.x += dc.w; + /* determine maximum items */ + for(i = curr; i != next; i=i->right) { + dc.w = textw(i->text); + if(dc.w > mw / 3) + dc.w = mw / 3; + drawtext(i->text, (sel == i) ? dc.sel : dc.norm); + dc.x += dc.w; + } + dc.x = mw - spaceitem; + dc.w = spaceitem; + drawtext(next ? ">" : NULL, dc.norm); +} + +void drawmenuv(void) { Item *i; dc.x = 0; - dc.y = 0; dc.w = mw; - dc.h = mh; - drawtext(NULL, dc.norm); - /* print prompt? */ - if(promptw) { - dc.w = promptw; - drawtext(prompt, dc.sel); - } - dc.x += promptw; - dc.w = mw - promptw; - /* print command */ - drawtext(text[0] ? text : NULL, dc.norm); - if(curr) { - dc.x = 0; - dc.w = mw; + dc.y += dc.font.height + 2; + /* determine maximum items */ + for(i = curr; i != next; i=i->right) { + drawtext(i->text, (sel == i) ? dc.sel : dc.norm); dc.y += dc.font.height + 2; - /* determine maximum items */ - for(i = curr; i != next; i=i->right) { - drawtext(i->text, (sel == i) ? dc.sel : dc.norm); - dc.y += dc.font.height + 2; - } - drawtext(NULL, dc.norm); } - XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0); - XFlush(dpy); + drawtext(NULL, dc.norm); } void

@@ -786,8 +776,7 @@ topbar = False;

else if(!strcmp(argv[i], "-l")) { vlist = True; calcoffsets = calcoffsetsv; - drawmenu = drawmenuv; - if(++i < argc) lines += atoi(argv[i]); + if(++i < argc) lines = atoi(argv[i]); } else if(!strcmp(argv[i], "-fn")) { if(++i < argc) font = argv[i];