diff options
author | Quentin Rameau <quinq@fifth.space> | 2016-07-26 12:48:23 +0200 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2016-07-26 18:29:42 +0200 |
commit | a4053bc4e403ae57343f43b7e363a0911bba5a3a (patch) | |
tree | a059b7f413201432bb3e663a6946be80326fce60 /dmenu.c | |
parent | 657122f7819fd74d66706ffb607deb44884401b7 (diff) |
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 'dmenu.c')
-rw-r--r-- | dmenu.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -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); } |