netstar pushed a commit to branch master.

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

commit 50bd9f0ab1913717e851360895fcfdf73dd94adc
Author: Alastair Poole <nets...@gmail.com>
Date:   Thu Oct 29 13:26:31 2020 +0000

    icon_cache: genericise it.
    
    Reuse...
---
 src/bin/ui/ui.c              | 73 ++++++++++++--------------------------------
 src/bin/ui/ui.h              |  4 ++-
 src/bin/ui/ui_process_view.c | 12 +-------
 src/bin/ui/ui_util.c         | 49 +++++++++++++++++++++++++++++
 src/bin/ui/ui_util.h         |  9 +++++-
 5 files changed, 80 insertions(+), 67 deletions(-)

diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c
index ba9c89c..85948ec 100644
--- a/src/bin/ui/ui.c
+++ b/src/bin/ui/ui.c
@@ -349,41 +349,6 @@ _item_unrealized_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
      }
 }
 
-static void
-_icon_cache_free_cb(void *data)
-{
-   char *ic_name = data;
-
-   free(ic_name);
-}
-
-static const char *
-_icon_cache_find(Ui *ui, const char *cmd)
-{
-   Efreet_Desktop *e;
-   const char *name;
-   char *exists;
-
-   exists = eina_hash_find(ui->icon_cache, cmd);
-   if (exists) return exists;
-
-   if (!strncmp(cmd, "enlightenment", 13)) return "e";
-
-   e = efreet_util_desktop_exec_find(cmd);
-   if (!e)
-     return "application";
-
-   if (e->icon)
-     name = e->icon;
-   else
-     name = cmd;
-
-   eina_hash_add(ui->icon_cache, cmd, strdup(name));
-
-   efreet_desktop_free(e);
-
-   return name;
-}
 
 static void
 _item_del(void *data, Evas_Object *obj EINA_UNUSED)
@@ -516,7 +481,7 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
    l = evas_object_data_get(it->obj, "proc_uid");
    pwd_entry = getpwuid(proc->uid);
    if (pwd_entry)
-     elm_object_text_set(l, eina_slstr_printf("<color=#fff>%s%s</>", TEXT_PAD, 
pwd_entry->pw_name));
+     elm_object_text_set(l, eina_slstr_printf("<color=#fff>%s</>", 
pwd_entry->pw_name));
    else
      elm_object_text_set(l, eina_slstr_printf("<color=#fff>%d</>", proc->uid));
    evas_object_geometry_get(l, NULL, NULL, &ow, NULL);
@@ -545,7 +510,7 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
 
    evas_object_geometry_get(ui->btn_cmd, NULL, NULL, &w, NULL);
    l = evas_object_data_get(it->obj, "proc_cmd");
-   elm_object_text_set(l, eina_slstr_printf("<color=#fff>%s%s</>", TEXT_PAD, 
proc->command));
+   elm_object_text_set(l, eina_slstr_printf("<color=#fff>%s</>", 
proc->command));
    hbx = evas_object_data_get(l, "hbox");
    evas_object_geometry_get(hbx, NULL, NULL, &ow, NULL);
    if (ow > w) evas_object_size_hint_min_set(ui->btn_cmd, w, 1);
@@ -554,7 +519,7 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
    evas_object_show(l);
 
    o = evas_object_data_get(it->obj, "icon");
-   elm_icon_standard_set(o, evisum_icon_path_get(_icon_cache_find(ui, 
proc->command)));
+   elm_icon_standard_set(o, 
evisum_icon_path_get(evisum_icon_cache_find(proc->command)));
    r = evas_object_data_get(o, "rect");
    evas_object_size_hint_min_set(r, w, 1);
    evas_object_show(o);
@@ -1082,7 +1047,8 @@ _item_menu_create(Ui *ui, Proc_Info *proc)
 
    stopped = !(!strcmp(proc->state, "stop"));
 
-   menu_it = elm_menu_item_add(menu, NULL, 
evisum_icon_path_get(_icon_cache_find(ui, proc->command)),
+   menu_it = elm_menu_item_add(menu, NULL,
+                               
evisum_icon_path_get(evisum_icon_cache_find(proc->command)),
                                proc->command, NULL, NULL);
 
    menu_it2 = elm_menu_item_add(menu, menu_it, evisum_icon_path_get("window"),
@@ -1796,16 +1762,6 @@ evisum_ui_can_exit(Ui *ui)
    return 0;
 }
 
-void
-evisum_ui_del(Ui *ui)
-{
-   _proc_pid_cpu_times_free(ui);
-
-   eina_lock_free(&_lock);
-
-   free(ui);
-}
-
 static void
 _system_info_all_poll(void *data, Ecore_Thread *thread)
 {
@@ -1924,9 +1880,6 @@ _win_del_cb(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED,
    if (ui->cache)
      evisum_ui_item_cache_free(ui->cache);
 
-   if (ui->icon_cache)
-     eina_hash_free(ui->icon_cache);
-
    if (evisum_ui_can_exit(ui))
      ecore_main_loop_quit();
 }
@@ -1974,8 +1927,6 @@ ui_main_win_add(Ui *ui)
 
    ui->cache = evisum_ui_item_cache_new(ui->genlist_procs, _item_create, 50);
 
-   ui->icon_cache = eina_hash_string_superfast_new(_icon_cache_free_cb);
-
    ui->thread_system =
       ecore_thread_feedback_run(_system_info_all_poll,
                                 _system_info_all_poll_feedback_cb,
@@ -2036,6 +1987,18 @@ evisum_ui_activate(Ui *ui, Evisum_Action action, int pid)
      }
 }
 
+void
+evisum_ui_del(Ui *ui)
+{
+   _proc_pid_cpu_times_free(ui);
+
+   evisum_icon_cache_shutdown();
+
+   eina_lock_free(&_lock);
+
+   free(ui);
+}
+
 static Ui *
 _ui_init(void)
 {
@@ -2050,6 +2013,8 @@ _ui_init(void)
    ui->cpu_times = NULL;
    ui->cpu_list = NULL;
 
+   evisum_icon_cache_init();
+
    _ui_init_system_probe(ui);
 
    _ui = NULL;
diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h
index f56570f..50ea366 100644
--- a/src/bin/ui/ui.h
+++ b/src/bin/ui/ui.h
@@ -54,7 +54,6 @@ typedef struct Ui
    Evas_Object     *btn_cpu_usage;
 
    Evisum_Ui_Cache *cache;
-   Eina_Hash       *icon_cache;
    Evas_Object     *genlist_procs;
    Evas_Object     *entry_search;
 
@@ -131,6 +130,9 @@ evisum_ui_can_exit(Ui *ui);
 void
 evisum_ui_activate(Ui *ui, Evisum_Action action, int pid);
 
+const char *
+evisum_ui_icon_cache_find(Ui *ui, const char *cmd);
+
 void
 evisum_restart(void);
 
diff --git a/src/bin/ui/ui_process_view.c b/src/bin/ui/ui_process_view.c
index b9dda62..366ffbf 100644
--- a/src/bin/ui/ui_process_view.c
+++ b/src/bin/ui/ui_process_view.c
@@ -395,17 +395,7 @@ _tree_icon_get(void *data, Evas_Object *obj, const char 
*part)
 
    if (!strcmp(part, "elm.swallow.icon"))
      {
-        Efreet_Desktop *e = efreet_util_desktop_exec_find(proc->command);
-        if (!e)
-          elm_icon_standard_set(ic, evisum_icon_path_get("application"));
-        else
-          {
-             if (e->icon)
-               elm_icon_standard_set(ic, e->icon);
-             else
-               elm_icon_standard_set(ic, proc->command);
-             efreet_desktop_free(e);
-          }
+        elm_icon_standard_set(ic, 
evisum_icon_path_get(evisum_icon_cache_find(proc->command)));
      }
 
    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
diff --git a/src/bin/ui/ui_util.c b/src/bin/ui/ui_util.c
index ebaea82..575e29a 100644
--- a/src/bin/ui/ui_util.c
+++ b/src/bin/ui/ui_util.c
@@ -7,6 +7,7 @@
 
 static Eina_Bool _effects_enabled = EINA_FALSE;
 static Eina_Bool _backgrounds_enabled = EINA_FALSE;
+static Eina_Hash *_icon_cache = NULL;
 
 Evas_Object *
 evisum_ui_tab_add(Evas_Object *parent, Evas_Object **alias, const char *text,
@@ -149,6 +150,54 @@ _path_append(const char *path, const char *file)
    return concat;
 }
 
+void
+_icon_cache_free_cb(void *data)
+{
+   char *ic_name = data;
+
+   free(ic_name);
+}
+
+void
+evisum_icon_cache_init(void)
+{
+   _icon_cache = eina_hash_string_superfast_new(_icon_cache_free_cb);
+}
+
+void
+evisum_icon_cache_shutdown(void)
+{
+   eina_hash_free(_icon_cache);
+}
+
+const char *
+evisum_icon_cache_find(const char *cmd)
+{
+   Efreet_Desktop *e;
+   const char *name;
+   char *exists;
+
+   exists = eina_hash_find(_icon_cache, cmd);
+   if (exists) return exists;
+
+   if (!strncmp(cmd, "enlightenment", 13)) return "e";
+
+   e = efreet_util_desktop_exec_find(cmd);
+   if (!e)
+     return "application";
+
+   if (e->icon)
+     name = e->icon;
+   else
+     name = cmd;
+
+   eina_hash_add(_icon_cache, cmd, strdup(name));
+
+   efreet_desktop_free(e);
+
+   return name;
+}
+
 const char *
 evisum_icon_path_get(const char *name)
 {
diff --git a/src/bin/ui/ui_util.h b/src/bin/ui/ui_util.h
index fca3798..7fc4d3a 100644
--- a/src/bin/ui/ui_util.h
+++ b/src/bin/ui/ui_util.h
@@ -16,7 +16,14 @@
 #define MISC_MAX_WIDTH      350
 #define MISC_MIN_WIDTH      340
 
-#define TEXT_PAD "   "
+void
+evisum_icon_cache_init(void);
+
+void
+evisum_icon_cache_shutdown(void);
+
+const char *
+evisum_icon_cache_find(const char *cmd);
 
 Evas_Object *
 evisum_ui_tab_add(Evas_Object *parent, Evas_Object **alias, const char *text,

-- 


Reply via email to