n = mw - (promptw + inputw + TEXTW("<") + TEXTW(">"));
/* calculate which items will begin the next page and previous page */
for (i = 0, next = curr; next; next = next->right)
- if ((i += (lines > 0) ? bh : TEXTW(next->text)) > n)
+ if ((i += (lines > 0) ? bh : MIN(TEXTW(next->text), n)) > n)
break;
for (i = 0, prev = curr; prev && prev->left; prev = prev->left)
- if ((i += (lines > 0) ? bh : TEXTW(prev->left->text)) > n)
+ if ((i += (lines > 0) ? bh : MIN(TEXTW(prev->left->text), n)) > n)
break;
}
{
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);
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)
drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0);
}
}
+drawmap:
drw_map(drw, win, 0, 0, mw, mh);
}
}
if (items)
items[i].text = NULL;
- inputw = TEXTW(items[imax].text);
+ inputw = items ? TEXTW(items[imax].text) : 0;
lines = MIN(lines, i);
}