Browse Source

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.
master
Quentin Rameau 7 years ago
committed by Hiltjo Posthuma
parent
commit
a4053bc4e4
1 changed files with 13 additions and 3 deletions
  1. +13
    -3
      dmenu.c

+ 13
- 3
dmenu.c View File

@@ -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);
}



Loading…
Cancel
Save