From 79a1af08a12670e797db1278f36bafc404ef0326 Mon Sep 17 00:00:00 2001 From: Marc Andre Tanner Date: Sat, 2 Oct 2010 11:09:16 +0200 Subject: [PATCH] Simplify gui menu selection handling Signed-off-by: Marc Andre Tanner --- gui-list.c | 2 +- gui.c | 26 +++++++------------------- qi-bootmenu.c | 10 +++++----- 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/gui-list.c b/gui-list.c index 1a60fca..03c1949 100644 --- a/gui-list.c +++ b/gui-list.c @@ -72,6 +72,6 @@ static void gui_list_show_error(const char *errstr, va_list ap) { static void gui_list_add_item(MenuItem *item) { static unsigned int y; - gui_list_draw_item(item->text, item->logo, item->callback, item->data, 0, y); + gui_list_draw_item(item->text, item->logo, gui_item_clicked, item, 0, y); y += LIST_LOGO_HEIGHT; } diff --git a/gui.c b/gui.c index 2a3a5cf..609a7c9 100644 --- a/gui.c +++ b/gui.c @@ -10,49 +10,37 @@ static void gui_show_error(const char *errstr, ...) { va_end(ap); } -static void gui_select_item(Evas_Object *item) { +static void gui_item_clicked(void *data, Evas *evas, Evas_Object *item, void *event) { + MenuItem *menu = data; if (gui->select) gui->select(item); -} - -static void gui_deselect_item(Evas_Object *item) { + menu->callback(menu->data); if (gui->deselect) gui->deselect(item); } -static void poweroff(void *data, Evas *evas, Evas_Object *item, void *event) { +static void poweroff(void *data) { Eina_List *l; BootItem *s; - gui_select_item(item); - EINA_LIST_FOREACH(systems, l, s) { umount(s->dev + sstrlen("/dev/")); } system("poweroff"); - gui_deselect_item(item); } -static void boot_nand(void *data, Evas *evas, Evas_Object *item, void *event) { - - gui_select_item(item); - +static void boot_nand(void *data) { BootItem *nand = scan_partition((const char *)data); if (!nand) { gui_show_error("No kernel found in NAND Flash.\n"); - goto out; + return; } boot_kernel(nand); -out: - gui_deselect_item(item); } -static void gui_bootitem_clicked(void *data, Evas *evas, Evas_Object *item, void *event) { - if (gui->select) - gui->select(item); +static void gui_bootitem_clicked(void *data) { boot_kernel((BootItem*)data); - /* XXX: shouldn't be reached, display an error message? */ } static bool gui_init(){ diff --git a/qi-bootmenu.c b/qi-bootmenu.c index 8450f65..2b851a7 100644 --- a/qi-bootmenu.c +++ b/qi-bootmenu.c @@ -52,13 +52,13 @@ typedef struct { typedef struct { const char *text; const char *logo; - void(*callback)(void*, Evas*, Evas_Object*, void *); + void(*callback)(void *data); void *data; } MenuItem; /* menu actions */ -static void boot_nand(void *data, Evas *evas, Evas_Object *obj, void *event); -static void poweroff(void *data, Evas *evas, Evas_Object *obj, void *event); +static void boot_nand(void *data); +static void poweroff(void *data); /* drawing related stuff */ static Ecore_Evas *ee; @@ -73,7 +73,7 @@ typedef struct { } Gui; /* functions available to gui modules */ -static void gui_bootitem_clicked(void *data, Evas *evas, Evas_Object *item, void *event); +static void gui_item_clicked(void *data, Evas *evas, Evas_Object *item, void *event); static void gui_show_error(const char *errstr, ...); #include "config.h" @@ -153,7 +153,7 @@ int main(int argc, char **argv) { EINA_LIST_FOREACH(systems, l, s) { for (i = 0; i < countof(menu); i++) { - if (!strcmp(menu[i].data, s->dev)) { + if (menu[i].data && !strcmp(menu[i].data, s->dev)) { menu[i].text = NULL; break; } -- 2.11.4.GIT