about summary refs log tree commit diff
path: root/dmenu.c
diff options
context:
space:
mode:
authorAnselm R Garbe <anselm@garbe.us>2010-03-07 08:32:16 +0000
committerAnselm R Garbe <anselm@garbe.us>2010-03-07 08:32:16 +0000
commit37236f8840624d5e9d590e7be9ba365bc61913a6 (patch)
tree2ecdf8a89621ce83c5276ed8a8902669976c5ee1 /dmenu.c
parentthis is only a temporary workaround, the command executed by -p must be confi... (diff)
downloaddmenu-37236f8840624d5e9d590e7be9ba365bc61913a6.tar.gz
dmenu-37236f8840624d5e9d590e7be9ba365bc61913a6.tar.bz2
dmenu-37236f8840624d5e9d590e7be9ba365bc61913a6.zip
applied Connor's patch, thanks!
Diffstat (limited to 'dmenu.c')
-rw-r--r--dmenu.c77
1 files changed, 33 insertions, 44 deletions
diff --git a/dmenu.c b/dmenu.c
index 1f7abca..aef8ae5 100644
--- 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];