dmenu

my fork of dmenu
Index Commits Files Refs README LICENSE
commit 37236f8840624d5e9d590e7be9ba365bc61913a6
parent 7082ba1e1050664309de707bbc5b7194a53ed5ac
Author: Anselm R Garbe <anselm@garbe.us>
Date:   Sun,  7 Mar 2010 08:32:16 +0000

applied Connor's patch, thanks!
Diffstat:
Mdmenu.c | 77+++++++++++++++++++++++++++++++++--------------------------------------------
1 file changed, 33 insertions(+), 44 deletions(-)
diff --git a/dmenu.c b/dmenu.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 @@ cleanup(void) {
 
 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 @@ drawcursor(void) {
 }
 
 void
-drawmenuh(void) {
-    Item *i;
-
+drawmenu(void) {
     dc.x = 0;
     dc.y = 0;
     dc.w = mw;
@@ -231,56 +229,48 @@ drawmenuh(void) {
     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 @@ main(int argc, char *argv[]) {
         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];