Limit number of menu lines by item count

Limit the number of menu lines visible in line mode if there are less
items than lines. This brings wmenu's behavior in line with dmenu's.

Closes https://codeberg.org/adnano/wmenu/issues/64
This commit is contained in:
adnano 2025-11-18 20:03:22 -05:00
parent 0a38d45abb
commit 8fe04a0c99
4 changed files with 10 additions and 0 deletions

7
menu.c
View file

@ -155,11 +155,17 @@ void menu_getopts(struct menu *menu, int argc, char *argv[]) {
fprintf(stderr, "%s", usage);
exit(EXIT_FAILURE);
}
}
// Compute menu line height and padding.
void menu_calc_height(struct menu *menu) {
int height = get_font_height(menu->font);
menu->line_height = height + 2;
menu->height = menu->line_height;
if (menu->lines > 0) {
if (menu->item_count < (size_t)menu->lines) {
menu->lines = menu->item_count;
}
menu->height += menu->height * menu->lines;
}
menu->padding = height / 2;
@ -189,6 +195,7 @@ static int compare_items(const void *a, const void *b) {
return strcmp(item_a->text, item_b->text);
}
// Sort and deduplicate menu items.
void menu_sort_and_deduplicate(struct menu *menu) {
size_t j = 1;
size_t i;