diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2017-02-14 21:51:02 +0200 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2017-02-14 21:51:02 +0200 |
commit | 8cfa530b89c9daed987d1ffd6b3481838e23997a (patch) | |
tree | 2112f130aad45b3dad13ceb033de9e55039bf739 /client/common/common.c | |
parent | 0ff5f2017801f52789e2fa658f609abdfbd4fa28 (diff) | |
download | bemenu-8cfa530b89c9daed987d1ffd6b3481838e23997a.tar.gz bemenu-8cfa530b89c9daed987d1ffd6b3481838e23997a.tar.bz2 bemenu-8cfa530b89c9daed987d1ffd6b3481838e23997a.zip |
bemenu: Reuse code more
Diffstat (limited to 'client/common/common.c')
-rw-r--r-- | client/common/common.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/client/common/common.c b/client/common/common.c index 50ff848..35bc9e3 100644 --- a/client/common/common.c +++ b/client/common/common.c @@ -275,8 +275,9 @@ menu_with_options(const struct client *client) } enum bm_run_result -run_menu(struct bm_menu *menu) +run_menu(const struct client *client, struct bm_menu *menu, void (*item_cb)(struct bm_item *item, const char *text)) { + bm_menu_set_highlighted_index(menu, client->selected); bm_menu_grab_keyboard(menu, true); uint32_t unicode; @@ -286,6 +287,19 @@ run_menu(struct bm_menu *menu) bm_menu_render(menu); key = bm_menu_poll_key(menu, &unicode); } while ((status = bm_menu_run_with_key(menu, key, unicode)) == BM_RUN_RESULT_RUNNING); + + if (status == BM_RUN_RESULT_SELECTED) { + uint32_t i, count; + struct bm_item **items = bm_menu_get_selected_items(menu, &count); + for (i = 0; i < count; ++i) { + const char *text = bm_item_get_text(items[i]); + item_cb(items[i], text); + } + + if (!count && bm_menu_get_filter(menu)) + item_cb(NULL, bm_menu_get_filter(menu)); + } + return status; } |