From 6f441d94a98e3896ca9ab5df3c5109acbfa310da Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Sun, 25 Mar 2007 13:43:52 +0000 Subject: [PATCH] Search in desktop cache. SVN revision: 29117 --- legacy/efreet/src/bin/ef_cache.c | 18 ++++++++ legacy/efreet/src/lib/efreet_utils.c | 65 +++++++++++++++++++++++++++- legacy/efreet/src/lib/efreet_utils.h | 4 ++ 3 files changed, 86 insertions(+), 1 deletion(-) diff --git a/legacy/efreet/src/bin/ef_cache.c b/legacy/efreet/src/bin/ef_cache.c index e1fb414b41..dac0d6c798 100644 --- a/legacy/efreet/src/bin/ef_cache.c +++ b/legacy/efreet/src/bin/ef_cache.c @@ -1,9 +1,27 @@ #include "Efreet.h" +#include + +static int +timer(void *data) +{ + Efreet_Desktop *desktop; + double start; + + start = ecore_time_get(); + desktop = efreet_util_desktop_name_find("Mozilla Firefox"); + printf("Mozilla Firefox: %p %.3f\n", desktop, (ecore_time_get() - start)); + start = ecore_time_get(); + desktop = efreet_util_desktop_generic_name_find("Mail/News"); + printf("Mail/News: %p %.3f\n", desktop, (ecore_time_get() - start)); + + return 0; +} int main(int argc, char **argv) { if (!efreet_init()) return 1; + ecore_timer_add(1.0, timer, NULL); ecore_main_loop_begin(); efreet_shutdown(); return 0; diff --git a/legacy/efreet/src/lib/efreet_utils.c b/legacy/efreet/src/lib/efreet_utils.c index f494db5182..fa1cbd3f67 100644 --- a/legacy/efreet/src/lib/efreet_utils.c +++ b/legacy/efreet/src/lib/efreet_utils.c @@ -4,6 +4,7 @@ typedef struct _Efreet_Cache_Fill Efreet_Cache_Fill; typedef struct _Efreet_Cache_Fill_Dir Efreet_Cache_Fill_Dir; +typedef struct _Efreet_Cache_Search Efreet_Cache_Search; struct _Efreet_Cache_Fill { @@ -18,8 +19,16 @@ struct _Efreet_Cache_Fill_Dir char *file_id; }; +struct _Efreet_Cache_Search +{ + Efreet_Desktop *desktop; + const char *what; +}; + static int _efreet_util_cache_fill(void *data); static void _efreet_util_cache_dir_free(void *data); +static void _efreet_util_cache_search_name(void *value, void *data); +static void _efreet_util_cache_search_generic_name(void *value, void *data); static Ecore_Hash *desktop_by_file_id = NULL; static Ecore_Hash *desktop_by_exec = NULL; @@ -205,7 +214,31 @@ efreet_util_desktop_exec_find(const char *exec) * timeconsuming.*/ if (desktop) ecore_hash_set(desktop_by_exec, (void *)ecore_string_instance(exec), desktop); - return NULL; + return desktop; +} + +Efreet_Desktop * +efreet_util_desktop_name_find(const char *name) +{ + Efreet_Cache_Search search; + + if (!name) return NULL; + search.desktop = NULL; + search.what = name; + ecore_hash_for_each_node(desktop_by_exec, _efreet_util_cache_search_name, &search); + return search.desktop; +} + +Efreet_Desktop * +efreet_util_desktop_generic_name_find(const char *generic_name) +{ + Efreet_Cache_Search search; + + if (!generic_name) return NULL; + search.desktop = NULL; + search.what = generic_name; + ecore_hash_for_each_node(desktop_by_exec, _efreet_util_cache_search_generic_name, &search); + return search.desktop; } #if 0 @@ -330,3 +363,33 @@ _efreet_util_cache_dir_free(void *data) IF_FREE(dir->file_id); free(dir); } + +static void +_efreet_util_cache_search_name(void *value, void *data) +{ + Ecore_Hash_Node *node; + Efreet_Cache_Search *search; + Efreet_Desktop *desktop; + + node = value; + search = data; + + desktop = node->value; + if (!desktop->name) return; + if (!strcmp(desktop->name, search->what)) search->desktop = desktop; +} + +static void +_efreet_util_cache_search_generic_name(void *value, void *data) +{ + Ecore_Hash_Node *node; + Efreet_Cache_Search *search; + Efreet_Desktop *desktop; + + node = value; + search = data; + + desktop = node->value; + if (!desktop->generic_name) return; + if (!strcmp(desktop->generic_name, search->what)) search->desktop = desktop; +} diff --git a/legacy/efreet/src/lib/efreet_utils.h b/legacy/efreet/src/lib/efreet_utils.h index 00587b8c2b..1e979e4633 100644 --- a/legacy/efreet/src/lib/efreet_utils.h +++ b/legacy/efreet/src/lib/efreet_utils.h @@ -4,7 +4,11 @@ char *efreet_util_path_in_default(const char *section, const char *path); const char *efreet_util_path_to_file_id(const char *path); + Efreet_Desktop *efreet_util_desktop_file_id_find(const char *file_id); Efreet_Desktop *efreet_util_desktop_exec_find(const char *exec); +Efreet_Desktop *efreet_util_desktop_name_find(const char *name); +Efreet_Desktop *efreet_util_desktop_generic_name_find(const char *generic_name); + #endif