From 175034919aa8ac5ae1a5b195115f681d286d31a4 Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Sat, 16 Jun 2018 21:31:49 +0100 Subject: [PATCH] shutdown: let's shutdown the same everywhere. Also minor refactor in main.c --- src/main.c | 23 ++++++++++++----------- src/ui.c | 38 ++++++++++++++++++++++++++------------ src/ui.h | 6 +++++- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/main.c b/src/main.c index 9c92f9d..ba2a2be 100644 --- a/src/main.c +++ b/src/main.c @@ -1,21 +1,24 @@ /* Copyright 2018. Alastair Poole See LICENSE file for details. */ - #include "process.h" #include "system.h" #include "ui.h" static void -_win_del_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - evas_object_del(obj); - ecore_main_loop_quit(); + Ui *ui; + + ui = data; + + ui_shutdown(ui); } static Evas_Object * _win_add(void) { + Ui *ui; Evas_Object *win, *icon; elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); @@ -24,11 +27,13 @@ _win_add(void) icon = elm_icon_add(win); elm_icon_standard_set(icon, "evisum"); elm_win_icon_object_set(win, icon); - evas_object_resize(win, 768 * elm_config_scale_get(), 500 * elm_config_scale_get()); - evas_object_smart_callback_add(win, "delete,request", _win_del_cb, NULL); - elm_win_title_set(win, "System Information"); + elm_win_center(win, EINA_TRUE, EINA_TRUE); + evas_object_show(win); + + ui = ui_add(win); + evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); return win; } @@ -43,10 +48,6 @@ main(int argc, char **argv) elm_init(argc, argv); win = _win_add(); - ui_add(win); - - elm_win_center(win, EINA_TRUE, EINA_TRUE); - evas_object_show(win); ecore_main_loop_begin(); diff --git a/src/ui.c b/src/ui.c index 6c67fd2..3e145e5 100644 --- a/src/ui.c +++ b/src/ui.c @@ -21,6 +21,26 @@ static void _extra_view_update(Ui *ui, results_t *results); static void _cpu_view_update(Ui *ui, results_t *results); static void _memory_view_update(Ui *ui, results_t *results); +void +ui_shutdown(Ui *ui) +{ + evas_object_hide(ui->win); + + if (ui->thread_system) + ecore_thread_cancel(ui->thread_system); + + if (ui->thread_process) + ecore_thread_cancel(ui->thread_process); + + if (ui->thread_system) + ecore_thread_wait(ui->thread_system, 1.0); + + if (ui->thread_process) + ecore_thread_wait(ui->thread_process, 1.0); + + ecore_main_loop_quit(); +} + static void _system_stats_thread(void *data, Ecore_Thread *thread) { @@ -387,6 +407,7 @@ _system_process_list(void *data, Ecore_Thread *thread) { if (ecore_thread_check(thread)) return; + usleep(500000); } } @@ -559,15 +580,7 @@ _btn_quit_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void { Ui *ui = data; - evas_object_hide(ui->win); - - ecore_thread_cancel(ui->thread_system); - ecore_thread_cancel(ui->thread_process); - - ecore_thread_wait(ui->thread_system, 1.0); - ecore_thread_wait(ui->thread_process, 1.0); - - ecore_main_loop_quit(); + ui_shutdown(ui); } static void @@ -1318,7 +1331,6 @@ _ui_system_view_add(Ui *ui) frame = elm_frame_add(box); evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_text_set(frame, "System Overview"); elm_object_style_set(frame, "pad_small"); elm_box_pack_end(box, frame); evas_object_show(frame); @@ -2021,7 +2033,7 @@ _ui_tabs_add(Evas_Object *parent, Ui *ui) button = elm_button_add(hbox); evas_object_size_hint_weight_set(button, 1.0, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_text_set(button, "System Activity"); + elm_object_text_set(button, "General"); evas_object_show(button); elm_box_pack_end(hbox, button); evas_object_smart_callback_add(button, "clicked", _tab_system_activity_clicked_cb, ui); @@ -2087,7 +2099,7 @@ _ui_tabs_add(Evas_Object *parent, Ui *ui) return table; } -void +Ui * ui_add(Evas_Object *parent) { Ui *ui; @@ -2131,5 +2143,7 @@ ui_add(Evas_Object *parent) ui->thread_system = ecore_thread_feedback_run(_system_stats_thread, _system_stats_thread_feedback_cb, _thread_end_cb, _thread_error_cb, ui, EINA_FALSE); ui->thread_process = ecore_thread_feedback_run(_system_process_list, _system_process_list_feedback_cb, _thread_end_cb, _thread_error_cb, ui, EINA_FALSE); + + return ui; } diff --git a/src/ui.h b/src/ui.h index 1c8ac6b..c2bc5e6 100644 --- a/src/ui.h +++ b/src/ui.h @@ -120,7 +120,11 @@ typedef struct Ui } Ui; -void +Ui * ui_add(Evas_Object *win); +void +ui_shutdown(Ui *ui); + + #endif