From f54ded6c4d2a9dbaa6bc0962180ad1c8e2207fc4 Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Sat, 18 Apr 2020 15:36:34 +0100 Subject: [PATCH] menu: ensure clicking outside does nothing. --- src/bin/ui.c | 20 ++++++++++++++------ src/bin/ui.h | 1 + 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/bin/ui.c b/src/bin/ui.c index 1997e22..0bb544e 100644 --- a/src/bin/ui.c +++ b/src/bin/ui.c @@ -1525,7 +1525,11 @@ _btn_kill_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info static void _item_menu_dismissed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *ev EINA_UNUSED) { + Ui *ui = data; + evas_object_del(obj); + + ui->menu = NULL; } static void @@ -1564,9 +1568,10 @@ _item_menu_kill_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EI static void _item_menu_cancel_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *menu = data; + Ui *ui = data; - elm_menu_close(menu); + elm_menu_close(ui->menu); + ui->menu = NULL; } static void @@ -1608,10 +1613,10 @@ _item_menu_create(Ui *ui, Proc_Info *proc) Eina_Bool stopped; if (!proc) return NULL; - menu = elm_menu_add(ui->win); + ui->menu = menu = elm_menu_add(ui->win); if (!menu) return NULL; - evas_object_smart_callback_add(menu, "dismissed", _item_menu_dismissed_cb, NULL); + evas_object_smart_callback_add(menu, "dismissed", _item_menu_dismissed_cb, ui); stopped = !!strcmp(proc->state, "stop"); @@ -1627,7 +1632,7 @@ _item_menu_create(Ui *ui, Proc_Info *proc) if (!stopped) elm_object_item_disabled_set(menu_it2, EINA_TRUE); elm_menu_item_add(menu, menu_it, _icon_path_get("kill"), "Kill", _item_menu_kill_cb, proc); elm_menu_item_separator_add(menu, menu_it); - elm_menu_item_add(menu, menu_it, _icon_path_get("cancel"), "Cancel", _item_menu_cancel_cb, menu); + elm_menu_item_add(menu, menu_it, _icon_path_get("cancel"), "Cancel", _item_menu_cancel_cb, ui); return menu; } @@ -1666,10 +1671,13 @@ _item_pid_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) ui = data; it = event_info; + + elm_genlist_item_selected_set(it, EINA_FALSE); + if (ui->menu) return; + proc = elm_object_item_data_get(it); if (!proc) return; - elm_genlist_item_selected_set(it, EINA_FALSE); ui->selected_pid = proc->pid; _process_panel_update(ui); diff --git a/src/bin/ui.h b/src/bin/ui.h index 6f72f43..48e2de4 100644 --- a/src/bin/ui.h +++ b/src/bin/ui.h @@ -58,6 +58,7 @@ typedef enum typedef struct Ui { Evas_Object *win; + Evas_Object *menu; Evas_Object *panel; Evas_Object *scroller; Evas_Object *content;