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("%s%s", TEXT_PAD, pwd_entry->pw_name)); + elm_object_text_set(l, eina_slstr_printf("%s", pwd_entry->pw_name)); else elm_object_text_set(l, eina_slstr_printf("%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("%s%s", TEXT_PAD, proc->command)); + elm_object_text_set(l, eina_slstr_printf("%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,