netstar pushed a commit to branch master.

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

commit 7bbb821d711c376ed0b27cfc65c148e9cc9fdcbb
Author: Alastair Poole <nets...@gmail.com>
Date:   Sun May 9 12:54:19 2021 +0100

    icon_cache: openbsd changes.
    
    Same arch different processor different results, something is
    getting clobbered, but not by us.
    
    This is ok.
---
 src/bin/ui/evisum_ui.c       |  3 ---
 src/bin/ui/ui_process_list.c |  7 +++++--
 src/bin/ui/ui_process_view.c | 14 +++++++++++---
 src/bin/ui/ui_util.c         | 26 ++++++++++++--------------
 src/bin/ui/ui_util.h         |  8 ++++----
 5 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/src/bin/ui/evisum_ui.c b/src/bin/ui/evisum_ui.c
index 25a45c9..b0b6d41 100644
--- a/src/bin/ui/evisum_ui.c
+++ b/src/bin/ui/evisum_ui.c
@@ -738,7 +738,6 @@ evisum_ui_activate(Evisum_Ui *ui, Evisum_Action action, int 
pid)
 void
 evisum_ui_shutdown(Evisum_Ui *ui)
 {
-   evisum_icon_cache_shutdown();
    evisum_ui_config_save(ui);
 
    ecore_thread_cancel(ui->background_poll_thread);
@@ -763,8 +762,6 @@ evisum_ui_init(void)
 
    evisum_ui_config_load(ui);
 
-   evisum_icon_cache_init();
-
    _ui_init_system_probe(ui);
 
    return ui;
diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c
index 88fd201..712fdf9 100644
--- a/src/bin/ui/ui_process_list.c
+++ b/src/bin/ui/ui_process_list.c
@@ -27,6 +27,7 @@ typedef struct
 {
    Ecore_Thread          *thread;
    Evisum_Ui_Cache       *cache;
+   Eina_Hash             *icon_cache;
    Ecore_Event_Handler   *handler;
    Eina_Hash             *cpu_times;
    Eina_Bool              skip_wait;
@@ -742,7 +743,7 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
    evas_object_size_hint_min_set(rec, w, 1);
    evas_object_show(lb);
 
-   const char *new = evisum_icon_path_get(evisum_icon_cache_find(proc));
+   const char *new = 
evisum_icon_path_get(evisum_icon_cache_find(wd->icon_cache, proc));
    const char *old = NULL;
    o = evas_object_data_get(it->obj, "icon");
    elm_image_file_get(o, &old, NULL);
@@ -1547,7 +1548,7 @@ _item_menu_create(Win_Data *wd, Proc_Info *proc)
    stopped = !(!strcmp(proc->state, "stop"));
 
    menu_it = elm_menu_item_add(menu, NULL,
-                               
evisum_icon_path_get(evisum_icon_cache_find(proc)),
+                               
evisum_icon_path_get(evisum_icon_cache_find(wd->icon_cache, proc)),
                                proc->command, NULL, NULL);
 
    menu_it2 = elm_menu_item_add(menu, menu_it, evisum_icon_path_get("actions"),
@@ -2340,6 +2341,7 @@ _win_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
      ecore_thread_wait(wd->thread, 0.5);
 
    ecore_event_handler_del(wd->handler);
+   evisum_icon_cache_del(wd->icon_cache);
 
    wd->thread = NULL;
    ui->proc.win = NULL;
@@ -2447,6 +2449,7 @@ ui_process_list_win_add(Evisum_Ui *ui)
    elm_object_content_set(win, tb);
 
    wd->cache = evisum_ui_item_cache_new(wd->glist, _item_create, 30);
+   wd->icon_cache = evisum_icon_cache_new();
    wd->cpu_times = eina_hash_int64_new(_cpu_times_free_cb);
 
    evas_object_event_callback_add(win, EVAS_CALLBACK_DEL,
diff --git a/src/bin/ui/ui_process_view.c b/src/bin/ui/ui_process_view.c
index 87476e8..b248276 100644
--- a/src/bin/ui/ui_process_view.c
+++ b/src/bin/ui/ui_process_view.c
@@ -31,6 +31,8 @@ typedef struct
 
    Eina_Bool        kthreads_has_rss;
 
+   Eina_Hash       *icon_cache;
+
    struct
    {
       Evas_Object   *entry_cmd;
@@ -570,14 +572,17 @@ static Evas_Object *
 _children_icon_get(void *data, Evas_Object *obj, const char *part)
 {
    Proc_Info *proc;
+   Win_Data *wd;
    Evas_Object *ic = elm_icon_add(obj);
+
    proc = data;
+   wd = evas_object_data_get(obj, "windata");
 
    if (!strcmp(part, "elm.swallow.icon"))
      {
         elm_icon_standard_set(ic,
                               evisum_icon_path_get(
-                              evisum_icon_cache_find(proc)));
+                              evisum_icon_cache_find(wd->icon_cache, proc)));
      }
 
    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
@@ -1158,7 +1163,7 @@ _general_tab_add(Evas_Object *parent, Win_Data *wd)
         evas_object_size_hint_align_set(ic, FILL, FILL);
         elm_icon_standard_set(ic,
                               evisum_icon_path_get(
-                              evisum_icon_cache_find(proc)));
+                              evisum_icon_cache_find(wd->icon_cache, proc)));
         evas_object_show(ic);
         proc_info_free(proc);
         elm_table_pack(tb, ic, 0, i, 1, 1);
@@ -1514,7 +1519,7 @@ _children_tab_add(Evas_Object *parent, Win_Data *wd)
    elm_object_content_set(fr, bx);
 
    wd->children.glist = glist = elm_genlist_add(parent);
-   evas_object_data_set(glist, "ui", wd);
+   evas_object_data_set(glist, "windata", wd);
    elm_object_focus_allow_set(glist, 1);
    elm_genlist_homogeneous_set(glist, 1);
    elm_genlist_select_mode_set(glist, ELM_OBJECT_SELECT_MODE_DEFAULT);
@@ -1729,6 +1734,8 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
    if (wd->threads.cache)
      evisum_ui_item_cache_free(wd->threads.cache);
 
+   evisum_icon_cache_del(wd->icon_cache);
+
    evas_object_del(win);
 
    free(wd);
@@ -1795,6 +1802,7 @@ ui_process_view_win_add(int pid, Evisum_Proc_Action 
action)
    wd->threads.cache = NULL;
    wd->threads.sort_reverse = 1;
    wd->threads.sort_cb = _sort_by_cpu_usage;
+   wd->icon_cache = evisum_icon_cache_new();
 
    proc = proc_info_by_pid(pid);
    if (!proc)
diff --git a/src/bin/ui/ui_util.c b/src/bin/ui/ui_util.c
index ce7aa25..b632846 100644
--- a/src/bin/ui/ui_util.c
+++ b/src/bin/ui/ui_util.c
@@ -5,11 +5,6 @@
 
 #define ARRAY_SIZE(n) sizeof(n) / sizeof(n[0])
 
-#if !defined(__OpenBSD__)
-static
-#endif
-Eina_Hash *_icon_cache;
-
 Evas_Object *
 evisum_ui_tab_add(Evas_Object *parent, Evas_Object **alias, const char *text,
                   Evas_Smart_Cb clicked_cb, void *data)
@@ -158,21 +153,24 @@ _icon_cache_free_cb(void *data)
    free(ic_name);
 }
 
-void
-evisum_icon_cache_init(void)
+Eina_Hash *
+evisum_icon_cache_new(void)
 {
-   _icon_cache = NULL;
-   _icon_cache = eina_hash_string_superfast_new(_icon_cache_free_cb);
+   Eina_Hash *icon_cache;
+
+   icon_cache = eina_hash_string_superfast_new(_icon_cache_free_cb);
+
+   return icon_cache;
 }
 
 void
-evisum_icon_cache_shutdown(void)
+evisum_icon_cache_del(Eina_Hash *icon_cache)
 {
-   eina_hash_free(_icon_cache);
+   eina_hash_free(icon_cache);
 }
 
 const char *
-evisum_icon_cache_find(const Proc_Info *proc)
+evisum_icon_cache_find(Eina_Hash *icon_cache, const Proc_Info *proc)
 {
    Efreet_Desktop *e;
    const char *name, *cmd;
@@ -187,7 +185,7 @@ evisum_icon_cache_find(const Proc_Info *proc)
 
    cmd = proc->command;
 
-   exists = eina_hash_find(_icon_cache, cmd);
+   exists = eina_hash_find(icon_cache, cmd);
    if (exists) return exists;
 
    if (!strncmp(cmd, "enlightenment", 13)) return "e";
@@ -201,7 +199,7 @@ evisum_icon_cache_find(const Proc_Info *proc)
    else
      name = cmd;
 
-   eina_hash_add(_icon_cache, cmd, strdup(name));
+   eina_hash_add(icon_cache, cmd, strdup(name));
 
    efreet_desktop_free(e);
 
diff --git a/src/bin/ui/ui_util.h b/src/bin/ui/ui_util.h
index 1eddf38..4d6df31 100644
--- a/src/bin/ui/ui_util.h
+++ b/src/bin/ui/ui_util.h
@@ -16,14 +16,14 @@
 #define UI_CHILD_WIN_WIDTH  360
 #define UI_CHILD_WIN_HEIGHT 360
 
-void
-evisum_icon_cache_init(void);
+Eina_Hash *
+evisum_icon_cache_new(void);
 
 void
-evisum_icon_cache_shutdown(void);
+evisum_icon_cache_del(Eina_Hash *icon_cache);
 
 const char *
-evisum_icon_cache_find(const Proc_Info *proc);
+evisum_icon_cache_find(Eina_Hash *icon_cache, const Proc_Info *proc);
 
 Evas_Object *
 evisum_ui_tab_add(Evas_Object *parent, Evas_Object **alias, const char *text,

-- 


Reply via email to