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);

-- 


Reply via email to