diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2014-10-22 23:10:11 +0300 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2014-10-22 23:10:11 +0300 |
commit | 0abad19b3eda776effd1c01b14589714d85c7b35 (patch) | |
tree | 1ac3c148c4e6e4900ccf8decfb10c8f137666335 /lib | |
parent | 30269b6385cc1df7eee6367d1d8608ca1f414190 (diff) | |
download | bemenu-0abad19b3eda776effd1c01b14589714d85c7b35.tar.gz bemenu-0abad19b3eda776effd1c01b14589714d85c7b35.tar.bz2 bemenu-0abad19b3eda776effd1c01b14589714d85c7b35.zip |
Pass bm_menu struct on each render api call.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/internal.h | 8 | ||||
-rw-r--r-- | lib/library.c | 4 | ||||
-rw-r--r-- | lib/menu.c | 6 | ||||
-rw-r--r-- | lib/renderers/curses/curses.c | 9 |
4 files changed, 15 insertions, 12 deletions
diff --git a/lib/internal.h b/lib/internal.h index d632d41..aa35ed8 100644 --- a/lib/internal.h +++ b/lib/internal.h @@ -37,12 +37,12 @@ struct render_api { /** * Create underlying renderer. */ - bool (*constructor)(void); + bool (*constructor)(struct bm_menu *menu); /** * Release underlying renderer. */ - void (*destructor)(void); + void (*destructor)(struct bm_menu *menu); /** * Get count of displayed items by the underlying renderer. @@ -53,7 +53,7 @@ struct render_api { * If the underlying renderer is a UI toolkit. (curses, etc...) * There might be possibility to get user input, and this should be thus implemented. */ - enum bm_key (*poll_key)(uint32_t *unicode); + enum bm_key (*poll_key)(const struct bm_menu *menu, uint32_t *unicode); /** * Tells underlying renderer to draw the menu. @@ -182,7 +182,7 @@ struct bm_menu { }; /* library.c */ -bool bm_renderer_activate(struct bm_renderer *renderer); +bool bm_renderer_activate(struct bm_renderer *renderer, struct bm_menu *menu); /* menu.c */ bool bm_menu_item_is_selected(const struct bm_menu *menu, const struct bm_item *item); diff --git a/lib/library.c b/lib/library.c index e06fda2..443721c 100644 --- a/lib/library.c +++ b/lib/library.c @@ -69,14 +69,14 @@ fail: } bool -bm_renderer_activate(struct bm_renderer *renderer) +bm_renderer_activate(struct bm_renderer *renderer, struct bm_menu *menu) { assert(renderer); if (!load(renderer->file, renderer)) return false; - if (!renderer->api.constructor()) + if (!renderer->api.constructor(menu)) goto fail; return true; @@ -39,7 +39,7 @@ bm_menu_new(const char *renderer) if (renderer && strcmp(renderer, renderers[i]->name)) continue; - if (bm_renderer_activate((struct bm_renderer*)renderers[i])) { + if (bm_renderer_activate((struct bm_renderer*)renderers[i], menu)) { status = true; menu->renderer = renderers[i]; break; @@ -60,7 +60,7 @@ bm_menu_free(struct bm_menu *menu) assert(menu); if (menu->renderer && menu->renderer->api.destructor) - menu->renderer->api.destructor(); + menu->renderer->api.destructor(menu); free(menu->title); free(menu->filter); @@ -356,7 +356,7 @@ bm_menu_poll_key(struct bm_menu *menu, uint32_t *out_unicode) enum bm_key key = BM_KEY_NONE; if (menu->renderer->api.poll_key) - key = menu->renderer->api.poll_key(out_unicode); + key = menu->renderer->api.poll_key(menu, out_unicode); return key; } diff --git a/lib/renderers/curses/curses.c b/lib/renderers/curses/curses.c index 2591446..3eae4e7 100644 --- a/lib/renderers/curses/curses.c +++ b/lib/renderers/curses/curses.c @@ -239,8 +239,9 @@ get_displayed_count(const struct bm_menu *menu) } static enum bm_key -poll_key(uint32_t *unicode) +poll_key(const struct bm_menu *menu, uint32_t *unicode) { + (void)menu; assert(unicode); *unicode = 0; @@ -341,8 +342,9 @@ poll_key(uint32_t *unicode) } static void -destructor(void) +destructor(struct bm_menu *menu) { + (void)menu; terminate(); sigaction(SIGABRT, &curses.abrt_action, NULL); sigaction(SIGSEGV, &curses.segv_action, NULL); @@ -351,8 +353,9 @@ destructor(void) } static bool -constructor(void) +constructor(struct bm_menu *menu) { + (void)menu; memset(&curses, 0, sizeof(curses)); struct sigaction action; |