From 47edbfedb027c33b074cad46332f13004a32d694 Mon Sep 17 00:00:00 2001 From: handyande Date: Sat, 8 Jan 2005 01:44:36 +0000 Subject: [PATCH] OK, added callbacks, hope it is OK, can be tweaked ;) This allows module_list : added background_get for Codeworrior :) SVN revision: 12818 --- src/bin/e_ipc.c | 14 +++++++++ src/bin/e_ipc.h | 2 ++ src/lib/E.h | 17 ++++++++-- src/lib/e_main.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 110 insertions(+), 5 deletions(-) diff --git a/src/bin/e_ipc.c b/src/bin/e_ipc.c index e42737145..8577386b8 100644 --- a/src/bin/e_ipc.c +++ b/src/bin/e_ipc.c @@ -199,6 +199,20 @@ _e_ipc_cb_client_data(void *data, int type, void *event) } e_config_save_queue(); } + break; + case E_IPC_OP_BG_GET: + { + char *bg; + bg = e_config->desktop_default_background; + if (!bg) + bg = ""; + ecore_ipc_client_send(e->client, + E_IPC_DOMAIN_REPLY, + E_IPC_OP_BG_GET_REPLY, + 0/*ref*/, 0/*ref_to*/, 0/*response*/, + bg, strlen(bg)); + } + break; default: break; } diff --git a/src/bin/e_ipc.h b/src/bin/e_ipc.h index 384bd2527..0e4fbd54f 100644 --- a/src/bin/e_ipc.h +++ b/src/bin/e_ipc.h @@ -19,6 +19,8 @@ typedef enum _E_Ipc_Op { E_IPC_OP_MODULE_LIST, E_IPC_OP_MODULE_LIST_REPLY, E_IPC_OP_BG_SET, + E_IPC_OP_BG_GET, + E_IPC_OP_BG_GET_REPLY, E_IPC_OP_LAST } E_Ipc_Op; diff --git a/src/lib/E.h b/src/lib/E.h index ba99a10b0..b758ade44 100644 --- a/src/lib/E.h +++ b/src/lib/E.h @@ -19,11 +19,22 @@ # endif #endif +extern EAPI int E_RESPONSE_MODULE_LIST; +extern EAPI int E_RESPONSE_BACKGROUND_GET; +typedef struct _E_Response_Module_List E_Response_Module_List; +typedef struct _E_Response_Background_Get E_Response_Background_Get; +struct _E_Response_Module_List +{ + char *name; + char enabled; +}; - - +struct _E_Response_Background_Get +{ + char *data; +}; #ifdef __cplusplus @@ -38,7 +49,9 @@ extern "C" { int enable); EAPI void e_module_loaded_set (const char *module, int load); + EAPI void e_module_list (void); EAPI void e_background_set (const char *bgfile); + EAPI void e_background_get (void); #ifdef __cplusplus diff --git a/src/lib/e_main.c b/src/lib/e_main.c index af7ce3bb6..e871a755a 100644 --- a/src/lib/e_main.c +++ b/src/lib/e_main.c @@ -25,9 +25,13 @@ static int _e_ipc_init(const char *display); static void _e_ipc_shutdown(void); +static int _e_cb_server_data(void *data, int type, void *event); static Ecore_Ipc_Server *_e_ipc_server = NULL; +int E_RESPONSE_MODULE_LIST = 0; +int E_RESPONSE_BACKGROUND_GET = 0; + int e_init(const char* display) { @@ -58,6 +62,12 @@ e_init(const char* display) return 0; } + if (!E_RESPONSE_MODULE_LIST) + { + E_RESPONSE_MODULE_LIST = ecore_event_type_new(); + E_RESPONSE_BACKGROUND_GET = ecore_event_type_new(); + } + return 1; } @@ -107,6 +117,14 @@ e_module_load_set(const char *module, int load) strlen(module)); } +void +e_module_list(void) +{ + ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST, + E_IPC_OP_MODULE_LIST, 0/*ref*/, 0/*ref_to*/, + 0/*response*/, NULL, 0); +} + void e_background_set(const char *bgfile) { @@ -118,6 +136,14 @@ e_background_set(const char *bgfile) strlen(bgfile)); } +void +e_background_get(void) +{ + ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST, + E_IPC_OP_BG_GET, 0/*ref*/, 0/*ref_to*/, + 0/*response*/, NULL, 0); +} + static int _e_ipc_init(const char *display) { @@ -132,9 +158,9 @@ _e_ipc_init(const char *display) /* similar... */ if (!_e_ipc_server) return 0; -// ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_ADD, _e_ipc_cb_server_add, NULL); -// ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DEL, _e_ipc_cb_server_del, NULL); -// ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DATA, _e_ipc_cb_server_data, NULL); +// ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_ADD, _e_cb_server_add, NULL); +// ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DEL, _e_cb_server_del, NULL); + ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DATA, _e_cb_server_data, NULL); return 1; } @@ -149,4 +175,54 @@ _e_ipc_shutdown(void) } } +static int +_e_cb_server_data(void *data, int type, void *event) +{ + Ecore_Ipc_Event_Server_Data *e; + + e = event; + type = E_IPC_OP_MODULE_LIST; + switch (e->minor) + { + case E_IPC_OP_MODULE_LIST_REPLY: + if (e->data) + { + char *p; + + p = e->data; + while (p < (char *)(e->data + e->size)) + { + E_Response_Module_List *res; + + res = calloc(1, sizeof(E_Response_Module_List)); + res->name = p; + p += strlen(res->name); + if (p < (char *)(e->data + e->size)) + { + p++; + if (p < (char *)(e->data + e->size)) + { + res->enabled = *p; + p++; + ecore_event_add(E_RESPONSE_MODULE_LIST, res, + NULL, NULL); + } + } + } + } + break; + case E_IPC_OP_BG_GET_REPLY: + { + E_Response_Background_Get *res; + + res = calloc(1, sizeof(E_Response_Background_Get)); + res->data = e->data; + ecore_event_add(E_RESPONSE_BACKGROUND_GET, res, NULL, NULL); + break; + } + default: + break; + } + return 1; +}