applied Connor's patch, thanks!
This commit is contained in:
		
							
								
								
									
										77
									
								
								dmenu.c
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								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];
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user