about summary refs log tree commit diff
diff options
context:
space:
mode:
authorQuentin Rameau <quinq@fifth.space>2016-07-26 12:48:23 +0200
committerHiltjo Posthuma <hiltjo@codemadness.org>2016-07-26 18:29:42 +0200
commita4053bc4e403ae57343f43b7e363a0911bba5a3a (patch)
treea059b7f413201432bb3e663a6946be80326fce60
parentPartially revert 44c7de3: fix items text width offset calculation (diff)
downloaddmenu-a4053bc4e403ae57343f43b7e363a0911bba5a3a.tar.gz
dmenu-a4053bc4e403ae57343f43b7e363a0911bba5a3a.tar.bz2
dmenu-a4053bc4e403ae57343f43b7e363a0911bba5a3a.zip
Print highlighted input text only on single match
When the input text fully matches a single item, do not draw the item
and highlight the input text to show that it matches an item in
opposition to regular input text not matching anything.
Diffstat (limited to '')
-rw-r--r--dmenu.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/dmenu.c b/dmenu.c
index 8e84fbd..b191486 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -130,7 +130,7 @@ drawmenu(void)
 {
 	unsigned int curpos;
 	struct item *item;
-	int x = 0, y = 0, w;
+	int x = 0, y = 0, w, inputscheme;
 
 	drw_setscheme(drw, scheme[SchemeNorm]);
 	drw_rect(drw, 0, 0, mw, mh, 1, 1);
@@ -138,18 +138,27 @@ drawmenu(void)
 	if (prompt && *prompt) {
 		drw_setscheme(drw, scheme[SchemeSel]);
 		x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0);
+		x += 2;
 	}
 	/* draw input field */
 	w = (lines > 0 || !matches) ? mw - x : inputw;
-	drw_setscheme(drw, scheme[SchemeNorm]);
+	if (matches && !strcmp(text, curr->text))
+		inputscheme = SchemeSel;
+	else
+		inputscheme = SchemeNorm;
+	drw_setscheme(drw, scheme[inputscheme]);
+
 	drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
 
 	drw_font_getexts(drw->fonts, text, cursor, &curpos, NULL);
 	if ((curpos += lrpad / 2 - 1) < w) {
-		drw_setscheme(drw, scheme[SchemeNorm]);
+		drw_setscheme(drw, scheme[inputscheme]);
 		drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
 	}
 
+	if (inputscheme == SchemeSel)
+		goto drawmap;
+
 	if (lines > 0) {
 		/* draw vertical list */
 		for (item = curr; item != next; item = item->right)
@@ -171,6 +180,7 @@ drawmenu(void)
 			drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0);
 		}
 	}
+drawmap:
 	drw_map(drw, win, 0, 0, mw, mh);
 }