Enlightenment CVS committal
Author : dj2
Project : e17
Module : apps/e
Dir : e17/apps/e/src/lib
Modified Files:
E.h e_main.c
Log Message:
- extend E's ipc a bit more
- this change the way the module-list call returns from libe, it will return
a list now, instead of a event per entry in the list
- adds a module directory list and background directory list call
- adds a shutdown call to shutdown E
- extends enlightenment_remote to handle the above and implments a -bg-get
call
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/lib/E.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- E.h 17 Mar 2005 13:55:20 -0000 1.4
+++ E.h 9 Apr 2005 06:06:39 -0000 1.5
@@ -19,21 +19,44 @@
#endif
typedef struct _E_Response_Module_List E_Response_Module_List;
+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;
struct _E_Response_Module_List
{
+ E_Response_Module_Data **modules;
+ int count;
+};
+
+struct _E_Response_Module_Data
+{
char *name;
char enabled;
};
+struct _E_Response_Module_Dirs_List
+{
+ char **dirs;
+ int count;
+};
+
struct _E_Response_Background_Get
{
- char *data;
+ char *file;
+};
+
+struct _E_Response_Background_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;
#ifdef __cplusplus
extern "C" {
@@ -45,6 +68,7 @@
/* E startup and shutdown */
EAPI void e_restart (void);
+ EAPI void e_quit (void);
/* E module manipulation */
EAPI void e_module_enabled_set (const char *module, int
enable);
@@ -55,6 +79,10 @@
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);
+
#ifdef __cplusplus
}
#endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/lib/e_main.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_main.c 17 Mar 2005 13:55:20 -0000 1.7
+++ e_main.c 9 Apr 2005 06:06:39 -0000 1.8
@@ -7,11 +7,10 @@
* TODO:
* add ecore events for callbacks to all/some ipc calls, e.g. module_list
*
- * add module_list, module_enabled_get and module_enabled_set
+ * add module_enabled_get
*
* augment IPC calls and add wrappers for them - i.e.:
- * e restart/shutdown
- * desktops add/remove/list/currentset/bgset etc
+ * desktops add/remove/list/currentset etc
* windows shade[get/set]/maximise[get/set]/iconify[get/set]/list
*
* add ability to e to set theme, so we can have a theme_set call :)
@@ -26,10 +25,16 @@
static void _e_ipc_shutdown(void);
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 Ecore_Ipc_Server *_e_ipc_server = NULL;
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;
/*
* initialise connection to the current E running on "display".
@@ -102,7 +107,9 @@
if (!E_RESPONSE_MODULE_LIST)
{
E_RESPONSE_MODULE_LIST = ecore_event_type_new();
+ 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();
}
if (free_disp)
@@ -127,12 +134,17 @@
void
e_restart(void)
{
- E_Ipc_Op type;
-
- type = E_IPC_OP_RESTART;
- ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST, type, 0/*ref*/,
- 0/*ref_to*/, 0/*response*/, NULL, 0);
+ ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST,
+ E_IPC_OP_RESTART, 0/*ref*/, 0/*ref_to*/,
+ 0/*response*/, NULL, 0);
+}
+void
+e_quit(void)
+{
+ ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST,
+ E_IPC_OP_SHUTDOWN, 0/*ref*/, 0/*ref_to*/,
+ 0/*response*/, NULL, 0);
}
void
@@ -180,6 +192,14 @@
}
void
+e_module_dirs_list(void)
+{
+ ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST,
+ E_IPC_OP_MODULE_DIRS_LIST, 0/*ref*/, 0/*ref_to*/,
+ 0/*response*/, NULL, 0);
+}
+
+void
e_background_set(const char *bgfile)
{
if (!bgfile)
@@ -198,6 +218,14 @@
0/*response*/, NULL, 0);
}
+void
+e_background_dirs_list(void)
+{
+ ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST,
+ E_IPC_OP_BG_DIRS_LIST, 0/*ref*/,
+ 0/*ref_to*/, 0/*response*/, NULL, 0);
+}
+
static int
_e_ipc_init(const char *display)
{
@@ -242,28 +270,74 @@
case E_IPC_OP_MODULE_LIST_REPLY:
if (e->data)
{
+ E_Response_Module_List *res;
+ int count = 0;
char *p;
+ res = calloc(1, sizeof(E_Response_Module_List));
+
p = e->data;
while (p < (char *)(e->data + e->size))
{
- E_Response_Module_List *res;
+ p += strlen(p) + 1 + 1;
+ count ++;
+ }
+ res->modules = malloc(sizeof(E_Response_Module_Data *) * count);
+ res->count = count;
- res = calloc(1, sizeof(E_Response_Module_List));
- res->name = p;
- p += strlen(res->name);
+ count = 0;
+ p = e->data;
+ while (p < (char *)(e->data + e->size))
+ {
+ E_Response_Module_Data *md;
+ md = malloc(sizeof(E_Response_Module_Data));
+ md->name = p;
+ p += strlen(md->name);
if (p < (char *)(e->data + e->size))
{
p++;
if (p < (char *)(e->data + e->size))
{
- res->enabled = *p;
+ md->enabled = *p;
p++;
+ }
+ }
+ res->modules[count] = md;
+ count ++;
+ }
ecore_event_add(E_RESPONSE_MODULE_LIST, res,
- NULL, NULL);
+ _e_cb_module_list_free, NULL);
}
+ break;
+ case E_IPC_OP_MODULE_DIRS_LIST_REPLY:
+ if (e->data)
+ {
+ E_Response_Module_Dirs_List *res;
+ int count = 0;
+ char *p;
+
+ res = calloc(1, sizeof(E_Response_Module_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_MODULE_DIRS_LIST, res,
+ _e_cb_module_dir_list_free, NULL);
}
break;
case E_IPC_OP_BG_GET_REPLY:
@@ -271,12 +345,79 @@
E_Response_Background_Get *res;
res = calloc(1, sizeof(E_Response_Background_Get));
- res->data = e->data;
+ res->file = e->data;
ecore_event_add(E_RESPONSE_BACKGROUND_GET, res, NULL, NULL);
break;
}
+ case E_IPC_OP_BG_DIRS_LIST_REPLY:
+ if (e->data)
+ {
+ E_Response_Background_Dirs_List *res;
+ char *p;
+ int count = 0;
+
+ res = calloc(1, sizeof(E_Response_Background_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_BACKGROUND_DIRS_LIST, res,
+ _e_cb_bg_dir_list_free, NULL);
+ }
+ break;
default:
break;
}
return 1;
}
+
+static void _e_cb_module_list_free(void *data, void *ev)
+{
+ E_Response_Module_List *e;
+ int i;
+
+ e = ev;
+ for (i = 0; i < e->count; i++)
+ {
+ free(e->modules[i]);
+ }
+ free(e->modules);
+ free(e);
+}
+
+static void
+_e_cb_module_dir_list_free(void *data, void *ev)
+{
+ E_Response_Module_Dirs_List *e;
+
+ e = ev;
+ free(e->dirs);
+ free(e);
+}
+
+static void
+_e_cb_bg_dir_list_free(void *data, void *ev)
+{
+ E_Response_Background_Dirs_List *e;
+
+ e = ev;
+ free(e->dirs);
+ free(e);
+}
+
+
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs