netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=c1e27d69ed3e56dec0ae5d24149afe8db4d91bfa

commit c1e27d69ed3e56dec0ae5d24149afe8db4d91bfa
Author: Alastair Poole <nets...@gmail.com>
Date:   Wed Dec 30 11:51:59 2020 +0000

    ui: handle restart properly and position.
---
 src/bin/evisum_config.h      | 12 +++++-
 src/bin/ui/ui.c              | 94 ++++++++++++++++++++++++++++++++++++++++----
 src/bin/ui/ui.h              | 39 ++++++++++++------
 src/bin/ui/ui_cpu.c          | 18 +++++----
 src/bin/ui/ui_disk.c         | 18 +++++----
 src/bin/ui/ui_memory.c       | 15 +++++--
 src/bin/ui/ui_process_list.c |  8 +++-
 src/bin/ui/ui_sensors.c      | 19 +++++----
 src/bin/ui/ui_util.h         |  2 -
 9 files changed, 174 insertions(+), 51 deletions(-)

diff --git a/src/bin/evisum_config.h b/src/bin/evisum_config.h
index 1c0bdf2..76b73aa 100644
--- a/src/bin/evisum_config.h
+++ b/src/bin/evisum_config.h
@@ -3,7 +3,7 @@
 
 #include "ui/ui.h"
 
-#define CONFIG_VERSION 0x000b
+#define CONFIG_VERSION 0x000c
 
 typedef struct _Evisum_Config
 {
@@ -17,6 +17,8 @@ typedef struct _Evisum_Config
       Evas_Object *win;
       int          width;
       int          height;
+      int          x, y;
+      Eina_Bool    restart;
 
       Eina_Bool    show_kthreads;
       Eina_Bool    show_user;
@@ -29,24 +31,32 @@ typedef struct _Evisum_Config
    {
       int width;
       int height;
+      int x, y;
+      Eina_Bool    restart;
    } cpu;
 
    struct
    {
       int width;
       int height;
+      int x, y;
+      Eina_Bool    restart;
    } mem;
 
    struct
    {
       int width;
       int height;
+      int x, y;
+      Eina_Bool    restart;
    } disk;
 
    struct
    {
       int width;
       int height;
+      int x, y;
+      Eina_Bool    restart;
    } sensors;
 
 } Evisum_Config;
diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c
index aa3f4cc..df42b43 100644
--- a/src/bin/ui/ui.c
+++ b/src/bin/ui/ui.c
@@ -19,7 +19,7 @@ int EVISUM_EVENT_CONFIG_CHANGED;
 void
 evisum_ui_config_save(Ui *ui)
 {
-   Evas_Coord w, h;
+   Evas_Coord x, y, w, h;
    Eina_Bool notify = EINA_FALSE;
 
    if (!_evisum_config) return;
@@ -35,9 +35,12 @@ evisum_ui_config_save(Ui *ui)
              notify = EINA_TRUE;
           }
 
-        evas_object_geometry_get(ui->proc.win, NULL, NULL, &w, &h);
+        evas_object_geometry_get(ui->proc.win, &x, &y, &w, &h);
         _evisum_config->proc.width = w;
         _evisum_config->proc.height = h;
+        _evisum_config->proc.x = x;
+        _evisum_config->proc.y = y;
+        _evisum_config->proc.restart = ui->cpu.restart;
         _evisum_config->proc.sort_type = ui->proc.sort_type;
         _evisum_config->proc.sort_reverse = ui->proc.sort_reverse;
         _evisum_config->proc.poll_delay = ui->proc.poll_delay;
@@ -48,30 +51,42 @@ evisum_ui_config_save(Ui *ui)
 
    if (ui->cpu.win)
      {
-        evas_object_geometry_get(ui->cpu.win, NULL, NULL, &w, &h);
+        evas_object_geometry_get(ui->cpu.win, &x, &y, &w, &h);
         _evisum_config->cpu.width = ui->cpu.width = w;
         _evisum_config->cpu.height = ui->cpu.height = h;
+        _evisum_config->cpu.x = x;
+        _evisum_config->cpu.y = y;
+        _evisum_config->cpu.restart = ui->cpu.restart;
      }
 
    if (ui->mem.win)
      {
-        evas_object_geometry_get(ui->mem.win, NULL, NULL, &w, &h);
+        evas_object_geometry_get(ui->mem.win, &x, &y, &w, &h);
         _evisum_config->mem.width = ui->mem.width = w;
         _evisum_config->mem.height = ui->mem.height = h;
+        _evisum_config->mem.x = x;
+        _evisum_config->mem.y = y;
+        _evisum_config->mem.restart = ui->mem.restart;
      }
 
    if (ui->disk.win)
      {
-        evas_object_geometry_get(ui->disk.win, NULL, NULL, &w, &h);
+        evas_object_geometry_get(ui->disk.win, &x, &y, &w, &h);
         _evisum_config->disk.width = ui->disk.width = w;
         _evisum_config->disk.height = ui->disk.height = h;
+        _evisum_config->disk.x = x;
+        _evisum_config->disk.y = y;
+        _evisum_config->disk.restart = ui->disk.restart;
      }
 
    if (ui->sensors.win)
      {
-        evas_object_geometry_get(ui->sensors.win, NULL, NULL, &w, &h);
+        evas_object_geometry_get(ui->sensors.win, &x, &y, &w, &h);
         _evisum_config->sensors.width = ui->sensors.width = w;
         _evisum_config->sensors.height = ui->sensors.height = h;
+        _evisum_config->sensors.x = x;
+        _evisum_config->sensors.y = y;
+        _evisum_config->sensors.restart = ui->sensors.restart;
      }
 
    config_save(_evisum_config);
@@ -99,23 +114,45 @@ evisum_ui_config_load(Ui *ui)
 
    ui->proc.width = _evisum_config->proc.width;
    ui->proc.height = _evisum_config->proc.height;
+   ui->proc.x = _evisum_config->proc.x;
+   ui->proc.y = _evisum_config->proc.y;
+   ui->proc.restart = _evisum_config->proc.restart;
 
    ui->cpu.width = _evisum_config->cpu.width;
    ui->cpu.height = _evisum_config->cpu.height;
+   ui->cpu.x = _evisum_config->cpu.x;
+   ui->cpu.y = _evisum_config->cpu.y;
+   ui->cpu.restart = _evisum_config->cpu.restart;
 
    ui->mem.width = _evisum_config->mem.width;
    ui->mem.height = _evisum_config->mem.height;
+   ui->mem.x = _evisum_config->mem.x;
+   ui->mem.y = _evisum_config->mem.y;
+   ui->mem.restart = _evisum_config->mem.restart;
 
    ui->disk.width = _evisum_config->disk.width;
    ui->disk.height = _evisum_config->disk.height;
+   ui->disk.x = _evisum_config->disk.x;
+   ui->disk.y = _evisum_config->disk.y;
+   ui->disk.restart = _evisum_config->disk.restart;
 
    ui->sensors.width = _evisum_config->sensors.width;
    ui->sensors.height = _evisum_config->sensors.height;
+   ui->sensors.x = _evisum_config->sensors.x;
+   ui->sensors.y = _evisum_config->sensors.y;
+   ui->sensors.restart = _evisum_config->sensors.restart;
 }
 
 void
-evisum_restart(void)
+evisum_ui_restart(Ui *ui)
 {
+   if (ui->proc.win) ui->proc.restart = 1;
+   if (ui->cpu.win) ui->cpu.restart = 1;
+   if (ui->mem.win) ui->mem.restart = 1;
+   if (ui->disk.win) ui->disk.restart = 1;
+   if (ui->sensors.win) ui->sensors.restart = 1;
+
+   evisum_ui_config_save(ui);
    evisum_server_shutdown();
    ecore_app_restart();
    ecore_main_loop_quit();
@@ -181,7 +218,7 @@ _menu_effects_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
 
    evisum_ui_config_save(ui);
 
-   evisum_restart();
+   evisum_ui_restart(ui);
 }
 
 static Evas_Object *
@@ -426,6 +463,47 @@ _process_win_add(Evas_Object *parent, int pid, int delay)
 void
 evisum_ui_activate(Ui *ui, Evisum_Action action, int pid)
 {
+   Eina_Bool restart = 0;
+
+   if (ui->proc.restart)
+     {
+        ui_process_list_win_add(ui, NULL);
+        restart = 1;
+     }
+
+   if (ui->cpu.restart)
+     {
+        ui_win_cpu_add(ui, NULL);
+        restart = 1;
+     }
+
+   if (ui->mem.restart)
+     {
+        ui_win_memory_add(ui, NULL);
+        restart = 1;
+     }
+
+   if (ui->disk.restart)
+     {
+        ui_win_disk_add(ui, NULL);
+        restart = 1;
+     }
+
+   if (ui->sensors.restart)
+     {
+        ui_win_sensors_add(ui, NULL);
+        restart = 1;
+     }
+
+   if (restart)
+     {
+        ui->proc.restart = ui->cpu.restart = 0;
+        ui->mem.restart = ui->disk.restart = 0;
+        ui->sensors.restart = 0;
+        evisum_ui_config_save(ui);
+        return;
+     }
+
    switch (action)
      {
        case EVISUM_ACTION_DEFAULT:
diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h
index e10c584..785ad31 100644
--- a/src/bin/ui/ui.h
+++ b/src/bin/ui/ui.h
@@ -23,16 +23,18 @@ typedef struct Ui
 
    struct
    {
-      Evas_Object     *win;
-      int              width;
-      int              height;
-
-      int        poll_delay;
-      int        sort_type;
-      Eina_Bool  sort_reverse;
-      Eina_Bool  show_self;
-      Eina_Bool  show_kthreads;
-      Eina_Bool  show_user;
+      Evas_Object  *win;
+      int           width;
+      int           height;
+      int           x, y;
+      Eina_Bool     restart;
+
+      int           poll_delay;
+      int           sort_type;
+      Eina_Bool     sort_reverse;
+      Eina_Bool     show_self;
+      Eina_Bool     show_kthreads;
+      Eina_Bool     show_user;
    } proc;
 
    Evas_Object     *win_about;
@@ -44,6 +46,8 @@ typedef struct Ui
       Evas_Object  *win;
       int           width;
       int           height;
+      int           x, y;
+      Eina_Bool     restart;
    } cpu;
 
    struct
@@ -51,14 +55,18 @@ typedef struct Ui
       Evas_Object  *win;
       int           width;
       int           height;
+      int           x, y;
+      Eina_Bool     restart;
       Eina_Bool     zfs_mounted;
    } mem;
 
    struct
    {
-      Evas_Object *win;
-      int          width;
-      int          height;
+      Evas_Object  *win;
+      int           width;
+      int           height;
+      int           x, y;
+      Eina_Bool     restart;
    } disk;
 
    struct
@@ -66,6 +74,8 @@ typedef struct Ui
       Evas_Object  *win;
       int           width;
       int           height;
+      int           x, y;
+      Eina_Bool     restart;
    } sensors;
 } Ui;
 
@@ -90,4 +100,7 @@ evisum_ui_config_load(Ui *ui);
 void
 evisum_ui_config_save(Ui *ui);
 
+void
+evisum_ui_restart(Ui *ui);
+
 #endif
diff --git a/src/bin/ui/ui_cpu.c b/src/bin/ui/ui_cpu.c
index fb94bbc..f3d519b 100644
--- a/src/bin/ui/ui_cpu.c
+++ b/src/bin/ui/ui_cpu.c
@@ -350,8 +350,7 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void
    Animate *ad = data;
    Ui *ui = ad->ui;
 
-   // on deletion of window, cancel thread, free animate data and set cpu
-   // dialog handle to null
+   evisum_ui_config_save(ui);
    ecore_thread_cancel(ad->thread);
    ecore_thread_wait(ad->thread, 0.5);
 
@@ -741,12 +740,17 @@ ui_win_cpu_add(Ui *ui, Evas_Object *parent)
    else
      evas_object_resize(win, UI_CHILD_WIN_WIDTH * 1.5, UI_CHILD_WIN_HEIGHT * 
1.1);
 
-   if (parent)
-     evas_object_geometry_get(parent, &x, &y, NULL, NULL);
-   if (x > 0 && y > 0)
-     evas_object_move(win, x + 20, y + 20);
+   if (ui->cpu.x > 0 && ui->cpu.y > 0)
+     evas_object_move(win, ui->cpu.x, ui->cpu.y);
    else
-     elm_win_center(win, 1, 1);
+     {
+        if (parent)
+          evas_object_geometry_get(parent, &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 9212575..e325aad 100644
--- a/src/bin/ui/ui_disk.c
+++ b/src/bin/ui/ui_disk.c
@@ -300,8 +300,7 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
    pd = data;
    ui = pd->ui;
 
-   evas_object_del(obj);
-
+   evisum_ui_config_save(ui);;
    ecore_thread_cancel(pd->thread);
    ecore_thread_wait(pd->thread, 0.5);
 
@@ -655,12 +654,17 @@ ui_win_disk_add(Ui *ui, Evas_Object *parent)
    else
      evas_object_resize(win, UI_CHILD_WIN_WIDTH * 1.5, UI_CHILD_WIN_HEIGHT * 
1.1);
 
-   if (parent)
-     evas_object_geometry_get(parent, &x, &y, NULL, NULL);
-   if (x > 0 && y > 0)
-     evas_object_move(win, x + 20, y + 20);
+   if (ui->disk.x > 0 && ui->disk.y > 0)
+     evas_object_move(win, ui->disk.x, ui->disk.y);
    else
-     elm_win_center(win, 1, 1);
+     {
+        if (parent)
+          evas_object_geometry_get(parent, &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_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_memory.c b/src/bin/ui/ui_memory.c
index c608051..878c6f7 100644
--- a/src/bin/ui/ui_memory.c
+++ b/src/bin/ui/ui_memory.c
@@ -355,6 +355,7 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
+   evisum_ui_config_save(ui);
    ecore_thread_cancel(pd->thread);
    ecore_thread_wait(pd->thread, 0.5);
 
@@ -496,11 +497,17 @@ ui_win_memory_add(Ui *ui, Evas_Object *parent)
    else
      evas_object_resize(win, UI_CHILD_WIN_WIDTH , UI_CHILD_WIN_HEIGHT);
 
-   if (parent) evas_object_geometry_get(parent, &x, &y, NULL, NULL);
-   if (x > 0 && y > 0)
-     evas_object_move(win, x + 20, y + 20);
+   if (ui->mem.x > 0 && ui->mem.y > 0)
+     evas_object_move(win, ui->mem.x, ui->mem.y);
    else
-     elm_win_center(win, 1, 1);
+     {
+        if (parent)
+          evas_object_geometry_get(parent, &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_event_callback_add(win, EVAS_CALLBACK_RESIZE, _win_resize_cb, 
pd);
    evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _win_del_cb, pd);
diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c
index 6cfa8ed..200e7cf 100644
--- a/src/bin/ui/ui_process_list.c
+++ b/src/bin/ui/ui_process_list.c
@@ -1524,7 +1524,7 @@ _win_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_U
 
    ui = pd->ui;
 
-   evas_object_del(obj);
+   evisum_ui_config_save(ui);
 
    if (pd->timer_search)
      ecore_timer_del(pd->timer_search);
@@ -1587,7 +1587,11 @@ ui_process_list_win_add(Ui *ui, Evas_Object *parent 
EINA_UNUSED)
    else
      evas_object_resize(win, EVISUM_WIN_WIDTH * elm_config_scale_get(),
                         EVISUM_WIN_HEIGHT * elm_config_scale_get());
-   elm_win_center(win, 1, 1);
+
+   if (ui->proc.x > 0 && ui->proc.y > 0)
+     evas_object_move(win, ui->proc.x, ui->proc.y);
+   else
+     elm_win_center(win, 1, 1);
 
    obj = _ui_content_system_add(pd, win);
    elm_object_content_set(win, obj);
diff --git a/src/bin/ui/ui_sensors.c b/src/bin/ui/ui_sensors.c
index 0afbb8a..6c9901c 100644
--- a/src/bin/ui/ui_sensors.c
+++ b/src/bin/ui/ui_sensors.c
@@ -208,11 +208,11 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
+   evisum_ui_config_save(ui);
+
    ecore_thread_cancel(pd->thread);
    ecore_thread_wait(pd->thread, 0.5);
-   evas_object_del(obj);
    ui->sensors.win = NULL;
-
    EINA_LIST_FREE(pd->batteries, bat)
      free(bat);
 
@@ -330,12 +330,17 @@ ui_win_sensors_add(Ui *ui, Evas_Object *parent)
    else
      evas_object_resize(win, UI_CHILD_WIN_WIDTH, UI_CHILD_WIN_HEIGHT);
 
-   if (parent)
-     evas_object_geometry_get(parent, &x, &y, NULL, NULL);
-   if (x > 0 && y > 0)
-     evas_object_move(win, x + 20, y + 20);
+   if (ui->sensors.x > 0 && ui->sensors.y > 0)
+     evas_object_move(win, ui->sensors.x, ui->sensors.y);
    else
-     elm_win_center(win, 1, 1);
+     {
+        if (parent)
+          evas_object_geometry_get(parent, &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_util.h b/src/bin/ui/ui_util.h
index cd983b7..9929127 100644
--- a/src/bin/ui/ui_util.h
+++ b/src/bin/ui/ui_util.h
@@ -14,8 +14,6 @@
 
 #define UI_CHILD_WIN_WIDTH  360
 #define UI_CHILD_WIN_HEIGHT 360
-#define MISC_MAX_WIDTH      350
-#define MISC_MIN_WIDTH      340
 
 void
 evisum_icon_cache_init(void);

-- 


Reply via email to