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
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to