OK, added callbacks, hope it is OK, can be tweaked ;)

This allows module_list :
added background_get for Codeworrior :)


SVN revision: 12818
This commit is contained in:
handyande 2005-01-08 01:44:36 +00:00 committed by handyande
parent 447426c79f
commit 47edbfedb0
4 changed files with 110 additions and 5 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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

View File

@ -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;
}