ui: shutdown...

Listen to the old men...:)
This commit is contained in:
Alastair Poole 2020-11-14 17:45:22 +00:00
parent 30e2b481bf
commit 70e03a6df2
10 changed files with 72 additions and 46 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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,

View File

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

View File

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

View File

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