diff --git a/src/bin/evisum_config.h b/src/bin/evisum_config.h index 3a6f0de..6bad5f8 100644 --- a/src/bin/evisum_config.h +++ b/src/bin/evisum_config.h @@ -3,7 +3,7 @@ #include "ui/ui.h" -#define CONFIG_VERSION 0x0008 +#define CONFIG_VERSION 0x000a typedef struct _Evisum_Config { @@ -18,11 +18,31 @@ typedef struct _Evisum_Config Eina_Bool show_kthreads; Eina_Bool show_user; Eina_Bool show_desktop; + struct { int width; int height; } cpu; + + struct + { + int width; + int height; + } mem; + + struct + { + int width; + int height; + } disk; + + struct + { + int width; + int height; + } sensors; + } Evisum_Config; void config_init(void); diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c index 94d9257..9dcbad9 100644 --- a/src/bin/ui/ui.c +++ b/src/bin/ui/ui.c @@ -47,6 +47,27 @@ evisum_ui_config_save(Ui *ui) _evisum_config->cpu.height = ui->cpu.height = h; } + if (ui->mem.win) + { + evas_object_geometry_get(ui->mem.win, NULL, NULL, &w, &h); + _evisum_config->mem.width = ui->mem.width = w; + _evisum_config->mem.height = ui->mem.height = h; + } + + if (ui->disk.win) + { + evas_object_geometry_get(ui->disk.win, NULL, NULL, &w, &h); + _evisum_config->disk.width = ui->disk.width = w; + _evisum_config->disk.height = ui->disk.height = h; + } + + if (ui->sensors.win) + { + evas_object_geometry_get(ui->sensors.win, NULL, NULL, &w, &h); + _evisum_config->sensors.width = ui->sensors.width = w; + _evisum_config->sensors.height = ui->sensors.height = h; + } + config_save(_evisum_config); } @@ -55,15 +76,12 @@ evisum_ui_config_load(Ui *ui) { _evisum_config = NULL; - _evisum_config = config_load(); + _evisum_config = config_load(); ui->settings.sort_type = _evisum_config->sort_type; ui->settings.sort_reverse = _evisum_config->sort_reverse; ui->settings.poll_delay = _evisum_config->poll_delay; - if ((_evisum_config->width > 0) && (_evisum_config->height > 0)) - evas_object_resize(ui->win, _evisum_config->width, _evisum_config->height); - evisum_ui_effects_enabled_set(_evisum_config->effects); evisum_ui_backgrounds_enabled_set(_evisum_config->backgrounds); @@ -74,6 +92,15 @@ evisum_ui_config_load(Ui *ui) ui->cpu.width = _evisum_config->cpu.width; ui->cpu.height = _evisum_config->cpu.height; + + ui->mem.width = _evisum_config->mem.width; + ui->mem.height = _evisum_config->mem.height; + + ui->disk.width = _evisum_config->disk.width; + ui->disk.height = _evisum_config->disk.height; + + ui->sensors.width = _evisum_config->sensors.width; + ui->sensors.height = _evisum_config->sensors.height; } static void diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h index b006363..ce7f3dc 100644 --- a/src/bin/ui/ui.h +++ b/src/bin/ui/ui.h @@ -92,6 +92,8 @@ typedef struct Ui struct { Evas_Object *win; + int width; + int height; Ecore_Timer *timer; Eina_Bool zfs_mounted; } mem; @@ -99,11 +101,15 @@ typedef struct Ui struct { Evas_Object *win; + int width; + int height; } disk; struct { Evas_Object *win; + int width; + int height; Evas_Object *box; Evas_Object *timer; } sensors; diff --git a/src/bin/ui/ui_cpu.c b/src/bin/ui/ui_cpu.c index 4afbed3..0cf384c 100644 --- a/src/bin/ui/ui_cpu.c +++ b/src/bin/ui/ui_cpu.c @@ -709,6 +709,9 @@ ui_win_cpu_add(Ui *ui) evas_object_geometry_get(ui->win, &x, &y, NULL, NULL); if (x > 0 && y > 0) evas_object_move(win, x + 20, y + 20); + else + elm_win_center(win, 1, 1); + evas_object_show(win); } diff --git a/src/bin/ui/ui_disk.c b/src/bin/ui/ui_disk.c index 4d7f2c2..a34f2fc 100644 --- a/src/bin/ui/ui_disk.c +++ b/src/bin/ui/ui_disk.c @@ -402,7 +402,10 @@ _btn_usage_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj, static void _win_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { + Ui *ui = data; + _disks_poll_timer_cb(NULL); + evisum_ui_config_save(ui); } void @@ -420,8 +423,7 @@ ui_win_disk_add(Ui *ui) } eina_lock_new(&_lock); - ui->disk.win = win = elm_win_util_standard_add("evisum", - _("Storage")); + ui->disk.win = win = elm_win_util_standard_add("evisum", _("Storage")); 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() || @@ -498,7 +500,7 @@ ui_win_disk_add(Ui *ui) evas_object_size_hint_weight_set(scroller, EXPAND, EXPAND); evas_object_size_hint_align_set(scroller, FILL, FILL); elm_scroller_policy_set(scroller, - ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); evas_object_show(scroller); pd->genlist = genlist = elm_genlist_add(win); @@ -516,16 +518,22 @@ ui_win_disk_add(Ui *ui) evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); + if (ui->disk.width > 0 && ui->disk.height > 0) + evas_object_resize(win, ui->disk.width, ui->disk.height); + else + evas_object_resize(win, UI_CHILD_WIN_WIDTH * 1.5, UI_CHILD_WIN_HEIGHT * 1.1); + if (ui->win) evas_object_geometry_get(ui->win, &x, &y, NULL, NULL); - evas_object_resize(win, UI_CHILD_WIN_WIDTH * 1.5, UI_CHILD_WIN_HEIGHT * 1.1); - evas_object_move(win, x + 20, y + 20); if (x > 0 && y > 0) - evas_object_move(win, x, y); + evas_object_move(win, x + 20, y + 20); + else + elm_win_center(win, 1, 1); + evas_object_show(win); evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, - _win_resize_cb, NULL); + _win_resize_cb, ui); pd->cache = evisum_ui_item_cache_new(genlist, _item_create, 10); diff --git a/src/bin/ui/ui_memory.c b/src/bin/ui/ui_memory.c index e74474d..abf639e 100644 --- a/src/bin/ui/ui_memory.c +++ b/src/bin/ui/ui_memory.c @@ -143,12 +143,21 @@ _win_del_cb(void *data, Evas_Object *obj, ecore_main_loop_quit(); } +static void +_win_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Ui *ui = data; + + evisum_ui_config_save(ui); +} + void ui_win_memory_add(Ui *ui) { Evas_Object *win, *frame, *pb; Evas_Object *border, *rect, *label, *table; int i; + Evas_Coord x = 0, y = 0; meminfo_t memory; if (ui->mem.win) @@ -163,12 +172,13 @@ ui_win_memory_add(Ui *ui) memset(&memory, 0, sizeof(memory)); system_memory_usage_get(&memory); - ui->mem.win = win = elm_win_util_standard_add("evisum", - _("Memory Usage")); + ui->mem.win = win = elm_win_util_standard_add("evisum", _("Memory Usage")); 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() || evisum_ui_backgrounds_enabled_get())); + evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, + _win_resize_cb, ui); frame = elm_frame_add(win); evas_object_size_hint_weight_set(frame, EXPAND, EXPAND); @@ -238,8 +248,22 @@ ui_win_memory_add(Ui *ui) evas_object_data_set(win, "widgets", widgets); evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); - evisum_child_window_show(ui->win, win); - evas_object_resize(win, UI_CHILD_WIN_WIDTH , UI_CHILD_WIN_HEIGHT / 2); + + if (ui->mem.width > 0 && ui->mem.height > 0) + evas_object_resize(win, ui->mem.width, ui->mem.height); + else + evas_object_resize(win, UI_CHILD_WIN_WIDTH , UI_CHILD_WIN_HEIGHT / 2); + + if (ui->win) + evas_object_geometry_get(ui->win, &x, &y, NULL, NULL); + if (x > 0 && y > 0) + evas_object_move(win, x + 20, y + 20); + else + elm_win_center(win, 1, 1); + + evas_object_show(win); + + evas_object_show(win); _memory_update(widgets); diff --git a/src/bin/ui/ui_sensors.c b/src/bin/ui/ui_sensors.c index a38e2ad..b02cda9 100644 --- a/src/bin/ui/ui_sensors.c +++ b/src/bin/ui/ui_sensors.c @@ -246,11 +246,20 @@ _win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, ecore_main_loop_quit(); } +static void +_win_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Ui *ui = data; + + evisum_ui_config_save(ui); +} + void ui_win_sensors_add(Ui *ui) { Evas_Object *win, *box, *hbox, *frame, *scroller; Evas_Object *table, *border, *rect; + Evas_Coord x = 0, y = 0; if (ui->sensors.win) { @@ -263,6 +272,8 @@ ui_win_sensors_add(Ui *ui) evas_object_size_hint_align_set(win, FILL, FILL); evisum_ui_background_random_add(win, (evisum_ui_effects_enabled_get() || evisum_ui_backgrounds_enabled_get())); + evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, + _win_resize_cb, ui); box = elm_box_add(win); evas_object_size_hint_weight_set(box, EXPAND, EXPAND); @@ -284,7 +295,7 @@ ui_win_sensors_add(Ui *ui) evas_object_size_hint_weight_set(scroller, EXPAND, EXPAND); evas_object_size_hint_align_set(scroller, FILL, FILL); elm_scroller_policy_set(scroller, - ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); evas_object_show(scroller); border = elm_frame_add(box); @@ -312,7 +323,20 @@ ui_win_sensors_add(Ui *ui) elm_object_content_set(win, box); evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); - evisum_child_window_show(ui->win, win); + + if (ui->sensors.width > 0 && ui->sensors.height > 0) + evas_object_resize(win, ui->sensors.width, ui->sensors.height); + else + evas_object_resize(win, UI_CHILD_WIN_WIDTH, UI_CHILD_WIN_HEIGHT); + + if (ui->win) + evas_object_geometry_get(ui->win, &x, &y, NULL, NULL); + if (x > 0 && y > 0) + evas_object_move(win, x + 20, y + 20); + else + elm_win_center(win, 1, 1); + + evas_object_show(win); _sensors_update(ui);