mirror of
https://codeberg.org/adnano/wmenu.git
synced 2025-11-25 06:59:50 -05:00
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:
parent
0a38d45abb
commit
8fe04a0c99
4 changed files with 10 additions and 0 deletions
7
menu.c
7
menu.c
|
|
@ -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;
|
||||
|
|
|
|||
1
menu.h
1
menu.h
|
|
@ -86,6 +86,7 @@ void menu_destroy(struct menu *menu);
|
|||
void menu_getopts(struct menu *menu, int argc, char *argv[]);
|
||||
void menu_add_item(struct menu *menu, char *text);
|
||||
void menu_sort_and_deduplicate(struct menu *menu);
|
||||
void menu_calc_height(struct menu *menu);
|
||||
void menu_invalidate(struct menu *menu);
|
||||
void menu_render_items(struct menu *menu);
|
||||
void menu_paste(struct menu *menu, const char *text, ssize_t len);
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ int main(int argc, char *argv[]) {
|
|||
struct menu *menu = menu_create(exec_item);
|
||||
menu_getopts(menu, argc, argv);
|
||||
read_items(menu);
|
||||
menu_calc_height(menu);
|
||||
int status = menu_run(menu);
|
||||
menu_destroy(menu);
|
||||
return status;
|
||||
|
|
|
|||
1
wmenu.c
1
wmenu.c
|
|
@ -29,6 +29,7 @@ int main(int argc, char *argv[]) {
|
|||
struct menu *menu = menu_create(print_item);
|
||||
menu_getopts(menu, argc, argv);
|
||||
read_items(menu);
|
||||
menu_calc_height(menu);
|
||||
int status = menu_run(menu);
|
||||
menu_destroy(menu);
|
||||
return status;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue