resizing vlist, new dinput binding
							parent
							
								
									cc8b3b999b
								
							
						
					
					
						commit
						7afd296c40
					
				
							
								
								
									
										34
									
								
								dmenu.c
								
								
								
								
							
							
						
						
									
										34
									
								
								dmenu.c
								
								
								
								
							|  | @ -109,6 +109,7 @@ calcoffsetsv(void) { | |||
| 	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 @@ drawmenu(void) { | |||
| 	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 @@ drawmenu(void) { | |||
| 	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 @@ drawmenuh(void) { | |||
| 
 | ||||
| 	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 @@ drawmenuh(void) { | |||
| 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 @@ kpress(XKeyEvent *e) { | |||
| 			text[++i] = '\0'; | ||||
| 			match(text); | ||||
| 			break; | ||||
| 		case XK_x: | ||||
| 			dinput(); | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 	switch(ksym) { | ||||
|  | @ -360,10 +359,9 @@ kpress(XKeyEvent *e) { | |||
| 		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; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue