netstar pushed a commit to branch master.

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

commit 17a3fc34916d5b33d20952017dc8c7126b6654db
Author: Alastair Poole <nets...@gmail.com>
Date:   Tue Dec 29 12:31:54 2020 +0000

    procs: genlist effeciency
---
 src/bin/ui/ui_process_list.c | 108 ++++++++++++++++++++++++-------------------
 1 file changed, 61 insertions(+), 47 deletions(-)

diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c
index 71ffcc7..a802575 100644
--- a/src/bin/ui/ui_process_list.c
+++ b/src/bin/ui/ui_process_list.c
@@ -348,7 +348,7 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
 {
    Proc_Info *proc;
    struct passwd *pwd_entry;
-   Evas_Object *l, *r, *o, *hbx, *pb;
+   Evas_Object *rec, *lb, *o, *hbx, *pb;
    char buf[128];
    Evas_Coord w, ow;
    Ui_Data *pd = _pd;
@@ -367,80 +367,96 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
      }
 
    evas_object_geometry_get(pd->btn_pid, NULL, NULL, &w, NULL);
-   l = evas_object_data_get(it->obj, "proc_pid");
+   lb = evas_object_data_get(it->obj, "proc_pid");
    snprintf(buf, sizeof(buf), "%d", proc->pid);
-   elm_object_text_set(l, buf);
-   evas_object_geometry_get(l, NULL, NULL, &ow, NULL);
-   if (ow > w) evas_object_size_hint_min_set(pd->btn_pid, w, 1);
-   r = evas_object_data_get(l, "rec");
-   evas_object_size_hint_min_set(r, w, 1);
-   evas_object_show(l);
+   if (strcmp(buf, elm_object_text_get(lb)))
+     {
+        elm_object_text_set(lb, buf);
+        evas_object_geometry_get(lb, NULL, NULL, &ow, NULL);
+       if (ow > w) evas_object_size_hint_min_set(pd->btn_pid, w, 1);
+     }
+   rec = evas_object_data_get(lb, "rec");
+   evas_object_size_hint_min_set(rec, w, 1);
+   evas_object_show(lb);
 
    evas_object_geometry_get(pd->btn_uid, NULL, NULL, &w, NULL);
    w += PAD_W;
-   l = evas_object_data_get(it->obj, "proc_uid");
+   lb = evas_object_data_get(it->obj, "proc_uid");
    pwd_entry = getpwuid(proc->uid);
    if (pwd_entry)
      snprintf(buf, sizeof(buf), "%s", pwd_entry->pw_name);
    else
      snprintf(buf, sizeof(buf), "%i", proc->uid);
-   elm_object_text_set(l, buf);
-   evas_object_geometry_get(l, NULL, NULL, &ow, NULL);
-   if (ow > w) evas_object_size_hint_min_set(pd->btn_uid, w, 1);
-   r = evas_object_data_get(l, "rec");
-   evas_object_size_hint_min_set(r, w, 1);
-   evas_object_show(l);
+   if (strcmp(buf, elm_object_text_get(lb)))
+     {
+        elm_object_text_set(lb, buf);
+        evas_object_geometry_get(lb, NULL, NULL, &ow, NULL);
+        if (ow > w) evas_object_size_hint_min_set(pd->btn_uid, w, 1);
+     }
+   rec = evas_object_data_get(lb, "rec");
+   evas_object_size_hint_min_set(rec, w, 1);
+   evas_object_show(lb);
 
    evas_object_geometry_get(pd->btn_size, NULL, NULL, &w, NULL);
    w += PAD_W;
-   l = evas_object_data_get(it->obj, "proc_size");
+   lb = evas_object_data_get(it->obj, "proc_size");
    snprintf(buf, sizeof(buf), "%s", evisum_size_format(proc->mem_size));
-   elm_object_text_set(l, buf);
-   evas_object_geometry_get(l, NULL, NULL, &ow, NULL);
-   if (ow > w) evas_object_size_hint_min_set(pd->btn_size, w, 1);
-   r = evas_object_data_get(l, "rec");
-   evas_object_size_hint_min_set(r, w, 1);
-   evas_object_show(l);
+   if (strcmp(buf, elm_object_text_get(lb)))
+     {
+        elm_object_text_set(lb, buf);
+        evas_object_geometry_get(lb, NULL, NULL, &ow, NULL);
+        if (ow > w) evas_object_size_hint_min_set(pd->btn_size, w, 1);
+     }
+   rec = evas_object_data_get(lb, "rec");
+   evas_object_size_hint_min_set(rec, w, 1);
+   evas_object_show(lb);
 
    evas_object_geometry_get(pd->btn_rss, NULL, NULL, &w, NULL);
    w += PAD_W;
-   l = evas_object_data_get(it->obj, "proc_rss");
+   lb = evas_object_data_get(it->obj, "proc_rss");
    snprintf(buf, sizeof(buf), "%s", evisum_size_format(proc->mem_rss));
-   elm_object_text_set(l, buf);
-   evas_object_geometry_get(l, NULL, NULL, &ow, NULL);
-   if (ow > w) evas_object_size_hint_min_set(pd->btn_rss, w, 1);
-   r = evas_object_data_get(l, "rec");
-   evas_object_size_hint_min_set(r, w, 1);
-   evas_object_show(l);
+   if (strcmp(buf, elm_object_text_get(lb)))
+     {
+        elm_object_text_set(lb, buf);
+        evas_object_geometry_get(lb, NULL, NULL, &ow, NULL);
+        if (ow > w) evas_object_size_hint_min_set(pd->btn_rss, w, 1);
+      }
+   rec = evas_object_data_get(lb, "rec");
+   evas_object_size_hint_min_set(rec, w, 1);
+   evas_object_show(lb);
 
    evas_object_geometry_get(pd->btn_menu, NULL, NULL, &ow, NULL);
    evas_object_geometry_get(pd->btn_cmd, NULL, NULL, &w, NULL);
    w += ow;
-   l = evas_object_data_get(it->obj, "proc_cmd");
+   lb = evas_object_data_get(it->obj, "proc_cmd");
    snprintf(buf, sizeof(buf), "%s", proc->command);
-   elm_object_text_set(l, buf);
-   hbx = evas_object_data_get(l, "hbx");
+   if (strcmp(buf, elm_object_text_get(lb)))
+     elm_object_text_set(lb, buf);
+   hbx = evas_object_data_get(lb, "hbx");
    evas_object_geometry_get(hbx, NULL, NULL, &ow, NULL);
    if (ow > w) evas_object_size_hint_min_set(pd->btn_cmd, w, 1);
-   r = evas_object_data_get(l, "rec");
-   evas_object_size_hint_min_set(r, w, 1);
-   evas_object_show(l);
+   rec = evas_object_data_get(lb, "rec");
+   evas_object_size_hint_min_set(rec, w, 1);
+   evas_object_show(lb);
 
    o = evas_object_data_get(it->obj, "icon");
-   elm_icon_standard_set(o, 
evisum_icon_path_get(evisum_icon_cache_find(proc)));
-   r = evas_object_data_get(o, "rec");
-   evas_object_size_hint_min_set(r, w, 1);
+   const char *new = evisum_icon_path_get(evisum_icon_cache_find(proc));
+   const char *old = NULL;
+   elm_image_file_get(o, &old, NULL);
+   if (!old || strcmp(old, new))
+     elm_icon_standard_set(o, new);
+   rec = evas_object_data_get(o, "rec");
+   evas_object_size_hint_min_set(rec, w, 1);
    evas_object_show(o);
 
    evas_object_geometry_get(pd->btn_state, NULL, NULL, &w, NULL);
-   l = evas_object_data_get(it->obj, "proc_state");
+   lb = evas_object_data_get(it->obj, "proc_state");
    snprintf(buf, sizeof(buf), "%s", proc->state);
-
-   elm_object_text_set(l, buf);
-   evas_object_geometry_get(l, NULL, NULL, &ow, NULL);
-   r = evas_object_data_get(l, "rec");
-   evas_object_size_hint_min_set(r, w, 1);
-   evas_object_show(l);
+   if (strcmp(buf, elm_object_text_get(lb)))
+     elm_object_text_set(lb, buf);
+   rec = evas_object_data_get(lb, "rec");
+   evas_object_size_hint_min_set(rec, w, 1);
+   evas_object_show(lb);
 
    pb = evas_object_data_get(it->obj, "proc_cpu_usage");
    _cpu_usage = proc->cpu_usage;
@@ -449,8 +465,6 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
    if (!EINA_DBL_EQ(value, last))
      elm_progressbar_value_set(pb, proc->cpu_usage / 100.0);
    evas_object_show(pb);
-
-   evas_object_show(it->obj);
    // Let the genlist resize but align the text.
    elm_table_align_set(it->obj, 0, 0.5);
 

-- 


Reply via email to