From 4fcc8392fcd9c84de0cae0d66f47810802d6d629 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Sun, 22 May 2005 17:35:16 +0000 Subject: [PATCH] - add the ability to get the theme directory list from libe SVN revision: 14905 --- src/lib/E.h | 11 +++++++++- src/lib/e_main.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/lib/E.h b/src/lib/E.h index 2de695563..a774fe95d 100644 --- a/src/lib/E.h +++ b/src/lib/E.h @@ -23,6 +23,7 @@ typedef struct _E_Response_Module_Data E_Response_Module_Data; typedef struct _E_Response_Module_Dirs_List E_Response_Module_Dirs_List; typedef struct _E_Response_Background_Get E_Response_Background_Get; typedef struct _E_Response_Background_Dirs_List E_Response_Background_Dirs_List; +typedef struct _E_Response_Theme_Dirs_List E_Response_Theme_Dirs_List; struct _E_Response_Module_List { @@ -53,10 +54,17 @@ struct _E_Response_Background_Dirs_List int count; }; +struct _E_Response_Theme_Dirs_List +{ + char **dirs; + int count; +}; + extern EAPI int E_RESPONSE_MODULE_LIST; extern EAPI int E_RESPONSE_BACKGROUND_GET; extern EAPI int E_RESPONSE_MODULE_DIRS_LIST; extern EAPI int E_RESPONSE_BACKGROUND_DIRS_LIST; +extern EAPI int E_RESPONSE_THEME_DIRS_LIST; #ifdef __cplusplus extern "C" { @@ -78,10 +86,11 @@ extern "C" { /* E desktop manipulation */ EAPI void e_background_set (const char *bgfile); EAPI void e_background_get (void); - + /* E path information */ EAPI void e_module_dirs_list (void); EAPI void e_background_dirs_list (void); + EAPI void e_theme_dirs_list (void); #ifdef __cplusplus } diff --git a/src/lib/e_main.c b/src/lib/e_main.c index abe3d7860..696aba188 100644 --- a/src/lib/e_main.c +++ b/src/lib/e_main.c @@ -28,6 +28,7 @@ static int _e_cb_server_data(void *data, int type, void *event); static void _e_cb_module_list_free(void *data, void *ev); static void _e_cb_module_dir_list_free(void *data, void *ev); static void _e_cb_bg_dir_list_free(void *data, void *ev); +static void _e_cb_theme_dir_list_free(void *data __UNUSED__, void *ev); static Ecore_Ipc_Server *_e_ipc_server = NULL; @@ -35,6 +36,7 @@ int E_RESPONSE_MODULE_LIST = 0; int E_RESPONSE_MODULE_DIRS_LIST = 0; int E_RESPONSE_BACKGROUND_GET = 0; int E_RESPONSE_BACKGROUND_DIRS_LIST = 0; +int E_RESPONSE_THEME_DIRS_LIST = 0; /* * initialise connection to the current E running on "display". @@ -110,6 +112,7 @@ e_init(const char* display) E_RESPONSE_MODULE_DIRS_LIST = ecore_event_type_new(); E_RESPONSE_BACKGROUND_GET = ecore_event_type_new(); E_RESPONSE_BACKGROUND_DIRS_LIST = ecore_event_type_new(); + E_RESPONSE_THEME_DIRS_LIST = ecore_event_type_new(); } if (free_disp) @@ -226,6 +229,14 @@ e_background_dirs_list(void) 0/*ref_to*/, 0/*response*/, NULL, 0); } +void +e_theme_dirs_list(void) +{ + ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST, + E_IPC_OP_THEME_DIRS_LIST, 0/*ref*/, + 0/*ref_to*/, 0/*response*/, NULL, 0); +} + static int _e_ipc_init(const char *display) { @@ -380,6 +391,37 @@ _e_cb_server_data(void *data __UNUSED__, int type, void *event) _e_cb_bg_dir_list_free, NULL); } break; + case E_IPC_OP_THEME_DIRS_LIST_REPLY: + if (e->data) + { + E_Response_Theme_Dirs_List *res; + char *p; + int count = 0; + + res = calloc(1, sizeof(E_Response_Theme_Dirs_List)); + + p = e->data; + while (p < (char *)(e->data + e->size)) + { + p += strlen(p) + 1; + count ++; + } + + res->dirs = malloc(sizeof(char *) * count); + res->count = count; + + count = 0; + p = e->data; + while (p < (char *)(e->data + e->size)) + { + res->dirs[count] = p; + p += strlen(res->dirs[count]) + 1; + count++; + } + ecore_event_add(E_RESPONSE_THEME_DIRS_LIST, res, + _e_cb_theme_dir_list_free, NULL); + } + break; default: break; } @@ -420,4 +462,14 @@ _e_cb_bg_dir_list_free(void *data __UNUSED__, void *ev) free(e); } +static void +_e_cb_theme_dir_list_free(void *data __UNUSED__, void *ev) +{ + E_Response_Theme_Dirs_List *e; + + e = ev; + free(e->dirs); + free(e); +} +