netstar pushed a commit to branch master. http://git.enlightenment.org/apps/evisum.git/commit/?id=70e03a6df2f4f077b50b9245a27555f45c108f9f
commit 70e03a6df2f4f077b50b9245a27555f45c108f9f Author: Alastair Poole <[email protected]> Date: Sat Nov 14 17:45:22 2020 +0000 ui: shutdown... Listen to the old men...:) --- src/bin/main.c | 25 ++++++++++++++++++++++++- src/bin/ui/ui.c | 10 +--------- src/bin/ui/ui.h | 5 +---- src/bin/ui/ui_cpu.c | 5 +---- src/bin/ui/ui_disk.c | 8 +++----- src/bin/ui/ui_memory.c | 8 +++----- src/bin/ui/ui_process_list.c | 20 ++++++++++++++------ src/bin/ui/ui_process_view.c | 5 +++-- src/bin/ui/ui_sensors.c | 8 +++----- src/bin/ui/ui_util.c | 24 +++++++++++++++++++----- 10 files changed, 72 insertions(+), 46 deletions(-) diff --git a/src/bin/main.c b/src/bin/main.c index eb22992..a78fd59 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -9,6 +9,26 @@ #include "evisum_server.h" #include "ui/ui.h" +static Eina_Bool +_shutdown_cb(void *data, int type, void *event EINA_UNUSED) +{ + Ui *ui = data; + + if (ui->cpu.win) evas_object_del(ui->cpu.win); + if (ui->mem.win) evas_object_del(ui->mem.win); + if (ui->disk.win) evas_object_del(ui->disk.win); + if (ui->sensors.win) evas_object_del(ui->sensors.win); + if (ui->win) evas_object_del(ui->win); + + return EINA_FALSE; +} + +static void +_signals(Ui *ui) +{ + ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _shutdown_cb, ui); +} + int main(int argc, char **argv) { @@ -44,6 +64,7 @@ main(int argc, char **argv) ecore_init(); config_init(); elm_init(argc, argv); + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); #if ENABLE_NLS setlocale(LC_ALL, ""); @@ -58,12 +79,14 @@ main(int argc, char **argv) ui = evisum_ui_init(); if (!ui) return 1; + _signals(ui); + evisum_server_init(ui); evisum_ui_activate(ui, action, pid); ecore_main_loop_begin(); - evisum_ui_del(ui); + evisum_ui_shutdown(ui); evisum_server_shutdown(); elm_shutdown(); diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c index 4d63267..35e711e 100644 --- a/src/bin/ui/ui.c +++ b/src/bin/ui/ui.c @@ -414,14 +414,6 @@ evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent) ui->main_menu = o; } -Eina_Bool -evisum_ui_can_exit(Ui *ui) -{ - if (!ui->win && !ui->cpu.win && !ui->mem.win && !ui->sensors.win) - return 1; - return 0; -} - static void _ui_init_system_probe(Ui *ui) { @@ -468,7 +460,7 @@ evisum_ui_activate(Ui *ui, Evisum_Action action, int pid) } void -evisum_ui_del(Ui *ui) +evisum_ui_shutdown(Ui *ui) { evisum_icon_cache_shutdown(); diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h index 3edb3b0..64213a3 100644 --- a/src/bin/ui/ui.h +++ b/src/bin/ui/ui.h @@ -91,10 +91,7 @@ Ui * evisum_ui_init(void); void -evisum_ui_del(Ui *ui); - -Eina_Bool -evisum_ui_can_exit(Ui *ui); +evisum_ui_shutdown(Ui *ui); void evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent); diff --git a/src/bin/ui/ui_cpu.c b/src/bin/ui/ui_cpu.c index a286211..ad8bf1e 100644 --- a/src/bin/ui/ui_cpu.c +++ b/src/bin/ui/ui_cpu.c @@ -362,9 +362,6 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void free(ad->cpu_order); free(ad); ui->cpu.win = NULL; - - if (evisum_ui_can_exit(ui)) - ecore_main_loop_quit(); } static void @@ -466,7 +463,7 @@ _graph(Ui *ui, Evas_Object *parent) rec = evas_object_rectangle_add(evas_object_evas_get(parent)); evas_object_size_hint_align_set(rec, FILL, FILL); evas_object_size_hint_weight_set(rec, EXPAND, EXPAND); - evas_object_color_set(rec, 0, 0, 0, 128); + evas_object_color_set(rec, 0, 0, 0, 64); evas_object_show(rec); elm_table_pack(tbl, rec, 0, 0, 4, ad->cpu_count); diff --git a/src/bin/ui/ui_disk.c b/src/bin/ui/ui_disk.c index 2a6effa..0fcf639 100644 --- a/src/bin/ui/ui_disk.c +++ b/src/bin/ui/ui_disk.c @@ -261,7 +261,7 @@ _disks_poll_timer_cb(void *data) } static void -_win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, +_win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ui *ui = data; @@ -277,9 +277,6 @@ _win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, eina_lock_free(&_lock); ui->disk.win = NULL; - - if (evisum_ui_can_exit(ui)) - ecore_main_loop_quit(); } static int @@ -446,6 +443,7 @@ ui_win_disk_add(Ui *ui) eina_lock_new(&_lock); ui->disk.win = win = elm_win_util_standard_add("evisum", _("Storage")); + elm_win_autodel_set(win, EINA_TRUE); evas_object_size_hint_weight_set(win, EXPAND, EXPAND); evas_object_size_hint_align_set(win, FILL, FILL); evisum_ui_background_random_add(win, (evisum_ui_effects_enabled_get() || @@ -560,7 +558,7 @@ ui_win_disk_add(Ui *ui) else elm_win_center(win, 1, 1); - evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); + evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _win_del_cb, ui); evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, _win_resize_cb, ui); evas_object_show(win); diff --git a/src/bin/ui/ui_memory.c b/src/bin/ui/ui_memory.c index abf639e..763bf17 100644 --- a/src/bin/ui/ui_memory.c +++ b/src/bin/ui/ui_memory.c @@ -124,7 +124,7 @@ _memory_update(void *data) } static void -_win_del_cb(void *data, Evas_Object *obj, +_win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { Widgets *widgets; @@ -138,9 +138,6 @@ _win_del_cb(void *data, Evas_Object *obj, evas_object_del(obj); ui->mem.win = NULL; - - if (evisum_ui_can_exit(ui)) - ecore_main_loop_quit(); } static void @@ -173,6 +170,7 @@ ui_win_memory_add(Ui *ui) system_memory_usage_get(&memory); ui->mem.win = win = elm_win_util_standard_add("evisum", _("Memory Usage")); + elm_win_autodel_set(win, EINA_TRUE); evas_object_size_hint_weight_set(win, EXPAND, EXPAND); evas_object_size_hint_align_set(win, FILL, FILL); evisum_ui_background_random_add(win, (evisum_ui_effects_enabled_get() || @@ -247,7 +245,7 @@ ui_win_memory_add(Ui *ui) elm_object_content_set(win, frame); evas_object_data_set(win, "widgets", widgets); - evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); + evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _win_del_cb, ui); if (ui->mem.width > 0 && ui->mem.height > 0) evas_object_resize(win, ui->mem.width, ui->mem.height); diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c index aac0170..e0eae33 100644 --- a/src/bin/ui/ui_process_list.c +++ b/src/bin/ui/ui_process_list.c @@ -607,6 +607,15 @@ _bring_in(void *data) return EINA_FALSE; } + +static void +_process_list_cancel_cb(void *data, Ecore_Thread *thread) +{ + Ui_Data *pd = data; + + _proc_pid_cpu_times_free(pd); +} + static void _process_list_feedback_cb(void *data, Ecore_Thread *thread EINA_UNUSED, void *msg EINA_UNUSED) @@ -720,6 +729,7 @@ _process_list(void *data, Ecore_Thread *thread) while (1) { + if (ecore_thread_check(thread)) return; ecore_thread_feedback(thread, ui); for (int i = 0; i < delay * 4; i++) { @@ -1536,7 +1546,7 @@ _evisum_config_changed_cb(void *data, int type EINA_UNUSED, void *event EINA_UNU } static void -_win_del_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, +_win_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ui *ui; @@ -1574,9 +1584,6 @@ _win_del_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, eina_lock_free(&_lock); free(pd); - - if (evisum_ui_can_exit(ui)) - ecore_main_loop_quit(); } void @@ -1599,11 +1606,12 @@ ui_process_list_win_add(Ui *ui) pd->ui = ui; ui->win = win = elm_win_util_standard_add("evisum", "evisum"); + elm_win_autodel_set(win, EINA_TRUE); elm_win_title_set(win, _("EFL System Monitor")); icon = elm_icon_add(win); elm_icon_standard_set(icon, "evisum"); elm_win_icon_object_set(win, icon); - evas_object_smart_callback_add(win, "delete,request", _win_del_cb, pd); + evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _win_del_cb, pd); if (_evisum_config->width > 1 && _evisum_config->height > 1) evas_object_resize(win, _evisum_config->width, _evisum_config->height); @@ -1630,7 +1638,7 @@ ui_process_list_win_add(Ui *ui) pd->thread = ecore_thread_feedback_run(_process_list, _process_list_feedback_cb, - NULL, NULL, pd, EINA_FALSE); + _process_list_cancel_cb, NULL, pd, EINA_FALSE); _process_list_update(pd); evas_object_event_callback_add(ui->win, EVAS_CALLBACK_RESIZE, diff --git a/src/bin/ui/ui_process_view.c b/src/bin/ui/ui_process_view.c index f3df779..2b68ebd 100644 --- a/src/bin/ui/ui_process_view.c +++ b/src/bin/ui/ui_process_view.c @@ -1295,7 +1295,7 @@ _tabs_add(Evas_Object *parent, Ui_Data *pd) } static void -_win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, +_win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *win; @@ -1340,6 +1340,7 @@ ui_process_win_add(Evas_Object *parent_win, int pid, const char *cmd, int poll_d pd->sort_cb = _sort_by_cpu_usage; pd->win = win = elm_win_util_standard_add("evisum", "evisum"); + elm_win_autodel_set(win, EINA_TRUE); _win_title_set(win, "%s (%d)", cmd, pid); ic = elm_icon_add(win); elm_icon_standard_set(ic, "evisum"); @@ -1371,7 +1372,7 @@ ui_process_win_add(Evas_Object *parent_win, int pid, const char *cmd, int poll_d elm_box_pack_end(box, pd->content); elm_object_content_set(win, box); - evas_object_smart_callback_add(win, "delete,request", _win_del_cb, pd); + evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _win_del_cb, pd); evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, _win_resize_cb, pd); diff --git a/src/bin/ui/ui_sensors.c b/src/bin/ui/ui_sensors.c index b02cda9..1e330a9 100644 --- a/src/bin/ui/ui_sensors.c +++ b/src/bin/ui/ui_sensors.c @@ -230,7 +230,7 @@ _sensors_update(void *data) } static void -_win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, +_win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ui *ui = data; @@ -241,9 +241,6 @@ _win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, evas_object_del(obj); ui->sensors.win = NULL; - - if (evisum_ui_can_exit(ui)) - ecore_main_loop_quit(); } static void @@ -268,6 +265,7 @@ ui_win_sensors_add(Ui *ui) } ui->sensors.win = win = elm_win_util_standard_add("evisum", _("Sensors")); + elm_win_autodel_set(win, EINA_TRUE); evas_object_size_hint_weight_set(win, EXPAND, EXPAND); evas_object_size_hint_align_set(win, FILL, FILL); evisum_ui_background_random_add(win, (evisum_ui_effects_enabled_get() || @@ -322,7 +320,7 @@ ui_win_sensors_add(Ui *ui) elm_box_pack_end(box, frame); elm_object_content_set(win, box); - evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); + evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _win_del_cb, ui); if (ui->sensors.width > 0 && ui->sensors.height > 0) evas_object_resize(win, ui->sensors.width, ui->sensors.height); diff --git a/src/bin/ui/ui_util.c b/src/bin/ui/ui_util.c index b9e5036..f2732bf 100644 --- a/src/bin/ui/ui_util.c +++ b/src/bin/ui/ui_util.c @@ -289,7 +289,7 @@ typedef struct { } Animate_Data; static void -_win_del_cb(void *data, Evas_Object *obj, +_win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Animate_Data *ad; @@ -308,7 +308,20 @@ _win_del_cb(void *data, Evas_Object *obj, } static void -_about_resize_cb(void *data, Evas_Object *obj EINA_UNUSED, +_btn_close_cb(void *data EINA_UNUSED, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Animate_Data *ad; + Ui *ui; + + ad = data; + ui = ad->ui; + + evas_object_del(ui->win_about); +} + +static void +_about_resize_cb(void *data, Evas *e, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Animate_Data *ad = data; @@ -403,6 +416,7 @@ evisum_about_window_show(void *data) if (ui->win_about) return; ui->win_about = win = elm_win_add(ui->win, "evisum", ELM_WIN_DIALOG_BASIC); + elm_win_autodel_set(win, EINA_TRUE); elm_win_title_set(win, _("About")); /* All that moves */ @@ -446,8 +460,8 @@ evisum_about_window_show(void *data) about->pos2 = h + ih + ih; about->im_upwards = 1; about->animator = ecore_animator_add(about_anim, about); - evas_object_smart_callback_add(win, "delete,request", _win_del_cb, about); - evas_object_smart_callback_add(win, "resize", _about_resize_cb, about); + evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _win_del_cb, about); + evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, _about_resize_cb, about); /* Version overlay */ @@ -497,7 +511,7 @@ evisum_about_window_show(void *data) evas_object_color_set(rec, 0, 0, 0, 128); evas_object_show(rec); - evas_object_smart_callback_add(btn, "clicked", _win_del_cb, about); + evas_object_smart_callback_add(btn, "clicked", _btn_close_cb, about); elm_table_pack(tbl, label, 0, 1, 1, 1); elm_table_pack(tbl, im, 0, 1, 1, 1); --
