This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository evisum.

View the commit online.

commit 0c0f4ee5894fe2e311d010aa6d912d248a41ba0a
Author: Alastair Poole <[email protected]>
AuthorDate: Sun Jul 5 23:22:11 2026 +0100

    evisum: tidy things up. close on exit?
    
    Let's move global options global and allow them to be set in any
    window. also synchronise the controls so changes are reflected
    in real-time in all instances.
    
    Also let the user decide if enigmatic should close on exit. default
    is to keep it open, but there will be naysayers of course and we
    always listen to them even though i'm a genius and know everything
    and any question i'm chat netstar version 99.2.. or i am speaking
    shit.
    
    anyways, more changes necessary. dont take me too seriously.
---
 NEWS                                |   7 +
 VERSION                             |   2 +-
 meson.build                         |   2 +-
 src/bin/evisum_config.c             |  13 +-
 src/bin/evisum_config.h             |  10 +-
 src/bin/ui/evisum_ui.c              | 251 +++++++++++++++++++++++++-----------
 src/bin/ui/evisum_ui.h              |   8 +-
 src/bin/ui/evisum_ui_process_list.c |  18 +--
 8 files changed, 217 insertions(+), 94 deletions(-)

diff --git a/NEWS b/NEWS
index e185538..88c817d 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+=============
+Evisum 2.0.12
+=============
+
+  * Include option to terminate enigmatic on exit.
+  * Move global config options into appropriate namespace.
+
 =============
 Evisum 2.0.11
 =============
diff --git a/VERSION b/VERSION
index 6cbacdc..280a1e3 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.0.11
+2.0.12
diff --git a/meson.build b/meson.build
index bd54418..4952222 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
 ##### Project
 project('evisum', 'c',
-        version       : '2.0.11',
+        version       : '2.0.12',
         meson_version : '>= 0.56.0')
 
 efl_version = '>= 1.27.0'
diff --git a/src/bin/evisum_config.c b/src/bin/evisum_config.c
index 39dab0a..c5206ec 100644
--- a/src/bin/evisum_config.c
+++ b/src/bin/evisum_config.c
@@ -52,6 +52,12 @@ config_init(void) {
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "version", version, EET_T_INT);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "effects", effects, EET_T_UCHAR);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "backgrounds", backgrounds, EET_T_UCHAR);
+    EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "global.poll_delay", global.poll_delay,
+                                  EET_T_INT);
+    EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "global.history_whole",
+                                  global.history_whole, EET_T_UCHAR);
+    EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "global.monitor_on_exit",
+                                  global.monitor_on_exit, EET_T_UCHAR);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.width", proc.width, EET_T_INT);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.height", proc.height, EET_T_INT);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.x", proc.x, EET_T_INT);
@@ -63,8 +69,6 @@ config_init(void) {
                                   EET_T_UCHAR);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.show_self", proc.show_self,
                                   EET_T_UCHAR);
-    EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.poll_delay", proc.poll_delay,
-                                  EET_T_INT);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.sort_type", proc.sort_type,
                                   EET_T_UCHAR);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.sort_reverse", proc.sort_reverse,
@@ -148,8 +152,6 @@ config_init(void) {
                                   proc.field_order[PROC_FIELD_CPU_USAGE], EET_T_INT);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.show_statusbar", proc.show_statusbar,
                                   EET_T_UCHAR);
-    EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.history_whole", proc.history_whole,
-                                  EET_T_UCHAR);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.transparent", proc.transparent,
                                   EET_T_UCHAR);
     EET_DATA_DESCRIPTOR_ADD_BASIC(_evisum_conf_descriptor, Evisum_Config, "proc.alpha", proc.alpha, EET_T_UCHAR);
@@ -232,7 +234,8 @@ _config_init() {
     cfg->proc.show_statusbar = 1;
     cfg->proc.show_user = 1;
     cfg->proc.show_self = 0;
-    cfg->proc.poll_delay = 1;
+    cfg->global.poll_delay = 1;
+    cfg->global.monitor_on_exit = 1;
     cfg->proc.sort_type = PROC_SORT_BY_CMD;
     cfg->proc.transparent = 0;
     cfg->proc.fields = (1u << PROC_FIELD_CMD)
diff --git a/src/bin/evisum_config.h b/src/bin/evisum_config.h
index e3e44ad..10ae581 100644
--- a/src/bin/evisum_config.h
+++ b/src/bin/evisum_config.h
@@ -3,7 +3,7 @@
 
 #include "ui/evisum_ui.h"
 
-#define CONFIG_VERSION 0x0021
+#define CONFIG_VERSION 0x0024
 
 typedef enum {
     EVISUM_DISK_GRAPH_USAGE = 0,
@@ -16,6 +16,12 @@ typedef struct _Evisum_Config {
     Eina_Bool effects;
     Eina_Bool backgrounds;
 
+    struct {
+        int poll_delay;
+        Eina_Bool history_whole;
+        Eina_Bool monitor_on_exit;
+    } global;
+
     struct {
         int width;
         int height;
@@ -24,7 +30,6 @@ typedef struct _Evisum_Config {
 
         Eina_Bool show_kthreads;
         Eina_Bool show_user;
-        int poll_delay;
         unsigned char sort_type;
         Eina_Bool sort_reverse;
         Eina_Bool show_self;
@@ -33,7 +38,6 @@ typedef struct _Evisum_Config {
         int field_order[EVISUM_PROC_FIELD_WIDTHS_MAX];
 
         Eina_Bool show_statusbar;
-        Eina_Bool history_whole;
         Eina_Bool transparent;
         unsigned char alpha;
     } proc;
diff --git a/src/bin/ui/evisum_ui.c b/src/bin/ui/evisum_ui.c
index 2993971..a324e3c 100644
--- a/src/bin/ui/evisum_ui.c
+++ b/src/bin/ui/evisum_ui.c
@@ -4,6 +4,7 @@
 #include "evisum_server.h"
 
 #include "../enigmatic/Events.h"
+#include "../enigmatic/enigmatic_util.h"
 #include "../engine/evisum_engine.h"
 #include "background/evisum_background.h"
 
@@ -20,7 +21,17 @@
 int EVISUM_EVENT_CONFIG_CHANGED;
 
 static Evas_Object *_slider_alpha = NULL;
-static Evas_Object *_slider_poll_delay = NULL;
+
+typedef struct {
+    Evisum_Ui *ui;
+    Ecore_Timer *timer;
+    Ecore_Event_Handler *config_changed_handler;
+    Evas_Object *it_focus;
+    Evas_Object *poll_delay_slider;
+    Evas_Object *history_range_radio;
+    Evas_Object *monitor_on_exit_check;
+    Eina_Bool updating;
+} Menu_Inst;
 
 static void
 _proc_field_order_sanitize(int *order) {
@@ -61,12 +72,21 @@ evisum_ui_config_save(Evisum_Ui *ui) {
     config()->effects = ui->effects;
     config()->backgrounds = 0;
 
+    if ((config()->global.poll_delay != ui->global.poll_delay)
+        || (config()->global.history_whole != ui->global.history_whole)
+        || (config()->global.monitor_on_exit != ui->global.monitor_on_exit)) {
+        notify = 1;
+    }
+
+    config()->global.poll_delay = ui->global.poll_delay;
+    config()->global.history_whole = ui->global.history_whole;
+    config()->global.monitor_on_exit = ui->global.monitor_on_exit;
+
     if (ui->proc.win) {
         if ((config()->proc.show_kthreads != ui->proc.show_kthreads)
             || (config()->proc.show_user != ui->proc.show_user)
             || (config()->proc.show_self != ui->proc.show_self)
             || (config()->proc.show_statusbar != ui->proc.show_statusbar)
-            || (config()->proc.history_whole != ui->proc.history_whole)
             || (config()->proc.transparent != ui->proc.transparent) || (config()->proc.alpha != ui->proc.alpha)) {
             notify = 1;
         }
@@ -81,9 +101,7 @@ evisum_ui_config_save(Evisum_Ui *ui) {
         config()->proc.show_kthreads = ui->proc.show_kthreads;
         config()->proc.show_user = ui->proc.show_user;
         config()->proc.show_self = ui->proc.show_self;
-        config()->proc.poll_delay = ui->proc.poll_delay;
         config()->proc.show_statusbar = ui->proc.show_statusbar;
-        config()->proc.history_whole = ui->proc.history_whole;
         config()->proc.transparent = ui->proc.transparent;
         config()->proc.alpha = ui->proc.alpha;
         config()->proc.fields = ui->proc.fields;
@@ -168,12 +186,13 @@ evisum_ui_config_load(Evisum_Ui *ui) {
     proc_info_kthreads_show_set(ui->proc.show_kthreads);
     ui->proc.show_user = config()->proc.show_user;
     ui->proc.show_self = config()->proc.show_self;
-    ui->proc.poll_delay = config()->proc.poll_delay;
-    if (ui->proc.poll_delay < 1) ui->proc.poll_delay = INTERVAL_NORMAL;
-    else if (ui->proc.poll_delay > INTERVAL_SLOW)
-        ui->proc.poll_delay = INTERVAL_SLOW;
+    ui->global.poll_delay = config()->global.poll_delay;
+    if (ui->global.poll_delay < 1) ui->global.poll_delay = INTERVAL_NORMAL;
+    else if (ui->global.poll_delay > INTERVAL_SLOW)
+        ui->global.poll_delay = INTERVAL_SLOW;
     ui->proc.show_statusbar = config()->proc.show_statusbar;
-    ui->proc.history_whole = config()->proc.history_whole;
+    ui->global.history_whole = config()->global.history_whole;
+    ui->global.monitor_on_exit = config()->global.monitor_on_exit;
     ui->proc.transparent = config()->proc.transparent;
     ui->proc.alpha = config()->proc.alpha;
     for (int i = 0; i < EVISUM_PROC_FIELD_WIDTHS_MAX; i++) ui->proc.field_widths[i] = config()->proc.field_widths[i];
@@ -363,10 +382,49 @@ _main_menu_show_statusbar_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, v
 }
 
 static void
-_main_menu_history_range_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) {
-    Evisum_Ui *ui = data;
+_main_menu_global_values_update(Menu_Inst *inst) {
+    if (!inst || !inst->ui) return;
 
-    ui->proc.history_whole = elm_radio_value_get(obj) == 1;
+    inst->updating = EINA_TRUE;
+    if (inst->poll_delay_slider)
+        elm_slider_value_set(inst->poll_delay_slider, inst->ui->global.poll_delay);
+    if (inst->history_range_radio)
+        elm_radio_value_set(inst->history_range_radio, inst->ui->global.history_whole ? 1 : 0);
+    if (inst->monitor_on_exit_check)
+        elm_check_state_set(inst->monitor_on_exit_check, inst->ui->global.monitor_on_exit);
+    inst->updating = EINA_FALSE;
+}
+
+static Eina_Bool
+_main_menu_config_changed_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) {
+    Menu_Inst *inst = data;
+
+    _main_menu_global_values_update(inst);
+
+    return ECORE_CALLBACK_PASS_ON;
+}
+
+static void
+_main_menu_history_range_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) {
+    Menu_Inst *inst = data;
+    Evisum_Ui *ui;
+
+    if (!inst || inst->updating) return;
+    ui = inst->ui;
+
+    ui->global.history_whole = elm_radio_value_get(obj) == 1;
+    evisum_ui_config_save(ui);
+}
+
+static void
+_main_menu_monitor_on_exit_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) {
+    Menu_Inst *inst = data;
+    Evisum_Ui *ui;
+
+    if (!inst || inst->updating) return;
+    ui = inst->ui;
+
+    ui->global.monitor_on_exit = elm_check_state_get(obj);
     evisum_ui_config_save(ui);
 }
 
@@ -386,14 +444,18 @@ _main_menu_disk_graph_mode_changed_cb(void *data EINA_UNUSED, Evas_Object *obj,
 
 static void
 _main_menu_slider_poll_delay_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) {
-    Evisum_Ui *ui = data;
+    Menu_Inst *inst = data;
+    Evisum_Ui *ui;
 
-    ui->proc.poll_delay = elm_slider_value_get(obj) + 0.5;
-    if (ui->proc.poll_delay < 1) ui->proc.poll_delay = INTERVAL_NORMAL;
-    else if (ui->proc.poll_delay > INTERVAL_SLOW)
-        ui->proc.poll_delay = INTERVAL_SLOW;
+    if (!inst || inst->updating) return;
+    ui = inst->ui;
 
-    evisum_engine_interval_set(ui->proc.poll_delay);
+    ui->global.poll_delay = elm_slider_value_get(obj) + 0.5;
+    if (ui->global.poll_delay < 1) ui->global.poll_delay = INTERVAL_NORMAL;
+    else if (ui->global.poll_delay > INTERVAL_SLOW)
+        ui->global.poll_delay = INTERVAL_SLOW;
+
+    evisum_engine_interval_set(ui->global.poll_delay);
 
     evisum_ui_config_save(ui);
 }
@@ -415,11 +477,6 @@ _main_menu_show_self_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *
     evisum_ui_config_save(ui);
 }
 
-typedef struct {
-    Ecore_Timer *timer;
-    Evas_Object *it_focus;
-} Menu_Inst;
-
 static void
 _main_menu_deleted_cb(void *data EINA_UNUSED, Evas_Object *obj, Evas *e, void *event_info EINA_UNUSED) {
     Menu_Inst *inst = data;
@@ -427,6 +484,8 @@ _main_menu_deleted_cb(void *data EINA_UNUSED, Evas_Object *obj, Evas *e, void *e
     inst->it_focus = NULL;
     if (inst->timer) ecore_timer_del(inst->timer);
     inst->timer = NULL;
+    if (inst->config_changed_handler) ecore_event_handler_del(inst->config_changed_handler);
+    inst->config_changed_handler = NULL;
     free(inst);
 }
 
@@ -451,6 +510,98 @@ _cpu_visual_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_inf
     evisum_ui_cpu_win_restart(ui);
 }
 
+static void
+_main_menu_global_options_add(Menu_Inst *inst, Evas_Object *popup, Evas_Object *container) {
+    Evisum_Ui *ui = inst->ui;
+    Evas_Object *fr, *history_fr, *bx, *hbx, *history_bx, *sli, *chk, *radio, *radio_group;
+
+    inst->updating = EINA_TRUE;
+
+    fr = elm_frame_add(popup);
+    elm_object_text_set(fr, _("Global"));
+    evas_object_size_hint_weight_set(fr, EXPAND, EXPAND);
+    evas_object_size_hint_align_set(fr, FILL, FILL);
+    evas_object_show(fr);
+
+    bx = elm_box_add(popup);
+    evas_object_size_hint_weight_set(bx, EXPAND, EXPAND);
+    evas_object_size_hint_align_set(bx, FILL, FILL);
+    evas_object_show(bx);
+
+    sli = elm_slider_add(popup);
+    evas_object_size_hint_weight_set(sli, EXPAND, EXPAND);
+    elm_slider_min_max_set(sli, (double) INTERVAL_NORMAL, (double) INTERVAL_SLOW);
+    elm_slider_span_size_set(sli, 100.0);
+    elm_slider_step_set(sli, 1 / 3.0);
+    elm_slider_unit_format_set(sli, _("%1.0f s"));
+    elm_slider_indicator_visible_mode_set(sli, ELM_SLIDER_INDICATOR_VISIBLE_MODE_NONE);
+    elm_object_tooltip_text_set(sli, _("Enigmatic Update Interval"));
+    elm_slider_value_set(sli, ui->global.poll_delay);
+    evas_object_size_hint_align_set(sli, FILL, FILL);
+    evas_object_smart_callback_add(sli, "slider,drag,stop", _main_menu_slider_poll_delay_changed_cb, inst);
+    evas_object_smart_callback_add(sli, "changed", _main_menu_slider_poll_delay_changed_cb, inst);
+    evas_object_show(sli);
+    elm_box_pack_end(bx, sli);
+    inst->poll_delay_slider = sli;
+
+    history_fr = elm_frame_add(popup);
+    elm_object_text_set(history_fr, _("History"));
+    evas_object_size_hint_weight_set(history_fr, EXPAND, EXPAND);
+    evas_object_size_hint_align_set(history_fr, FILL, FILL);
+    evas_object_show(history_fr);
+
+    history_bx = elm_box_add(popup);
+    evas_object_size_hint_weight_set(history_bx, EXPAND, EXPAND);
+    evas_object_size_hint_align_set(history_bx, FILL, FILL);
+    evas_object_show(history_bx);
+
+    hbx = elm_box_add(popup);
+    evas_object_size_hint_weight_set(hbx, EXPAND, 0);
+    evas_object_size_hint_align_set(hbx, FILL, FILL);
+    elm_box_horizontal_set(hbx, 1);
+    evas_object_show(hbx);
+
+    radio_group = radio = elm_radio_add(hbx);
+    elm_object_text_set(radio, _("Last hour"));
+    elm_radio_state_value_set(radio, 0);
+    evas_object_size_hint_weight_set(radio, EXPAND, EXPAND);
+    evas_object_size_hint_align_set(radio, FILL, FILL);
+    evas_object_smart_callback_add(radio, "changed", _main_menu_history_range_changed_cb, inst);
+    elm_box_pack_end(hbx, radio);
+    evas_object_show(radio);
+
+    radio = elm_radio_add(hbx);
+    elm_object_text_set(radio, _("Whole history"));
+    elm_radio_state_value_set(radio, 1);
+    elm_radio_group_add(radio, radio_group);
+    evas_object_size_hint_weight_set(radio, EXPAND, EXPAND);
+    evas_object_size_hint_align_set(radio, FILL, FILL);
+    evas_object_smart_callback_add(radio, "changed", _main_menu_history_range_changed_cb, inst);
+    elm_box_pack_end(hbx, radio);
+    evas_object_show(radio);
+    elm_radio_value_set(radio_group, ui->global.history_whole ? 1 : 0);
+    elm_box_pack_end(history_bx, hbx);
+    inst->history_range_radio = radio_group;
+
+    chk = elm_check_add(history_bx);
+    evas_object_size_hint_weight_set(chk, EXPAND, EXPAND);
+    evas_object_size_hint_align_set(chk, FILL, FILL);
+    elm_object_text_set(chk, _("Keep monitoring on exit?"));
+    elm_check_state_set(chk, ui->global.monitor_on_exit);
+    evas_object_show(chk);
+    evas_object_smart_callback_add(chk, "changed", _main_menu_monitor_on_exit_changed_cb, inst);
+    elm_box_pack_end(history_bx, chk);
+    inst->monitor_on_exit_check = chk;
+
+    elm_object_content_set(history_fr, history_bx);
+    elm_box_pack_end(bx, history_fr);
+
+    elm_object_content_set(fr, bx);
+    elm_box_pack_end(container, fr);
+
+    inst->updating = EINA_FALSE;
+}
+
 Evas_Object *
 evisum_ui_main_menu_create(Evisum_Ui *ui, Evas_Object *parent, Evas_Object *obj) {
     Evas_Object *o, *obx, *bx, *tb, *hbx, *sep, *fr, *sli;
@@ -553,7 +704,9 @@ evisum_ui_main_menu_create(Evisum_Ui *ui, Evas_Object *parent, Evas_Object *obj)
 
     Menu_Inst *inst = calloc(1, sizeof(Menu_Inst));
     if (!inst) return NULL;
+    inst->ui = ui;
     inst->timer = ecore_timer_add(0.5, _main_menu_focus_timer_cb, inst);
+    inst->config_changed_handler = ecore_event_handler_add(EVISUM_EVENT_CONFIG_CHANGED, _main_menu_config_changed_cb, inst);
     inst->it_focus = it_focus;
     evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _main_menu_deleted_cb, inst);
 
@@ -562,6 +715,7 @@ evisum_ui_main_menu_create(Evisum_Ui *ui, Evas_Object *parent, Evas_Object *obj)
     evas_object_move(o, ox + (ow / 2), oy + oh);
     evas_object_show(o);
 
+    _main_menu_global_options_add(inst, o, obx);
 
     if (parent == ui->cpu.win) {
         fr = elm_frame_add(o);
@@ -676,56 +830,6 @@ evisum_ui_main_menu_create(Evisum_Ui *ui, Evas_Object *parent, Evas_Object *obj)
     evas_object_smart_callback_add(chk, "changed", _main_menu_show_self_changed_cb, ui);
     elm_box_pack_end(bx, chk);
 
-    _slider_poll_delay = sli = elm_slider_add(o);
-    evas_object_size_hint_weight_set(sli, EXPAND, EXPAND);
-    elm_slider_min_max_set(sli, (double) INTERVAL_NORMAL, (double) INTERVAL_SLOW);
-    elm_slider_span_size_set(sli, 100.0);
-    elm_slider_step_set(sli, 1 / 3.0);
-    elm_slider_unit_format_set(sli, _("%1.0f s"));
-    elm_slider_indicator_visible_mode_set(sli, ELM_SLIDER_INDICATOR_VISIBLE_MODE_NONE);
-    elm_object_tooltip_text_set(sli, _("Enigmatic Update Interval"));
-    elm_slider_value_set(sli, ui->proc.poll_delay);
-    evas_object_size_hint_align_set(sli, FILL, FILL);
-    evas_object_smart_callback_add(sli, "slider,drag,stop", _main_menu_slider_poll_delay_changed_cb, ui);
-    evas_object_smart_callback_add(sli, "changed", _main_menu_slider_poll_delay_changed_cb, ui);
-    evas_object_show(sli);
-    elm_box_pack_end(bx, sli);
-
-    fr = elm_frame_add(o);
-    elm_object_text_set(fr, _("History"));
-    evas_object_size_hint_weight_set(fr, EXPAND, EXPAND);
-    evas_object_size_hint_align_set(fr, FILL, FILL);
-    evas_object_show(fr);
-
-    hbx = elm_box_add(o);
-    evas_object_size_hint_weight_set(hbx, EXPAND, 0);
-    evas_object_size_hint_align_set(hbx, FILL, FILL);
-    elm_box_horizontal_set(hbx, 1);
-    evas_object_show(hbx);
-
-    radio_group = radio = elm_radio_add(hbx);
-    elm_object_text_set(radio, _("Last hour"));
-    elm_radio_state_value_set(radio, 0);
-    evas_object_size_hint_weight_set(radio, EXPAND, EXPAND);
-    evas_object_size_hint_align_set(radio, FILL, FILL);
-    evas_object_smart_callback_add(radio, "changed", _main_menu_history_range_changed_cb, ui);
-    elm_box_pack_end(hbx, radio);
-    evas_object_show(radio);
-
-    radio = elm_radio_add(hbx);
-    elm_object_text_set(radio, _("Whole history"));
-    elm_radio_state_value_set(radio, 1);
-    elm_radio_group_add(radio, radio_group);
-    evas_object_size_hint_weight_set(radio, EXPAND, EXPAND);
-    evas_object_size_hint_align_set(radio, FILL, FILL);
-    evas_object_smart_callback_add(radio, "changed", _main_menu_history_range_changed_cb, ui);
-    elm_box_pack_end(hbx, radio);
-    evas_object_show(radio);
-    elm_radio_value_set(radio_group, ui->proc.history_whole ? 1 : 0);
-
-    elm_object_content_set(fr, hbx);
-    elm_box_pack_end(bx, fr);
-
     elm_object_content_set(options_fr, bx);
     elm_box_pack_end(obx, options_fr);
 
@@ -878,6 +982,7 @@ evisum_ui_shutdown(Evisum_Ui *ui) {
     ecore_thread_wait(ui->background_poll_thread, 0.5);
     evisum_background_shutdown(ui);
     evisum_engine_shutdown();
+    if (!ui->global.monitor_on_exit) enigmatic_terminate();
 
     if (ui->cpu.visual) eina_stringshare_del(ui->cpu.visual);
     free(ui);
diff --git a/src/bin/ui/evisum_ui.h b/src/bin/ui/evisum_ui.h
index 235aa59..e26317c 100644
--- a/src/bin/ui/evisum_ui.h
+++ b/src/bin/ui/evisum_ui.h
@@ -30,6 +30,12 @@ typedef struct _Evisum_Ui {
     uint64_t mem_total;
     uint64_t mem_used;
 
+    struct {
+        int poll_delay;
+        Eina_Bool history_whole;
+        Eina_Bool monitor_on_exit;
+    } global;
+
     Eina_Bool kthreads_has_rss;
     struct {
         Evas_Object *win;
@@ -41,7 +47,6 @@ typedef struct _Evisum_Ui {
         Eina_Bool has_kthreads;
         Eina_Bool has_wchan;
 
-        int poll_delay;
         int sort_type;
         unsigned int fields;
         int field_widths[EVISUM_PROC_FIELD_WIDTHS_MAX];
@@ -54,7 +59,6 @@ typedef struct _Evisum_Ui {
         unsigned char alpha;
         Eina_Bool transparent;
         Eina_Bool show_statusbar;
-        Eina_Bool history_whole;
     } proc;
 
     Evas_Object *win_about;
diff --git a/src/bin/ui/evisum_ui_process_list.c b/src/bin/ui/evisum_ui_process_list.c
index 3cfe8b2..cf7c66b 100644
--- a/src/bin/ui/evisum_ui_process_list.c
+++ b/src/bin/ui/evisum_ui_process_list.c
@@ -667,7 +667,7 @@ _evisum_ui_process_list_history_time_available_get(Evisum_Ui_Process_List_View *
     uint32_t since = 0;
 
     if (!view) return EINA_FALSE;
-    if (!view->ui->proc.history_whole) since = view->history.start_time;
+    if (!view->ui->global.history_whole) since = view->history.start_time;
 
     return evisum_engine_history_time_available_since_get(t, since);
 }
@@ -991,18 +991,18 @@ _evisum_ui_process_list_history_bounds_update(Evisum_Ui_Process_List_View *view)
 
     /* The default history view is the recent contiguous range only.  Whole
      * history mode deliberately keeps the older broad bounds behaviour. */
-    if (view->history.whole != view->ui->proc.history_whole) {
-        view->history.whole = view->ui->proc.history_whole;
+    if (view->history.whole != view->ui->global.history_whole) {
+        view->history.whole = view->ui->global.history_whole;
         view->history.start_time = 0;
         view->history.end_time = 0;
     }
-    if (!view->ui->proc.history_whole) since = now > 3600 ? now - 3600 : 0;
+    if (!view->ui->global.history_whole) since = now > 3600 ? now - 3600 : 0;
     if ((view->history.start_time) && (!since || (view->history.end_time >= since))
         && (now >= view->history.start_time)) {
         start_time = view->history.start_time;
         end_time = live_time > now ? live_time : now;
     } else {
-        _evisum_ui_process_list_history_bounds_refresh(view, view->ui->proc.history_whole, since);
+        _evisum_ui_process_list_history_bounds_refresh(view, view->ui->global.history_whole, since);
         if (!view->history.start_time) {
             elm_object_disabled_set(view->summary.history_slider, 1);
             elm_object_disabled_set(view->summary.history_live_btn, 1);
@@ -1343,7 +1343,7 @@ static int
 _evisum_ui_process_list_poll_delay_get(Evisum_Ui_Process_List_View *view) {
     int delay_secs = INTERVAL_NORMAL;
 
-    if (view && view->ui) delay_secs = view->ui->proc.poll_delay;
+    if (view && view->ui) delay_secs = view->ui->global.poll_delay;
     if (delay_secs < INTERVAL_NORMAL) delay_secs = INTERVAL_NORMAL;
     else if (delay_secs > INTERVAL_SLOW)
         delay_secs = INTERVAL_SLOW;
@@ -2170,14 +2170,14 @@ _evisum_ui_process_list_config_changed_cb(void *data, int type EINA_UNUSED, void
     evisum_ui_widget_exel_genlist_policy_set(view->widget_exel, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
     view->skip_wait = 1;
 
-    if (view->summary.visible && (view->history.whole != ui->proc.history_whole)) {
+    if (view->summary.visible && (view->history.whole != ui->global.history_whole)) {
         uint32_t since = 0, history_time;
 
         _evisum_ui_process_list_history_bounds_refresh_cancel(view);
         view->history.start_time = 0;
         view->history.end_time = 0;
 
-        if (!ui->proc.history_whole) {
+        if (!ui->global.history_whole) {
             uint32_t now = (uint32_t) time(NULL);
             since = now > 3600 ? now - 3600 : 0;
         }
@@ -2326,7 +2326,7 @@ evisum_ui_process_list_win_add(Evisum_Ui *ui) {
     eina_lock_new(&view->history.lock);
     view->history.lock_init = EINA_TRUE;
     view->history.live = EINA_TRUE;
-    view->history.whole = ui->proc.history_whole;
+    view->history.whole = ui->global.history_whole;
     evisum_engine_history_live_set();
     view->handler
             = ecore_event_handler_add(EVISUM_EVENT_CONFIG_CHANGED, _evisum_ui_process_list_config_changed_cb, view);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to