this is VERY evil - VERY evil. but its the sanest solution other than code
authorCarsten Haitzler <raster@rasterman.com>
Tue, 31 May 2005 03:01:53 +0000 (03:01 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Tue, 31 May 2005 03:01:53 +0000 (03:01 +0000)
generation tools (scripts etc.) for generating wads of repetitive code
easily, and keeping the codec higher level logic per ipc call in 1 place.

SVN revision: 15026

14 files changed:
src/Makefile.am
src/bin/Makefile.am
src/bin/e.h
src/bin/e_font.c
src/bin/e_font.h
src/bin/e_ipc.c
src/bin/e_ipc.h
src/bin/e_ipc_codec.c
src/bin/e_ipc_codec.h
src/bin/e_ipc_handlers.h [new file with mode: 0644]
src/bin/e_ipc_handlers_list.h [new file with mode: 0644]
src/bin/e_remote_main.c
src/lib/E.h
src/lib/e_private.h

index 3c913a8..b2a9553 100644 (file)
@@ -1,2 +1,2 @@
 MAINTAINERCLEANFILES = Makefile.in
-SUBDIRS = lib bin modules
+SUBDIRS = bin modules lib
index d7e9d21..0c01731 100644 (file)
@@ -11,6 +11,8 @@ bin_PROGRAMS = enlightenment enlightenment_remote enlightenment_eapp
 ENLIGHTENMENTHEADERS = \
 e.h \
 e_includes.h \
+e_ipc_handlers.h \
+e_ipc_handlers_list.h \
 e_user.h \
 e_manager.h \
 e_path.h \
index 92aa81f..4eb2fb0 100644 (file)
@@ -66,6 +66,12 @@ typedef struct _E_Rect E_Rect;
 #define E_NEW_BIG(s, n) malloc(n * sizeof(s))
 #define E_FREE(p) { if (p) {free(p); p = NULL;} }
 
+#define E_REMOTE_OPTIONS 1
+#define E_REMOTE_OUT     2
+#define E_WM_IN          3
+#define E_REMOTE_IN      4
+#define E_ENUM           5
+
 #define E_TYPEDEFS 1
 #include "e_includes.h"
 #undef E_TYPEDEFS
index bdd01fc..a3bc68e 100644 (file)
@@ -100,7 +100,7 @@ e_font_available_list(void)
 }
 
 void
-e_font_available_list_free(Evas_List * available)
+e_font_available_list_free(Evas_List *available)
 {
    E_Font_Available *efa;
    
@@ -319,7 +319,7 @@ e_font_default_string_get(const char *text_class, int *size_ret)
 }
 
 static Evas_List *
-_e_font_font_dir_available_get(Evas_List * available_fonts, const char *font_dir)
+_e_font_font_dir_available_get(Evas_List *available_fonts, const char *font_dir)
 {
    char buf[4096];
    FILE *f;
index ca6a778..e7e404a 100644 (file)
@@ -13,39 +13,39 @@ typedef struct _E_Font_Fallback E_Font_Available;
 
 struct _E_Font_Default
 {
-   char * text_class;
-   char * font;
-   int    size;
+   char *text_class;
+   char *font;
+   int   size;
 };
 
 struct _E_Font_Fallback
 {
-   char * name;
+   char *name;
 };
 
 struct _E_Font_Available
 {
-   char * name;
+   char *name;
 };
 
 EAPI int               e_font_init(void);
 EAPI int               e_font_shutdown(void);
 EAPI void              e_font_apply(void);
-EAPI Evas_List *       e_font_available_list(void);
-EAPI void              e_font_available_list_free(Evas_List * available);
+EAPI Evas_List         *e_font_available_list(void);
+EAPI void              e_font_available_list_free(Evas_List *available);
 
 /* global font fallbacks */
 EAPI void              e_font_fallback_clear(void);
-EAPI void              e_font_fallback_append(const char * font);
-EAPI void              e_font_fallback_prepend(const char * font);
-EAPI void              e_font_fallback_remove(const char * font);
-EAPI Evas_List *       e_font_fallback_list(void);
+EAPI void              e_font_fallback_append(const char *font);
+EAPI void              e_font_fallback_prepend(const char *font);
+EAPI void              e_font_fallback_remove(const char *font);
+EAPI Evas_List         *e_font_fallback_list(void);
 
 /* setup edje text classes */
-EAPI void              e_font_default_set(const char * text_class, const char * font, int size);
-EAPI E_Font_Default *  e_font_default_get(const char * text_class);
-EAPI void              e_font_default_remove(const char * text_class);
-EAPI Evas_List *       e_font_default_list(void);
+EAPI void              e_font_default_set(const char *text_class, const char *font, int size);
+EAPI E_Font_Default    *e_font_default_get(const char *text_class);
+EAPI void              e_font_default_remove(const char *text_class);
+EAPI Evas_List         *e_font_default_list(void);
 EAPI const char        *e_font_default_string_get(const char *text_class, int *size_ret);
     
 #endif
index c84c8dd..741a6db 100644 (file)
@@ -7,27 +7,10 @@ static int _e_ipc_cb_client_data(void *data, int type, void *event);
 static void _e_ipc_reply_double_send(Ecore_Ipc_Client *client, double val, int opcode);
 static void _e_ipc_reply_int_send(Ecore_Ipc_Client *client, int val, int opcode);
 static void _e_ipc_reply_2int_send(Ecore_Ipc_Client *client, int val1, int val2, int opcode);
-static char *_e_ipc_str_list_get(Evas_List *strs, int *bytes);
-static char *_e_ipc_simple_str_dec(char *data, int bytes);
-static char **_e_ipc_multi_str_dec(char *data, int bytes, int str_count);
 
 static int _e_ipc_double_dec(char *data, int bytes, double *dest);
 static int _e_ipc_int_dec(char *data, int bytes, int *dest);
 
-/* encode functions, Should these be global? */
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_module_list_enc);
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_available_list_enc);
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_enc);
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_default_list_enc);
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_font_default_enc);
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_mouse_binding_list_enc);
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_mouse_binding_enc);
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_mouse_binding_dec);
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_key_binding_list_enc);
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_key_binding_enc);
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_key_binding_dec);
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_path_list_enc);
-
 /* local subsystem globals */
 static Ecore_Ipc_Server *_e_ipc_server  = NULL;
 
@@ -96,150 +79,81 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event)
    if (ecore_ipc_client_server_get(e->client) != _e_ipc_server) return 1;
    switch (e->minor)
      {
-      case E_IPC_OP_MODULE_LOAD:
-       if (e->data)
-         {
-            char *name;
-            
-            name = _e_ipc_simple_str_dec(e->data, e->size);
-            
-            if (!e_module_find(name))
-              {
-                 e_module_new(name);
-              }
-            free(name);
-             e_config_save_queue();
-         }
-       break;
-      case E_IPC_OP_MODULE_UNLOAD:
-       if (e->data)
-         {
-            char *name;
-            E_Module *m;
-            
-            name = _e_ipc_simple_str_dec(e->data, e->size);
-            
-            if ((m = e_module_find(name)))
-              {
-                 if (e_module_enabled_get(m))
-                   e_module_disable(m);
-                 e_object_del(E_OBJECT(m));
-              }
-            free(name);
-             e_config_save_queue();
-         }
-       break;
-      case E_IPC_OP_MODULE_ENABLE:
-         {
-            char *name;
-            E_Module *m;
-            
-            name = _e_ipc_simple_str_dec(e->data, e->size);
-            
-            if ((m = e_module_find(name)))
-              {
-                 if (!e_module_enabled_get(m))
-                   e_module_enable(m);
-              }
-            free(name);
-             e_config_save_queue();
-         }
-       break;
-      case E_IPC_OP_MODULE_DISABLE:
-         {      
-            char *name;
-            E_Module *m;
-            
-            name = _e_ipc_simple_str_dec(e->data, e->size);
-            
-            if ((m = e_module_find(name)))
-              {
-                 if (e_module_enabled_get(m))
-                   e_module_disable(m);
-              }
-            free(name);
-             e_config_save_queue();
-         }
-       break;
-      case E_IPC_OP_MODULE_LIST:
-         {
-            /* encode module list (str,8-bit) */
-            Evas_List *modules;
-            char * data;
-            int bytes;
-
-             modules = e_module_list();
-            data = _e_ipc_module_list_enc(modules, &bytes);
-            
-            /* send reply data */
-            ecore_ipc_client_send(e->client,
-                                  E_IPC_DOMAIN_REPLY,
-                                  E_IPC_OP_MODULE_LIST_REPLY,
-                                  0/*ref*/, 0/*ref_to*/, 0/*response*/,
-                                  data, bytes);
-            free(data);
-         }
-       break;
+#define TYPE  E_WM_IN
+#include      "e_ipc_handlers.h"
+#undef TYPE    
+/* here to steal from to port over to the new e_ipc_handlers.h */      
+#if 0
       case E_IPC_OP_BG_SET:
          {
-            char *file;
-            Evas_List *managers, *l;
-
-            file = _e_ipc_simple_str_dec(e->data, e->size);
-            
-            E_FREE(e_config->desktop_default_background);
-            e_config->desktop_default_background = file;
+            char *file = NULL;
             
-            managers = e_manager_list();
-            for (l = managers; l; l = l->next)
+            if (e_ipc_codec_str_dec(e->data, e->size, &file))
               {
-                 Evas_List *ll;
-                 E_Manager *man;
-                 
-                 man = l->data;
-                 for (ll = man->containers; ll; ll = ll->next)
+                 Evas_List *managers, *l;
+
+                 E_FREE(e_config->desktop_default_background);
+                 e_config->desktop_default_background = file;
+                 managers = e_manager_list();
+                 for (l = managers; l; l = l->next)
                    {
-                      E_Container *con;
-                      E_Zone *zone;
+                      Evas_List *ll;
+                      E_Manager *man;
                       
-                      con = ll->data;
-                      zone = e_zone_current_get(con);
-                      e_zone_bg_reconfigure(zone);
+                      man = l->data;
+                      for (ll = man->containers; ll; ll = ll->next)
+                        {
+                           E_Container *con;
+                           E_Zone *zone;
+                           
+                           con = ll->data;
+                           zone = e_zone_current_get(con);
+                           e_zone_bg_reconfigure(zone);
+                        }
                    }
+                 e_config_save_queue();
               }
-            e_config_save_queue();
           }
        break;
       case E_IPC_OP_BG_GET:
          {
-            char *bg;
+            void *data;
+            int bytes;
             
-            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) + 1);
+            data = e_ipc_codec_str_enc(e_config->desktop_default_background, &bytes);
+            if (data)
+              {
+                 ecore_ipc_client_send(e->client,
+                                       E_IPC_DOMAIN_REPLY,
+                                       E_IPC_OP_BG_GET_REPLY,
+                                       0/*ref*/, 0/*ref_to*/, 0/*response*/,
+                                       data, bytes);
+                 free(data);
+              }
          }
        break;
       case E_IPC_OP_FONT_AVAILABLE_LIST:
          {
-            /* encode font available list (str) */
-            Evas_List *fonts_available;
+            E_Font_Available *fa;
+            Evas_List *dat = NULL, *l, *fa_list;
+            void *data;
             int bytes;
-            char *data;
-                 
-            fonts_available = e_font_available_list();        
-            data = _e_ipc_font_available_list_enc(fonts_available, &bytes);           
+            
+            fa_list = e_font_available_list();
+            for (l = fa_list; l; l = l->next)
+              {
+                 fa = l->data;
+                 dat = evas_list_append(dat, fa->name);
+              }
+            data = e_ipc_codec_str_list_enc(dat, &bytes);
             ecore_ipc_client_send(e->client,
                                   E_IPC_DOMAIN_REPLY,
                                   E_IPC_OP_FONT_AVAILABLE_LIST_REPLY,
                                   0/*ref*/, 0/*ref_to*/, 0/*response*/,
                                   data, bytes);
-            
-            e_font_available_list_free(fonts_available);
             free(data);
+            evas_list_free(dat);
+            e_font_available_list_free(fa_list);
          }
        break;
       case E_IPC_OP_FONT_APPLY:
@@ -256,118 +170,139 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event)
        break;
       case E_IPC_OP_FONT_FALLBACK_APPEND:
          {
-            char * font_name;
+            char *font_name = NULL;
             
-            font_name = _e_ipc_simple_str_dec(e->data, e->size);
-            e_font_fallback_append(font_name);
-            free(font_name);
-
-            e_config_save_queue(); 
+            if (e_ipc_codec_str_dec(e->data, e->size, &font_name))
+              {
+                 e_font_fallback_append(font_name);
+                 free(font_name);
+                 e_config_save_queue();
+              }
          }
        break;
       case E_IPC_OP_FONT_FALLBACK_PREPEND:
          {
-            char * font_name;
-
-            font_name = _e_ipc_simple_str_dec(e->data, e->size);            
-            e_font_fallback_prepend(font_name);
-            free(font_name);      
-               
-            e_config_save_queue();  
+            char *font_name = NULL;
+            
+            if (e_ipc_codec_str_dec(e->data, e->size, &font_name))
+              {
+                 e_font_fallback_prepend(font_name);
+                 free(font_name);         
+                 e_config_save_queue();  
+              }
          }
        break;
       case E_IPC_OP_FONT_FALLBACK_LIST:
          {
-               
-            /* encode font fallback list (str) */
-            Evas_List *fallbacks;
+            E_Font_Fallback *ff;
+            Evas_List *dat = NULL, *l;
+            void *data;
             int bytes;
-            char *data;
-                
-            fallbacks = e_font_fallback_list();
-
-            data = _e_ipc_font_fallback_list_enc(fallbacks, &bytes);
+            
+            for (l = e_font_available_list(); l; l = l->next)
+              {
+                 ff = l->data;
+                 dat = evas_list_append(dat, ff->name);
+              }
+            data = e_ipc_codec_str_list_enc(dat, &bytes);
             ecore_ipc_client_send(e->client,
                                   E_IPC_DOMAIN_REPLY,
                                   E_IPC_OP_FONT_FALLBACK_LIST_REPLY,
                                   0/*ref*/, 0/*ref_to*/, 0/*response*/,
                                   data, bytes);
             free(data);
-
+            evas_list_free(dat);
          }
        break;
       case E_IPC_OP_FONT_FALLBACK_REMOVE:
          {
-            char * font_name;
-
-            font_name = _e_ipc_simple_str_dec(e->data, e->size);
-            e_font_fallback_remove(font_name);
-            free(font_name);        
-
-            e_config_save_queue();
+            char *font_name = NULL;
+            
+            if (e_ipc_codec_str_dec(e->data, e->size, &font_name))
+              {
+                 e_font_fallback_remove(font_name);
+                 free(font_name);           
+                 e_config_save_queue();
+              }
          }
        break;
       case E_IPC_OP_FONT_DEFAULT_SET:
          {
-            char ** argv;
-            int argc;
-            
-            argc = 3;
-            
-            argv = _e_ipc_multi_str_dec(e->data, e->size, argc);
-            e_font_default_set(argv[0], argv[1], atoi(argv[2]));
-            free(argv);             
+            E_Ipc_2Str_Int *v = NULL;
             
-            e_config_save_queue();
+            if (e_ipc_codec_2str_int_dec(e->data, e->size, &v))
+              {
+                 e_font_default_set(v->str1, v->str2, v->val);
+                 free(v->str1);
+                 free(v->str2);
+                 free(v);
+                 e_config_save_queue();
+              }
          }
        break;
       case E_IPC_OP_FONT_DEFAULT_GET:
          {
-         
-            /* encode font default struct (str,str,32-bits)(E_Font_Default) */      
             E_Font_Default *efd;
-            char *data, *text_class;
+            char *tclass = NULL;
+            void *data;
             int bytes;
             
-            text_class = _e_ipc_simple_str_dec(e->data, e->size);           
-            efd = e_font_default_get(text_class);           
-            free(text_class);
-            data = _e_ipc_font_default_enc(efd, &bytes);
-            ecore_ipc_client_send(e->client,
-                                  E_IPC_DOMAIN_REPLY,
-                                  E_IPC_OP_FONT_DEFAULT_GET_REPLY,
-                                  0/*ref*/, 0/*ref_to*/, 0/*response*/,
-                                  data, bytes);
-            free(data);
+            if (e_ipc_codec_str_dec(e->data, e->size, &tclass))
+              {
+                 efd = e_font_default_get(tclass);
+                 data = e_ipc_codec_2str_int_enc(efd->text_class, efd->font, efd->size, &bytes);
+                 ecore_ipc_client_send(e->client,
+                                       E_IPC_DOMAIN_REPLY,
+                                       E_IPC_OP_FONT_DEFAULT_GET_REPLY,
+                                       0/*ref*/, 0/*ref_to*/, 0/*response*/,
+                                       data, bytes);
+                 free(data);
+                 free(tclass);
+              }
          }
        break;
       case E_IPC_OP_FONT_DEFAULT_REMOVE:
          {       
-            char * text_class;
+            char *tclass = NULL;
             
-            text_class = _e_ipc_simple_str_dec(e->data, e->size);
-            e_font_default_remove(text_class);
-            free(text_class);     
-
-            e_config_save_queue(); 
+            if (e_ipc_codec_str_dec(e->data, e->size, &tclass))
+              {
+                 e_font_default_remove(tclass);
+                 free(tclass);
+                 e_config_save_queue(); 
+              }
          }
        break;
       case E_IPC_OP_FONT_DEFAULT_LIST:
          {
-            /* encode font default struct list (str,str,32-bits)(E_Font_Default) */
-            Evas_List *defaults;
+            E_Ipc_2Str_Int *v;
+            E_Font_Default *efd;
+            Evas_List *dat = NULL, *l;
+            void *data;
             int bytes;
-            char *data;
-                 
-            defaults = e_font_default_list();
-            data = _e_ipc_font_default_list_enc(defaults, &bytes);
+            
+            for (l = e_font_default_list(); l; l = l->next)
+              {
+                 efd = l->data;
+                 v = calloc(1, sizeof(E_Ipc_2Str_Int));
+                 v->str1 = efd->text_class;
+                 v->str2 = efd->font;
+                 v->val = efd->size;
+                 dat = evas_list_append(dat, v);
+              }
+            data = e_ipc_codec_2str_int_list_enc(dat, &bytes);
             ecore_ipc_client_send(e->client,
                                   E_IPC_DOMAIN_REPLY,
                                   E_IPC_OP_FONT_DEFAULT_LIST_REPLY,
                                   0/*ref*/, 0/*ref_to*/, 0/*response*/,
                                   data, bytes);
+            while (dat)
+              {
+                 v = dat->data;
+                 free(v);
+                 dat = evas_list_remove_list(dat, dat);
+              }
             free(data);
-
          }
        break;
       case E_IPC_OP_RESTART:
@@ -1171,7 +1106,7 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event)
             e_config_save_queue(); 
             break;
          }
-
+#endif
       default:
        break;
      }
@@ -1234,269 +1169,3 @@ _e_ipc_reply_2int_send(Ecore_Ipc_Client *client, int val1, int val2, int opcode)
        free(data);
      }
 }
-
-/**
- * Encode a list of strings into a flattened data block that looks like
- * <str>0<str>0... (ie string chars - nul byte in between until the end)
- */
-static char *
-_e_ipc_str_list_get(Evas_List *strs, int *bytes)
-{
-   char *data = NULL;
-   int pos = 0;
-   Evas_List *l;
-   
-   *bytes = 0;
-   for (l = strs; l; l = l->next)
-     {
-       char *p;
-
-       p = l->data;
-
-       *bytes += strlen(p) + 1;
-       data = realloc(data, *bytes);
-
-       memcpy(data + pos, p, strlen(p));
-       pos = *bytes;
-       data[pos - 1] = 0;
-     }
-   return data;
-}
-
-/**
- * Decode a simple string that was passed by an IPC client
- *
- * The returned string must be freed
- */
-static char *
-_e_ipc_simple_str_dec(char *data, int bytes)
-{
-   char *str;
-   
-   str = malloc(bytes + 1);
-   str[bytes] = 0;
-   memcpy(str, data, bytes);
-   return str;
-}
-
-/**
- * Decode a list of strings and return an array, you need to pass
- * the string count that you are expecting back.
- *
- * Strings are encoded <str>0<str>0...
- *
- * free up the array that you get back
- */
-static char **
-_e_ipc_multi_str_dec(char *data, int bytes, int str_count)
-{
-   char **str_array;
-   int i;
-   
-   /* Make sure our data is packed for us <str>0<str>0 */
-   if (data[bytes - 1] != 0)
-     return NULL;
-   
-   str_array = malloc(sizeof(char *) * str_count);
-   
-   for (i = 0; i < str_count; i++) 
-     {
-        str_array[i] = data;
-       data += strlen(str_array[i]) + 1;
-     }
-   
-   return str_array;
-}
-
-/* FIXME: just use eet for this - saves a lot of hassle */
-   
-/* list/struct encoding functions */
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_module_list_enc)
-{
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Module);
-   ECORE_IPC_CNTS(name);
-   ECORE_IPC_CNT8();
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH();
-   int l1;
-   ECORE_IPC_SLEN(l1, name);
-   ECORE_IPC_PUTS(name, l1);
-   ECORE_IPC_PUT8(enabled);
-   ECORE_IPC_ENC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_available_list_enc)
-{
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Font_Available);
-   ECORE_IPC_CNTS(name);
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH();
-   int l1;
-   ECORE_IPC_SLEN(l1, name);
-   ECORE_IPC_PUTS(name, l1);
-   ECORE_IPC_ENC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_enc)
-{
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Font_Fallback);
-   ECORE_IPC_CNTS(name);
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH();
-   int l1;
-   ECORE_IPC_SLEN(l1, name);
-   ECORE_IPC_PUTS(name, l1);
-   ECORE_IPC_ENC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_default_list_enc)
-{
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Font_Default);
-   ECORE_IPC_CNTS(text_class);
-   ECORE_IPC_CNTS(font);
-   ECORE_IPC_CNT32();
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH();
-   int l1, l2;
-   ECORE_IPC_SLEN(l1, text_class);
-   ECORE_IPC_SLEN(l2, font);
-   ECORE_IPC_PUTS(text_class, l1);
-   ECORE_IPC_PUTS(font, l2);
-   ECORE_IPC_PUT32(size);
-   ECORE_IPC_ENC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_font_default_enc)
-{
-   int l1, l2;
-   ECORE_IPC_ENC_STRUCT_HEAD(E_Font_Default, 
-                            ECORE_IPC_SLEN(l1, text_class) +
-                            ECORE_IPC_SLEN(l2, font) +
-                            4);
-   ECORE_IPC_PUTS(text_class, l1);
-   ECORE_IPC_PUTS(font, l2);
-   ECORE_IPC_PUT32(size);
-   ECORE_IPC_ENC_STRUCT_FOOT();
-}
-
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_mouse_binding_list_enc)
-{
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Config_Binding_Mouse);
-   ECORE_IPC_CNT32();
-   ECORE_IPC_CNT32();
-   ECORE_IPC_CNTS(action);
-   ECORE_IPC_CNTS(params);
-   ECORE_IPC_CNT8();
-   ECORE_IPC_CNT8();
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH();
-   int l1, l2;
-   ECORE_IPC_PUT32(context);
-   ECORE_IPC_PUT32(modifiers);
-   ECORE_IPC_SLEN(l1, action);
-   ECORE_IPC_SLEN(l2, params);
-   ECORE_IPC_PUTS(action, l1);
-   ECORE_IPC_PUTS(params, l2);
-   ECORE_IPC_PUT8(button);
-   ECORE_IPC_PUT8(any_mod);
-   ECORE_IPC_ENC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_mouse_binding_enc)
-{
-   int l1, l2;
-   ECORE_IPC_ENC_STRUCT_HEAD(E_Config_Binding_Mouse,
-                            4 + 4 +
-                            ECORE_IPC_SLEN(l1, action) +
-                            ECORE_IPC_SLEN(l2, params) +
-                            1 + 1);
-   ECORE_IPC_PUT32(context);
-   ECORE_IPC_PUT32(modifiers);
-   ECORE_IPC_PUTS(action, l1);
-   ECORE_IPC_PUTS(params, l2);
-   ECORE_IPC_PUT8(button);
-   ECORE_IPC_PUT8(any_mod);
-   ECORE_IPC_ENC_STRUCT_FOOT();
-}
-
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_mouse_binding_dec)
-{
-   ECORE_IPC_DEC_STRUCT_HEAD_MIN(E_Config_Binding_Mouse,
-                                4 + 4 +
-                                1 +
-                                1 +
-                                1 + 1);
-   ECORE_IPC_CHEKS();
-   ECORE_IPC_GET32(context);
-   ECORE_IPC_GET32(modifiers);
-   ECORE_IPC_GETS(action);
-   ECORE_IPC_GETS(params);
-   ECORE_IPC_GET8(button);
-   ECORE_IPC_GET8(any_mod);
-   ECORE_IPC_DEC_STRUCT_FOOT();
-}
-
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_key_binding_list_enc)
-{
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Config_Binding_Key);
-   ECORE_IPC_CNT32();
-   ECORE_IPC_CNT32();
-   ECORE_IPC_CNTS(key);
-   ECORE_IPC_CNTS(action);
-   ECORE_IPC_CNTS(params);
-   ECORE_IPC_CNT8();
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH();
-   int l1, l2, l3;
-   ECORE_IPC_PUT32(context);
-   ECORE_IPC_PUT32(modifiers);
-   ECORE_IPC_SLEN(l1, key);
-   ECORE_IPC_SLEN(l2, action);
-   ECORE_IPC_SLEN(l3, params);
-   ECORE_IPC_PUTS(key, l1);
-   ECORE_IPC_PUTS(action, l2);
-   ECORE_IPC_PUTS(params, l3);
-   ECORE_IPC_PUT8(any_mod);
-   ECORE_IPC_ENC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_key_binding_enc)
-{
-   int l1, l2, l3;
-   ECORE_IPC_ENC_STRUCT_HEAD(E_Config_Binding_Key,
-                            4 + 4 +
-                            ECORE_IPC_SLEN(l1, key) +
-                            ECORE_IPC_SLEN(l2, action) +
-                            ECORE_IPC_SLEN(l3, params) +
-                            1);
-   ECORE_IPC_PUT32(context);
-   ECORE_IPC_PUT32(modifiers);
-   ECORE_IPC_PUTS(key, l1);
-   ECORE_IPC_PUTS(action, l2);
-   ECORE_IPC_PUTS(params, l3);
-   ECORE_IPC_PUT8(any_mod);
-   ECORE_IPC_ENC_STRUCT_FOOT();
-}
-
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_key_binding_dec)
-{
-   ECORE_IPC_DEC_STRUCT_HEAD_MIN(E_Config_Binding_Key,
-                                4 + 4 +
-                                1 +
-                                1 +
-                                1 +
-                                1);
-   ECORE_IPC_CHEKS();
-   ECORE_IPC_GET32(context);
-   ECORE_IPC_GET32(modifiers);
-   ECORE_IPC_GETS(key);
-   ECORE_IPC_GETS(action);
-   ECORE_IPC_GETS(params);
-   ECORE_IPC_GET8(any_mod);
-   ECORE_IPC_DEC_STRUCT_FOOT();
-}
-
-ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_path_list_enc)
-{
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Path_Dir);
-   ECORE_IPC_CNTS(dir);
-   ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH();
-   int l1;
-   ECORE_IPC_SLEN(l1, dir);
-   ECORE_IPC_PUTS(dir, l1);
-   ECORE_IPC_ENC_EVAS_LIST_FOOT();
-}
index cdc182f..3465a71 100644 (file)
@@ -3,6 +3,8 @@
  */
 #ifdef E_TYPEDEFS
 
+#include      "e_ipc_handlers_list.h"
+
 typedef enum _E_Ipc_Domain
 {
    E_IPC_DOMAIN_NONE,
@@ -13,151 +15,7 @@ typedef enum _E_Ipc_Domain
    E_IPC_DOMAIN_LAST
 } E_Ipc_Domain;
 
-typedef enum _E_Ipc_Op
-{
-   E_IPC_OP_NONE,
-   E_IPC_OP_MODULE_LOAD,
-   E_IPC_OP_MODULE_UNLOAD,
-   E_IPC_OP_MODULE_ENABLE,
-   E_IPC_OP_MODULE_DISABLE,
-   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_FONT_AVAILABLE_LIST,
-   E_IPC_OP_FONT_AVAILABLE_LIST_REPLY,
-   E_IPC_OP_FONT_APPLY,
-   E_IPC_OP_FONT_FALLBACK_CLEAR,
-   E_IPC_OP_FONT_FALLBACK_APPEND,
-   E_IPC_OP_FONT_FALLBACK_PREPEND,
-   E_IPC_OP_FONT_FALLBACK_LIST,
-   E_IPC_OP_FONT_FALLBACK_LIST_REPLY,
-   E_IPC_OP_FONT_FALLBACK_REMOVE,
-   E_IPC_OP_FONT_DEFAULT_SET,
-   E_IPC_OP_FONT_DEFAULT_GET,
-   E_IPC_OP_FONT_DEFAULT_GET_REPLY,
-   E_IPC_OP_FONT_DEFAULT_REMOVE,
-   E_IPC_OP_FONT_DEFAULT_LIST,
-   E_IPC_OP_FONT_DEFAULT_LIST_REPLY,
-   E_IPC_OP_RESTART,
-   E_IPC_OP_SHUTDOWN,
-   E_IPC_OP_LANG_LIST,
-   E_IPC_OP_LANG_LIST_REPLY,
-   E_IPC_OP_LANG_SET,
-   E_IPC_OP_LANG_GET,
-   E_IPC_OP_LANG_GET_REPLY,
-   E_IPC_OP_BINDING_MOUSE_LIST,
-   E_IPC_OP_BINDING_MOUSE_LIST_REPLY,
-   E_IPC_OP_BINDING_MOUSE_ADD,
-   E_IPC_OP_BINDING_MOUSE_DEL,
-   E_IPC_OP_BINDING_KEY_LIST,
-   E_IPC_OP_BINDING_KEY_LIST_REPLY,
-   E_IPC_OP_BINDING_KEY_ADD,
-   E_IPC_OP_BINDING_KEY_DEL,
-   E_IPC_OP_MENUS_SCROLL_SPEED_SET,
-   E_IPC_OP_MENUS_SCROLL_SPEED_GET,
-   E_IPC_OP_MENUS_SCROLL_SPEED_GET_REPLY,
-   E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_SET,
-   E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_GET,
-   E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_GET_REPLY,
-   E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_SET,
-   E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET,
-   E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET_REPLY,
-   E_IPC_OP_BORDER_SHADE_ANIMATE_SET,
-   E_IPC_OP_BORDER_SHADE_ANIMATE_GET,
-   E_IPC_OP_BORDER_SHADE_ANIMATE_GET_REPLY,
-   E_IPC_OP_BORDER_SHADE_TRANSITION_SET,
-   E_IPC_OP_BORDER_SHADE_TRANSITION_GET,
-   E_IPC_OP_BORDER_SHADE_TRANSITION_GET_REPLY,
-   E_IPC_OP_BORDER_SHADE_SPEED_SET,
-   E_IPC_OP_BORDER_SHADE_SPEED_GET,
-   E_IPC_OP_BORDER_SHADE_SPEED_GET_REPLY,
-   E_IPC_OP_FRAMERATE_SET,
-   E_IPC_OP_FRAMERATE_GET,
-   E_IPC_OP_FRAMERATE_GET_REPLY,
-   E_IPC_OP_IMAGE_CACHE_SET,
-   E_IPC_OP_IMAGE_CACHE_GET,
-   E_IPC_OP_IMAGE_CACHE_GET_REPLY,
-   E_IPC_OP_FONT_CACHE_SET,
-   E_IPC_OP_FONT_CACHE_GET,
-   E_IPC_OP_FONT_CACHE_GET_REPLY,
-   E_IPC_OP_USE_EDGE_FLIP_SET,
-   E_IPC_OP_USE_EDGE_FLIP_GET,
-   E_IPC_OP_USE_EDGE_FLIP_GET_REPLY,
-   E_IPC_OP_EDGE_FLIP_TIMEOUT_SET,
-   E_IPC_OP_EDGE_FLIP_TIMEOUT_GET,
-   E_IPC_OP_EDGE_FLIP_TIMEOUT_GET_REPLY,
-   
-   /* Module PATH IPC */
-   E_IPC_OP_MODULE_DIRS_LIST,
-   E_IPC_OP_MODULE_DIRS_LIST_REPLY,
-   E_IPC_OP_MODULE_DIRS_APPEND,
-   E_IPC_OP_MODULE_DIRS_PREPEND,
-   E_IPC_OP_MODULE_DIRS_REMOVE,
-
-   /* Theme PATH IPC */
-   E_IPC_OP_THEME_DIRS_LIST,
-   E_IPC_OP_THEME_DIRS_LIST_REPLY,
-   E_IPC_OP_THEME_DIRS_APPEND,
-   E_IPC_OP_THEME_DIRS_PREPEND,
-   E_IPC_OP_THEME_DIRS_REMOVE,
-
-   /* Font Path IPC */
-   E_IPC_OP_FONT_DIRS_LIST,
-   E_IPC_OP_FONT_DIRS_LIST_REPLY,
-   E_IPC_OP_FONT_DIRS_APPEND,
-   E_IPC_OP_FONT_DIRS_PREPEND,
-   E_IPC_OP_FONT_DIRS_REMOVE,
-
-   /* data Path IPC */
-   E_IPC_OP_DATA_DIRS_LIST,
-   E_IPC_OP_DATA_DIRS_LIST_REPLY,
-   E_IPC_OP_DATA_DIRS_APPEND,
-   E_IPC_OP_DATA_DIRS_PREPEND,
-   E_IPC_OP_DATA_DIRS_REMOVE,
-
-   /* Images Path IPC */
-   E_IPC_OP_IMAGE_DIRS_LIST,
-   E_IPC_OP_IMAGE_DIRS_LIST_REPLY,
-   E_IPC_OP_IMAGE_DIRS_APPEND,
-   E_IPC_OP_IMAGE_DIRS_PREPEND,
-   E_IPC_OP_IMAGE_DIRS_REMOVE,
-
-  /* Init Path IPC */
-   E_IPC_OP_INIT_DIRS_LIST,
-   E_IPC_OP_INIT_DIRS_LIST_REPLY,
-   E_IPC_OP_INIT_DIRS_APPEND,
-   E_IPC_OP_INIT_DIRS_PREPEND,
-   E_IPC_OP_INIT_DIRS_REMOVE,
-
-  /* Icon Path IPC */
-   E_IPC_OP_ICON_DIRS_LIST,
-   E_IPC_OP_ICON_DIRS_LIST_REPLY,
-   E_IPC_OP_ICON_DIRS_APPEND,
-   E_IPC_OP_ICON_DIRS_PREPEND,
-   E_IPC_OP_ICON_DIRS_REMOVE,
-
-   /* Background Path IPC */
-   E_IPC_OP_BG_DIRS_LIST,
-   E_IPC_OP_BG_DIRS_LIST_REPLY,
-   E_IPC_OP_BG_DIRS_APPEND,
-   E_IPC_OP_BG_DIRS_PREPEND,
-   E_IPC_OP_BG_DIRS_REMOVE,
-
-   E_IPC_OP_DESKS_SET,
-   E_IPC_OP_DESKS_GET,
-   E_IPC_OP_DESKS_GET_REPLY,
-     
-   E_IPC_OP_FOCUS_POLICY_SET,
-   E_IPC_OP_FOCUS_POLICY_GET,
-   E_IPC_OP_FOCUS_POLICY_GET_REPLY,
-     
-   E_IPC_OP_LAST
-     /* FIXME: add ipc: */
-     /* get list of actions */
-} E_Ipc_Op;
+typedef int E_Ipc_Op;
 
 #else
 #ifndef E_IPC_H
index d699928..7ac557e 100644 (file)
@@ -10,6 +10,10 @@ static Eet_Data_Descriptor *_e_ipc_double_edd = NULL;
 static Eet_Data_Descriptor *_e_ipc_2int_edd = NULL;
 static Eet_Data_Descriptor *_e_ipc_str_edd = NULL;
 static Eet_Data_Descriptor *_e_ipc_str_list_edd = NULL;
+static Eet_Data_Descriptor *_e_ipc_str_int_edd = NULL;
+static Eet_Data_Descriptor *_e_ipc_str_int_list_edd = NULL;
+static Eet_Data_Descriptor *_e_ipc_2str_int_edd = NULL;
+static Eet_Data_Descriptor *_e_ipc_2str_int_list_edd = NULL;
 
 /* externally accessible functions */
 int
@@ -28,8 +32,23 @@ e_ipc_codec_init(void)
    _e_ipc_str_edd = E_CONFIG_DD_NEW("str", E_Ipc_Str);
    E_CONFIG_VAL(_e_ipc_str_edd, E_Ipc_Str, str, STR);
    
-   _e_ipc_str_list_edd = E_CONFIG_DD_NEW("str_list", E_Ipc_Str_List);
-   E_CONFIG_LIST(_e_ipc_str_list_edd, E_Ipc_Str_List, list, _e_ipc_str_list_edd);
+   _e_ipc_str_list_edd = E_CONFIG_DD_NEW("str_list", E_Ipc_List);
+   E_CONFIG_LIST(_e_ipc_str_list_edd, E_Ipc_List, list, _e_ipc_str_edd);
+
+   _e_ipc_str_int_edd = E_CONFIG_DD_NEW("str_int", E_Ipc_Str_Int);
+   E_CONFIG_VAL(_e_ipc_str_int_edd, E_Ipc_Str_Int, str, STR);
+   E_CONFIG_VAL(_e_ipc_str_int_edd, E_Ipc_Str_Int, val, INT);
+   
+   _e_ipc_str_int_list_edd = E_CONFIG_DD_NEW("str_int_list", E_Ipc_List);
+   E_CONFIG_LIST(_e_ipc_str_int_list_edd, E_Ipc_List, list, _e_ipc_str_int_edd);
+
+   _e_ipc_2str_int_edd = E_CONFIG_DD_NEW("2str_int", E_Ipc_2Str_Int);
+   E_CONFIG_VAL(_e_ipc_2str_int_edd, E_Ipc_2Str_Int, str1, STR);
+   E_CONFIG_VAL(_e_ipc_2str_int_edd, E_Ipc_2Str_Int, str2, STR);
+   E_CONFIG_VAL(_e_ipc_2str_int_edd, E_Ipc_2Str_Int, val, INT);
+   
+   _e_ipc_2str_int_list_edd = E_CONFIG_DD_NEW("2str_int_list", E_Ipc_List);
+   E_CONFIG_LIST(_e_ipc_2str_int_list_edd, E_Ipc_List, list, _e_ipc_2str_int_edd);
    return 1;
 }
 
@@ -41,6 +60,10 @@ e_ipc_codec_shutdown(void)
    E_CONFIG_DD_FREE(_e_ipc_2int_edd);
    E_CONFIG_DD_FREE(_e_ipc_str_edd);
    E_CONFIG_DD_FREE(_e_ipc_str_list_edd);
+   E_CONFIG_DD_FREE(_e_ipc_str_int_edd);
+   E_CONFIG_DD_FREE(_e_ipc_str_int_list_edd);
+   E_CONFIG_DD_FREE(_e_ipc_2str_int_edd);
+   E_CONFIG_DD_FREE(_e_ipc_2str_int_list_edd);
 }
 
 int
@@ -136,7 +159,7 @@ e_ipc_codec_str_enc(char *str, int *size_ret)
 int
 e_ipc_codec_str_list_dec(char *data, int bytes, Evas_List **dest)
 {
-   E_Ipc_Str_List *dat;
+   E_Ipc_List *dat;
    Evas_List *list = NULL, *l;
    
    if (!data) return 0;
@@ -162,7 +185,7 @@ e_ipc_codec_str_list_dec(char *data, int bytes, Evas_List **dest)
 void *
 e_ipc_codec_str_list_enc(Evas_List *list, int *size_ret)
 {
-   E_Ipc_Str_List dat;
+   E_Ipc_List dat;
    Evas_List *l;
    void *data;
    
@@ -184,5 +207,93 @@ e_ipc_codec_str_list_enc(Evas_List *list, int *size_ret)
    return data;
 }
 
+int
+e_ipc_codec_str_int_dec(char *data, int bytes, E_Ipc_Str_Int **dest)
+{
+   E_Ipc_Str_Int *dat;
+   
+   if (!data) return 0;
+   dat = eet_data_descriptor_decode(_e_ipc_str_int_edd, data, bytes);
+   if (!dat) return 0;
+   if (dest) *dest = dat;
+   return 1;
+}
+
+void *
+e_ipc_codec_str_int_enc(char *str, int val, int *size_ret)
+{
+   E_Ipc_Str_Int dat;
+   
+   dat.str = str;
+   dat.val = val;
+   return eet_data_descriptor_encode(_e_ipc_str_int_edd, &dat, size_ret);
+}
+
+int
+e_ipc_codec_str_int_list_dec(char *data, int bytes, Evas_List **dest)
+{
+   E_Ipc_List *dat;
+   
+   if (!data) return 0;
+   dat = eet_data_descriptor_decode(_e_ipc_str_int_list_edd, data, bytes);
+   if (!dat) return 0;
+   if (dest) *dest = dat->list;
+   free(dat);
+   return 1;
+}
+
+void *
+e_ipc_codec_str_int_list_enc(Evas_List *list, int *size_ret)
+{
+   E_Ipc_List dat;
+   dat.list = list;
+   return eet_data_descriptor_encode(_e_ipc_str_int_list_edd, &dat, size_ret);
+}
+
+int
+e_ipc_codec_2str_int_dec(char *data, int bytes, E_Ipc_2Str_Int **dest)
+{
+   E_Ipc_2Str_Int *dat;
+   
+   if (!data) return 0;
+   dat = eet_data_descriptor_decode(_e_ipc_2str_int_edd, data, bytes);
+   if (!dat) return 0;
+   if (dest) *dest = dat;
+   return 1;
+}
+
+void *
+e_ipc_codec_2str_int_enc(char *str1, char *str2, int val, int *size_ret)
+{
+   E_Ipc_2Str_Int dat;
+   
+   dat.str1 = str1;
+   dat.str2 = str2;
+   dat.val = val;
+   return eet_data_descriptor_encode(_e_ipc_2str_int_edd, &dat, size_ret);
+}
+
+int
+e_ipc_codec_2str_int_list_dec(char *data, int bytes, Evas_List **dest)
+{
+   E_Ipc_List *dat;
+   
+   if (!data) return 0;
+   dat = eet_data_descriptor_decode(_e_ipc_2str_int_list_edd, data, bytes);
+   if (!dat) return 0;
+   if (dest) *dest = dat->list;
+   free(dat);
+   return 1;
+}
+
+void *
+e_ipc_codec_2str_int_list_enc(Evas_List *list, int *size_ret)
+{
+   E_Ipc_List dat;
+   dat.list = list;
+   return eet_data_descriptor_encode(_e_ipc_2str_int_list_edd, &dat, size_ret);
+}
+
+
 /* local subsystem globals */
 
index 9cc9e3c..eef2205 100644 (file)
@@ -3,11 +3,15 @@
  */
 #ifdef E_TYPEDEFS
 
-typedef struct _E_Ipc_Int         E_Ipc_Int;
-typedef struct _E_Ipc_Double      E_Ipc_Double;
-typedef struct _E_Ipc_2Int        E_Ipc_2Int;
-typedef struct _E_Ipc_Str         E_Ipc_Str;
-typedef struct _E_Ipc_Str_List    E_Ipc_Str_List;
+typedef struct _E_Ipc_Int              E_Ipc_Int;
+typedef struct _E_Ipc_Double           E_Ipc_Double;
+typedef struct _E_Ipc_2Int             E_Ipc_2Int;
+typedef struct _E_Ipc_List             E_Ipc_List;
+typedef struct _E_Ipc_Str              E_Ipc_Str;
+typedef struct _E_Ipc_Str_Int          E_Ipc_Str_Int;
+typedef struct _E_Ipc_Str_Int_List     E_Ipc_Str_Int_List;
+typedef struct _E_Ipc_2Str_Int         E_Ipc_2Str_Int;
+typedef struct _E_Ipc_2Str_Int_List    E_Ipc_2Str_Int_List;
 
 #else
 #ifndef E_IPC_CODEC_H
@@ -28,16 +32,29 @@ struct _E_Ipc_2Int
    int val1, val2;
 };
 
+struct _E_Ipc_List
+{
+   Evas_List *list;
+};
+
 struct _E_Ipc_Str
 {
    char *str;
 };
 
-struct _E_Ipc_Str_List
+struct _E_Ipc_Str_Int
 {
-   Evas_List *list;
+   char *str;
+   int   val;
 };
 
+struct _E_Ipc_2Str_Int
+{
+   char *str1, *str2;
+   int   val;
+};
+
+
 EAPI int      e_ipc_codec_init(void);
 EAPI void     e_ipc_codec_shutdown(void);
 
@@ -51,6 +68,14 @@ EAPI int      e_ipc_codec_str_dec(char *data, int bytes, char **dest);
 EAPI void    *e_ipc_codec_str_enc(char *str, int *size_ret);
 EAPI int      e_ipc_codec_str_list_dec(char *data, int bytes, Evas_List **dest);
 EAPI void    *e_ipc_codec_str_list_enc(Evas_List *list, int *size_ret);
+EAPI int      e_ipc_codec_str_int_dec(char *data, int bytes, E_Ipc_Str_Int **dest);
+EAPI void    *e_ipc_codec_str_int_enc(char *str, int val, int *size_ret);
+EAPI int      e_ipc_codec_str_int_list_dec(char *data, int bytes, Evas_List **dest);
+EAPI void    *e_ipc_codec_str_int_list_enc(Evas_List *list, int *size_ret);
+EAPI int      e_ipc_codec_2str_int_dec(char *data, int bytes, E_Ipc_2Str_Int **dest);
+EAPI void    *e_ipc_codec_2str_int_enc(char *str1, char *str2, int val, int *size_ret);
+EAPI int      e_ipc_codec_2str_int_list_dec(char *data, int bytes, Evas_List **dest);
+EAPI void    *e_ipc_codec_2str_int_list_enc(Evas_List *list, int *size_ret);
     
 #endif
 #endif
diff --git a/src/bin/e_ipc_handlers.h b/src/bin/e_ipc_handlers.h
new file mode 100644 (file)
index 0000000..cafe54d
--- /dev/null
@@ -0,0 +1,225 @@
+/* NOTE:
+ * 
+ * This is a very SPECIAL file. This servers as a kind of "auto code generator"
+ * to handle the encoder, decoder etc. aspects of ipc requests. the aim here
+ * is to make writing support for a new opcode simple and compact. It intends
+ * to centralize the handling into 1 spot, instead of having ti spread around
+ * the code in N different places, as well as providing common construct macros
+ * to help make the code more compact and easier to create.
+ */
+
+/* This is a bunch of convenience stuff for this to work */
+#ifndef E_IPC_HANDLERS_H
+# define E_IPC_HANDLERS_H
+
+# define STRING(__str, HANDLER) \
+case HANDLER: \
+if (e->data) { \
+   char *__str = NULL; \
+   if (e_ipc_codec_str_dec(e->data, e->size, &__str)) {
+# define END_STRING(__str) \
+      free(__str); \
+   } \
+} \
+break;
+# define SAVE e_config_save_queue()
+# define REQ_STRING(__str, HANDLER) \
+case HANDLER: { void *data; int bytes; \
+   data = e_ipc_codec_str_enc(__str, &bytes); \
+   if (data) { \
+      ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HANDLER, 0, 0, 0, data, bytes); \
+      free(data); \
+   } \
+} \
+break;
+# define REQ_NULL(HANDLER) \
+case HANDLER: \
+   ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HANDLER, 0, 0, 0, NULL, 0); \
+break;
+# define FREE_LIST(__list) \
+while (__list) { \
+   free(__list->data); \
+   __list = evas_list_remove_list(__list, __list); \
+}
+# define SEND_DATA(__opcode) \
+ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, __opcode, 0, 0, 0, data, bytes)
+# define STRING_INT_LIST(__v, __dec, __typ, HANDLER) \
+ case HANDLER: { \
+    Evas_List *dat = NULL, *l; \
+    if (__dec(e->data, e->size, &dat)) { \
+       for (l = dat; l; l = l->next) { \
+         __typ *__v; \
+         __v = l->data;
+#define END_STRING_INT_LIST(__v) \
+         free(__v->str); \
+         free(__v); \
+       } \
+       evas_list_free(dat); \
+    } \
+    reply_count++; \
+ } \
+   break;
+
+#define SEND_STRING_INT_LIST(__list, __typ1, __v1, __typ2, __v2, HANDLER) \
+ case HANDLER: { \
+    Evas_List *dat = NULL, *l; \
+    void *data; int bytes; \
+    for (l = e_module_list(); l; l = l->next) { \
+       __typ1 *__v1; \
+       __typ2 *__v2; \
+       __v1 = l->data; \
+       __v2 = calloc(1, sizeof(__typ2));
+#define END_SEND_STRING_INT_LIST(__v1, __op) \
+       dat = evas_list_append(dat, __v1); \
+    } \
+    data = e_ipc_codec_str_int_list_enc(dat, &bytes); \
+    SEND_DATA(__op); \
+    free(data); \
+    FREE_LIST(dat); \
+ } \
+   break;
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+/*
+ * ****************
+ * IPC handlers
+ * ****************
+ */
+
+/* what a handler looks like
+ * 
+ * E_REMOTE_OPTIONS
+ *   (opt, num_params, description, num_expected_replies, HANDLER),
+ * E_REMOTE_OUT
+ *   ...
+ * E_WM_IN
+ *   ...
+ * E_REMOTE_IN
+ *   ...
+ */
+
+#if 0
+{
+#endif
+   
+   
+   
+   
+   
+/****************************************************************************/
+#define HANDLER E_IPC_OP_MODULE_LOAD
+#if (TYPE == E_REMOTE_OPTIONS)
+     {"-module-load", 1, "Loads the module named 'OPT1' into memory", 0, HANDLER},
+#elif (TYPE == E_REMOTE_OUT)
+   REQ_STRING(params[0], HANDLER);
+#elif (TYPE == E_WM_IN)
+   STRING(s, HANDLER);
+   if (!e_module_find(s)) {
+      e_module_new(s);
+      SAVE;
+   }
+   END_STRING(s);
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HANDLER
+     
+/****************************************************************************/
+#define HANDLER E_IPC_OP_MODULE_UNLOAD
+#if (TYPE == E_REMOTE_OPTIONS)
+   {"-module-unload", 1, "Unloads the module named 'OPT1' from memory", 0, HANDLER},
+#elif (TYPE == E_REMOTE_OUT)
+   REQ_STRING(params[0], HANDLER);
+#elif (TYPE == E_WM_IN)
+   STRING(s, HANDLER);
+   E_Module *m;
+   if ((m = e_module_find(s))) {
+      e_module_disable(m);
+      e_object_del(E_OBJECT(m));
+      SAVE;
+   }
+   END_STRING(s);
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HANDLER
+   
+/****************************************************************************/
+#define HANDLER E_IPC_OP_MODULE_ENABLE
+#if (TYPE == E_REMOTE_OPTIONS)
+   {"-module-enable", 1, "Enable the module named 'OPT1'", 0, HANDLER},
+#elif (TYPE == E_REMOTE_OUT)
+   REQ_STRING(params[0], HANDLER);
+#elif (TYPE == E_WM_IN)
+   STRING(s, HANDLER);
+   E_Module *m;
+   if ((m = e_module_find(s))) {
+      e_module_enable(m);
+      SAVE;
+   }
+   END_STRING(s);
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HANDLER
+     
+/****************************************************************************/
+#define HANDLER E_IPC_OP_MODULE_DISABLE
+#if (TYPE == E_REMOTE_OPTIONS)
+   {"-module-disable", 1, "Disable the module named 'OPT1'", 0, HANDLER},
+#elif (TYPE == E_REMOTE_OUT)
+   REQ_STRING(params[0], HANDLER);
+#elif (TYPE == E_WM_IN)
+   STRING(s, HANDLER);
+   E_Module *m;
+   if ((m = e_module_find(s))) {
+      e_module_disable(m);
+      SAVE;
+   }
+   END_STRING(s);
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HANDLER
+     
+/****************************************************************************/
+#define HANDLER E_IPC_OP_MODULE_LIST
+#if (TYPE == E_REMOTE_OPTIONS)
+   {"-module-list", 0, "List all loaded modules", 1, HANDLER},
+#elif (TYPE == E_REMOTE_OUT)
+   REQ_NULL(HANDLER);
+#elif (TYPE == E_WM_IN)
+   SEND_STRING_INT_LIST(e_module_list(), E_Module, mod, E_Ipc_Str_Int, v, HANDLER);
+   v->str = mod->name;
+   v->val = mod->enabled;
+   END_SEND_STRING_INT_LIST(v, E_IPC_OP_MODULE_LIST_REPLY);
+#elif (TYPE == E_REMOTE_IN)
+#endif
+#undef HANDLER
+     
+/****************************************************************************/
+#define HANDLER E_IPC_OP_MODULE_LIST_REPLY
+#if (TYPE == E_REMOTE_OPTIONS)
+#elif (TYPE == E_REMOTE_OUT)
+#elif (TYPE == E_WM_IN)
+#elif (TYPE == E_REMOTE_IN)
+   STRING_INT_LIST(v, e_ipc_codec_str_int_list_dec, E_Ipc_Str_Int, HANDLER);
+   printf("REPLY: \"%s\" ENABLED %i\n", v->str, v->val);
+   END_STRING_INT_LIST(v);
+#endif
+#undef HANDLER
+     
+   
+   
+   
+   
+#if 0
+}
+#endif
diff --git a/src/bin/e_ipc_handlers_list.h b/src/bin/e_ipc_handlers_list.h
new file mode 100644 (file)
index 0000000..4ffe4f3
--- /dev/null
@@ -0,0 +1,118 @@
+#define E_IPC_OP_MODULE_LOAD 1
+#define E_IPC_OP_MODULE_UNLOAD 2
+#define E_IPC_OP_MODULE_ENABLE 3
+#define E_IPC_OP_MODULE_DISABLE 4
+#define E_IPC_OP_MODULE_LIST 5
+#define E_IPC_OP_MODULE_LIST_REPLY 6
+#define E_IPC_OP_BG_SET 7
+#define E_IPC_OP_BG_GET 8
+#define E_IPC_OP_BG_GET_REPLY 9
+#define E_IPC_OP_FONT_AVAILABLE_LIST 10
+#define E_IPC_OP_FONT_AVAILABLE_LIST_REPLY 11
+#define E_IPC_OP_FONT_APPLY 12
+#define E_IPC_OP_FONT_FALLBACK_CLEAR 13
+#define E_IPC_OP_FONT_FALLBACK_APPEND 14
+#define E_IPC_OP_FONT_FALLBACK_PREPEND 15
+#define E_IPC_OP_FONT_FALLBACK_LIST 16
+#define E_IPC_OP_FONT_FALLBACK_LIST_REPLY 17
+#define E_IPC_OP_FONT_FALLBACK_REMOVE 18
+#define E_IPC_OP_FONT_DEFAULT_SET 19
+#define E_IPC_OP_FONT_DEFAULT_GET 20
+#define E_IPC_OP_FONT_DEFAULT_GET_REPLY 21
+#define E_IPC_OP_FONT_DEFAULT_REMOVE 22
+#define E_IPC_OP_FONT_DEFAULT_LIST 23
+#define E_IPC_OP_FONT_DEFAULT_LIST_REPLY 24
+#define E_IPC_OP_RESTART 25
+#define E_IPC_OP_SHUTDOWN 26
+#define E_IPC_OP_LANG_LIST 27
+#define E_IPC_OP_LANG_LIST_REPLY 28
+#define E_IPC_OP_LANG_SET 29
+#define E_IPC_OP_LANG_GET 30
+#define E_IPC_OP_LANG_GET_REPLY 31
+#define E_IPC_OP_BINDING_MOUSE_LIST 32
+#define E_IPC_OP_BINDING_MOUSE_LIST_REPLY 33
+#define E_IPC_OP_BINDING_MOUSE_ADD 34
+#define E_IPC_OP_BINDING_MOUSE_DEL 35
+#define E_IPC_OP_BINDING_KEY_LIST 36
+#define E_IPC_OP_BINDING_KEY_LIST_REPLY 37
+#define E_IPC_OP_BINDING_KEY_ADD 38
+#define E_IPC_OP_BINDING_KEY_DEL 39
+#define E_IPC_OP_MENUS_SCROLL_SPEED_SET 40
+#define E_IPC_OP_MENUS_SCROLL_SPEED_GET 41
+#define E_IPC_OP_MENUS_SCROLL_SPEED_GET_REPLY 42
+#define E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_SET 43
+#define E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_GET 44
+#define E_IPC_OP_MENUS_FAST_MOVE_THRESHHOLD_GET_REPLY 45
+#define E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_SET 46
+#define E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET 47
+#define E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET_REPLY 48
+#define E_IPC_OP_BORDER_SHADE_ANIMATE_SET 49
+#define E_IPC_OP_BORDER_SHADE_ANIMATE_GET 50
+#define E_IPC_OP_BORDER_SHADE_ANIMATE_GET_REPLY 51
+#define E_IPC_OP_BORDER_SHADE_TRANSITION_SET 52
+#define E_IPC_OP_BORDER_SHADE_TRANSITION_GET 53
+#define E_IPC_OP_BORDER_SHADE_TRANSITION_GET_REPLY 54
+#define E_IPC_OP_BORDER_SHADE_SPEED_SET 55
+#define E_IPC_OP_BORDER_SHADE_SPEED_GET 56
+#define E_IPC_OP_BORDER_SHADE_SPEED_GET_REPLY 57
+#define E_IPC_OP_FRAMERATE_SET 58
+#define E_IPC_OP_FRAMERATE_GET 59
+#define E_IPC_OP_FRAMERATE_GET_REPLY 60
+#define E_IPC_OP_IMAGE_CACHE_SET 61
+#define E_IPC_OP_IMAGE_CACHE_GET 62
+#define E_IPC_OP_IMAGE_CACHE_GET_REPLY 63
+#define E_IPC_OP_FONT_CACHE_SET 64
+#define E_IPC_OP_FONT_CACHE_GET 65
+#define E_IPC_OP_FONT_CACHE_GET_REPLY 66
+#define E_IPC_OP_USE_EDGE_FLIP_SET 67
+#define E_IPC_OP_USE_EDGE_FLIP_GET 68
+#define E_IPC_OP_USE_EDGE_FLIP_GET_REPLY 69
+#define E_IPC_OP_EDGE_FLIP_TIMEOUT_SET 70
+#define E_IPC_OP_EDGE_FLIP_TIMEOUT_GET 71
+#define E_IPC_OP_EDGE_FLIP_TIMEOUT_GET_REPLY 72
+#define E_IPC_OP_MODULE_DIRS_LIST 73
+#define E_IPC_OP_MODULE_DIRS_LIST_REPLY 74
+#define E_IPC_OP_MODULE_DIRS_APPEND 75
+#define E_IPC_OP_MODULE_DIRS_PREPEND 76
+#define E_IPC_OP_MODULE_DIRS_REMOVE 77
+#define E_IPC_OP_THEME_DIRS_LIST 78
+#define E_IPC_OP_THEME_DIRS_LIST_REPLY 79
+#define E_IPC_OP_THEME_DIRS_APPEND 80
+#define E_IPC_OP_THEME_DIRS_PREPEND 81
+#define E_IPC_OP_THEME_DIRS_REMOVE 82
+#define E_IPC_OP_FONT_DIRS_LIST 83
+#define E_IPC_OP_FONT_DIRS_LIST_REPLY 84
+#define E_IPC_OP_FONT_DIRS_APPEND 85
+#define E_IPC_OP_FONT_DIRS_PREPEND 86
+#define E_IPC_OP_FONT_DIRS_REMOVE 87
+#define E_IPC_OP_DATA_DIRS_LIST 88
+#define E_IPC_OP_DATA_DIRS_LIST_REPLY 89
+#define E_IPC_OP_DATA_DIRS_APPEND 90
+#define E_IPC_OP_DATA_DIRS_PREPEND 91
+#define E_IPC_OP_DATA_DIRS_REMOVE 92
+#define E_IPC_OP_IMAGE_DIRS_LIST 93
+#define E_IPC_OP_IMAGE_DIRS_LIST_REPLY 94
+#define E_IPC_OP_IMAGE_DIRS_APPEND 95
+#define E_IPC_OP_IMAGE_DIRS_PREPEND 96
+#define E_IPC_OP_IMAGE_DIRS_REMOVE 97
+#define E_IPC_OP_INIT_DIRS_LIST 98
+#define E_IPC_OP_INIT_DIRS_LIST_REPLY 99
+#define E_IPC_OP_INIT_DIRS_APPEND 100
+#define E_IPC_OP_INIT_DIRS_PREPEND 101
+#define E_IPC_OP_INIT_DIRS_REMOVE 102
+#define E_IPC_OP_ICON_DIRS_LIST 103
+#define E_IPC_OP_ICON_DIRS_LIST_REPLY 104
+#define E_IPC_OP_ICON_DIRS_APPEND 105
+#define E_IPC_OP_ICON_DIRS_PREPEND 106
+#define E_IPC_OP_ICON_DIRS_REMOVE 107
+#define E_IPC_OP_BG_DIRS_LIST 108
+#define E_IPC_OP_BG_DIRS_LIST_REPLY 109
+#define E_IPC_OP_BG_DIRS_APPEND 110
+#define E_IPC_OP_BG_DIRS_PREPEND 111
+#define E_IPC_OP_BG_DIRS_REMOVE 112
+#define E_IPC_OP_DESKS_SET 113
+#define E_IPC_OP_DESKS_GET 114
+#define E_IPC_OP_DESKS_GET_REPLY 115
+#define E_IPC_OP_FOCUS_POLICY_SET 116
+#define E_IPC_OP_FOCUS_POLICY_GET 117
+#define E_IPC_OP_FOCUS_POLICY_GET_REPLY 118
index 87f54d1..0bd11fe 100644 (file)
@@ -3,6 +3,301 @@
  */
 #include "e.h"
 
+typedef struct _Opt Opt;
+
+struct _Opt
+{
+   char     *opt;
+   int       num_param;
+   char     *desc;
+   int       num_reply;
+   E_Ipc_Op  opcode;
+};
+
+Opt opts[] = {
+#define TYPE  E_REMOTE_OPTIONS
+#include      "e_ipc_handlers.h"
+#undef TYPE
+};
+
+static int _e_cb_signal_exit(void *data, int ev_type, void *ev);
+static int _e_ipc_init(void);
+static void _e_ipc_shutdown(void);
+static int _e_ipc_cb_server_add(void *data, int type, void *event);
+static int _e_ipc_cb_server_del(void *data, int type, void *event);
+static int _e_ipc_cb_server_data(void *data, int type, void *event);
+static void _e_help(void);
+
+/* local subsystem globals */
+static Ecore_Ipc_Server *_e_ipc_server  = NULL;
+static const char *display_name = NULL;
+static int reply_count = 0;
+static int reply_expect = 0;
+
+int
+main(int argc, char **argv)
+{
+   int i;
+   char *s, buf[1024];
+   
+   /* fix up DISPLAY to be :N.0 if no .screen is in it */
+   s = getenv("DISPLAY");
+   if (s)
+     {
+       char *p;
+       
+       p = strrchr(s, ':');
+       if (!p)
+         {
+            snprintf(buf, sizeof(buf), "DISPLAY=%s:0.0", s);
+            putenv(strdup(buf));
+         }
+       else
+         {
+            p = strrchr(p, '.');
+            if (!p)
+              {
+                 snprintf(buf, sizeof(buf), "DISPLAY=%s.0", s);
+                 putenv(strdup(buf));
+              }
+         }
+     }
+   
+   /* handle some command-line parameters */
+   display_name = (const char *)getenv("DISPLAY");
+   for (i = 1; i < argc; i++)
+     {
+       if ((!strcmp(argv[i], "-display")) && (i < (argc - 1)))
+         {
+            i++;
+            display_name = argv[i];
+         }
+       else if ((!strcmp(argv[i], "-h")) ||
+                (!strcmp(argv[i], "-help")) ||
+                (!strcmp(argv[i], "--h")) ||
+                (!strcmp(argv[i], "--help")))
+         {
+            _e_help();
+            exit(0);
+         }
+     }
+  
+   /* basic ecore init */
+   if (!ecore_init())
+     {
+       printf("ERROR: Enlightenment_remote cannot Initialize Ecore!\n"
+              "Perhaps you are out of memory?\n");
+       exit(-1);
+     }
+   ecore_app_args_set((int)argc, (const char **)argv);
+   /* setup a handler for when e is asked to exit via a system signal */
+   if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _e_cb_signal_exit, NULL))
+     {
+       printf("ERROR: Enlightenment_remote cannot set up an exit signal handler.\n"
+              "Perhaps you are out of memory?\n");
+       exit(-1);
+     }
+   /* init ipc */
+   if (!ecore_ipc_init())
+     {
+       printf("ERROR: Enlightenment_remote cannot initialize the ipc system.\n"
+              "Perhaps you are out of memory?\n");
+       exit(-1);
+     }
+   
+   /* setup e ipc service */
+   if (!_e_ipc_init())
+     {
+       printf("ERROR: Enlightenment_remote cannot set up the IPC socket.\n"
+              "Maybe try the '-display :0.0' option?\n");
+       exit(-1);
+     }
+   e_ipc_codec_init();
+
+   /* start our main loop */
+   ecore_main_loop_begin();
+
+   e_ipc_codec_shutdown();
+   _e_ipc_shutdown();
+   ecore_ipc_shutdown();
+   ecore_shutdown();
+   
+   /* just return 0 to keep the compiler quiet */
+   return 0;
+}
+
+/* local subsystem functions */
+static int
+_e_cb_signal_exit(void *data, int ev_type, void *ev)
+{
+   /* called on ctrl-c, kill (pid) (also SIGINT, SIGTERM and SIGQIT) */
+   ecore_main_loop_quit();
+   return 1;
+}
+
+static int
+_e_ipc_init(void)
+{
+   char buf[1024];
+   char *disp;
+   
+   disp = (char *)display_name;
+   if (!disp) disp = ":0";
+   snprintf(buf, sizeof(buf), "enlightenment-(%s)", disp);
+   _e_ipc_server = ecore_ipc_server_connect(ECORE_IPC_LOCAL_USER, buf, 0, NULL);
+   /* FIXME: we shoudl also try the generic ":0" if the display is ":0.0" */
+   /* 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);
+   
+   return 1;
+}
+
+static void
+_e_ipc_shutdown(void)
+{
+   if (_e_ipc_server)
+     {
+       ecore_ipc_server_del(_e_ipc_server);
+       _e_ipc_server = NULL;
+     }
+}
+
+static int
+_e_ipc_cb_server_add(void *data, int type, void *event)
+{
+   Ecore_Ipc_Event_Server_Add *e;
+   char **argv, **params;
+   int i, j, argc, process_count = 0;
+   
+   e = event;
+   ecore_app_args_get(&argc, &argv);
+   for (i = 1; i < argc; i++)
+     {
+       for (j = 0; j < (int)(sizeof(opts) / sizeof(Opt)); j++)
+         {
+            Opt *opt;
+            
+            opt = &(opts[j]);
+            if (!strcmp(opt->opt, argv[i]))
+              {
+                 if (i >= (argc - opt->num_param))
+                   {
+                      printf("ERROR: option %s expects %i parameters\n",
+                             opt->opt, opt->num_param);
+                      exit(-1);
+                   }
+                 else
+                   {
+                      params = &(argv[i + 1]);
+                      switch (opt->opcode)
+                        {
+#define TYPE  E_REMOTE_OUT
+#include      "e_ipc_handlers.h"
+#undef TYPE
+                         default:
+                           break;
+                        }
+                      process_count++;
+                      reply_expect += opt->num_reply;
+                      i += opt->num_param;
+                   }
+              }
+         }
+     }
+   if (process_count <= 0) _e_help();
+   if (reply_count >= reply_expect) ecore_main_loop_quit();
+   return 1;
+}
+
+static int
+_e_ipc_cb_server_del(void *data, int type, void *event)
+{
+   Ecore_Ipc_Event_Server_Del *e;
+   
+   e = event;
+   return 1; 
+}
+
+static int
+_e_ipc_cb_server_data(void *data, int type, void *event)
+{
+   Ecore_Ipc_Event_Server_Data *e;
+   
+   e = event;
+   printf("REPLY <- BEGIN\n");
+   switch (e->minor)
+     {
+#define TYPE  E_REMOTE_IN
+#include      "e_ipc_handlers.h"
+#undef TYPE
+      default:
+       break;
+     }
+   printf("REPLY <- END\n");
+   if (reply_count >= reply_expect) ecore_main_loop_quit();
+}
+
+static void
+_e_help(void)
+{
+   int i, j;
+   
+   printf("OPTIONS:\n");
+   printf("  -h This help\n");
+   printf("  -help This help\n");
+   printf("  --help This help\n");
+   printf("  --h This help\n");
+   printf("  -display OPT1 Connect to E running on display 'OPT1'\n");
+   for (j = 0; j < (int)(sizeof(opts) / sizeof(Opt)); j++)
+     {
+       Opt *opt;
+       
+       opt = &(opts[j]);
+       printf("  %s ", opt->opt);
+       for (i = 0; i < opt->num_param; i++)
+         printf("OPT%i ", i + 1);
+       printf("%s\n", opt->desc);
+     }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#if 0
 typedef struct _E_IPC_Opt_Handler E_IPC_Opt_Handler;
 
 struct _E_IPC_Opt_Handler
@@ -29,20 +324,6 @@ static void _e_help(void);
 
 static const char *_e_ipc_context_str(int context);
 static const char *_e_ipc_modifier_str(int mod);
-static Evas_List *_e_ipc_str_list_dec(char *data, int bytes);
-    
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_module_list_dec);
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_available_list_dec);
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_dec);
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_default_list_dec);
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_font_default_dec);
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_mouse_binding_list_dec);
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_mouse_binding_enc);
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_mouse_binding_dec);
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_key_binding_list_dec);
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_key_binding_enc);
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_key_binding_dec);
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_path_list_dec);
 
 /* local subsystem globals */
 static Ecore_Ipc_Server *_e_ipc_server  = NULL;
@@ -548,12 +829,13 @@ _e_ipc_cb_server_add(void *data, int type, void *event)
                                                  NULL, 0);
                            break;
                          case SIMPLE_STR_REQ:
-                           v = argv[i + 1];
+                           v = e_ipc_codec_str_enc(argv[i + 1], &data_size);
                            ecore_ipc_server_send(_e_ipc_server,
                                                  E_IPC_DOMAIN_REQUEST,
                                                  handler->simple_request_id,
                                                  0/*ref*/, 0/*ref_to*/, 0/*response*/,
-                                                 v, strlen(v));
+                                                 v, data_size);
+                           free(v);
                            break;
                          case MULTI_STR_REQ:
                            /* pack up the data "<str>0<str>0" */
@@ -673,7 +955,13 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
       case E_IPC_OP_BG_GET_REPLY:
        if (e->data)
          {
-            printf("REPLY: %s\n", (char *)e->data);
+            char *file = NULL;
+            
+            if (e_ipc_codec_str_dec(e->data, e->size, &file))
+              {  
+                 printf("REPLY: %s\n", file);
+                 free(file);
+              }
          }
        break;
       case E_IPC_OP_FONT_FALLBACK_LIST_REPLY:
@@ -683,7 +971,7 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
             E_Font_Fallback *eff;
             
             fallbacks = _e_ipc_font_fallback_list_dec(e->data, e->size);
-            while(fallbacks)
+            while (fallbacks)
               {
                  eff = fallbacks->data;
                  printf("REPLY: FALLBACK NAME=\"%s\"\n", eff->name);
@@ -701,7 +989,7 @@ _e_ipc_cb_server_data(void *data, int type, void *event)
             E_Font_Available *fa;
             
             available = _e_ipc_font_available_list_dec(e->data, e->size);
-            while(available)
+            while (available)
               {
                  fa = available->data;
                  printf("REPLY: AVAILABLE NAME=\"%s\"\n", fa->name);
@@ -1163,166 +1451,4 @@ _e_ipc_modifier_str(int mod)
      strcpy(_mod_buf, "NONE");
    return _mod_buf;
 }
-
-static Evas_List *
-_e_ipc_str_list_dec(char *data, int bytes)
-{
-   Evas_List *strs = NULL;
-   char *p;
-   
-   /* malformed list? */
-   if (data[bytes - 1] != 0) return NULL;
-   p = data;
-   while (p < (data + bytes))
-     {
-       strs = evas_list_append(strs, p);
-       p += strlen(p) + 1;
-     }
-   return strs;
-}
-
-/* list/struct encoding functions */
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_module_list_dec)
-{
-   ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Module);
-   ECORE_IPC_GETS(name);
-   ECORE_IPC_GET8(enabled);
-   ECORE_IPC_DEC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_available_list_dec)
-{
-   ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Font_Available);
-   ECORE_IPC_GETS(name);
-   ECORE_IPC_DEC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_dec)
-{
-   ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Font_Fallback);
-   ECORE_IPC_GETS(name);
-   ECORE_IPC_DEC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_default_list_dec)
-{
-   ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Font_Default);
-   ECORE_IPC_GETS(text_class);
-   ECORE_IPC_GETS(font);
-   ECORE_IPC_GET32(size);
-   ECORE_IPC_DEC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_font_default_dec)
-{  
-   ECORE_IPC_DEC_STRUCT_HEAD_MIN(E_Font_Default,
-                                1 +
-                                1 +
-                                4);
-   ECORE_IPC_CHEKS();
-   ECORE_IPC_GETS(text_class);
-   ECORE_IPC_GETS(font);
-   ECORE_IPC_GET32(size);
-   ECORE_IPC_DEC_STRUCT_FOOT();
-}
-
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_mouse_binding_list_dec)
-{
-   ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Config_Binding_Mouse);
-   ECORE_IPC_GET32(context);
-   ECORE_IPC_GET32(modifiers);
-   ECORE_IPC_GETS(action);
-   ECORE_IPC_GETS(params);
-   ECORE_IPC_GET8(button);
-   ECORE_IPC_GET8(any_mod);
-   ECORE_IPC_DEC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_mouse_binding_enc)
-{
-   int l1, l2;
-   ECORE_IPC_ENC_STRUCT_HEAD(E_Config_Binding_Mouse,
-                                4 + 4 +
-                                ECORE_IPC_SLEN(l1, action) +
-                                ECORE_IPC_SLEN(l2, params) +
-                                1 + 1);
-   ECORE_IPC_PUT32(context);
-   ECORE_IPC_PUT32(modifiers);
-   ECORE_IPC_PUTS(action, l1);
-   ECORE_IPC_PUTS(params, l2);
-   ECORE_IPC_PUT8(button);
-   ECORE_IPC_PUT8(any_mod);
-   ECORE_IPC_ENC_STRUCT_FOOT();
-}
-
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_mouse_binding_dec)
-{
-   ECORE_IPC_DEC_STRUCT_HEAD_MIN(E_Config_Binding_Mouse,
-                                    4 + 4 +
-                                    1 +
-                                    1 +
-                                    1 + 1);
-   ECORE_IPC_CHEKS();
-   ECORE_IPC_GET32(context);
-   ECORE_IPC_GET32(modifiers);
-   ECORE_IPC_GETS(action);
-   ECORE_IPC_GETS(params);
-   ECORE_IPC_GET8(button);
-   ECORE_IPC_GET8(any_mod);
-   ECORE_IPC_DEC_STRUCT_FOOT();
-}
-
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_key_binding_list_dec)
-{
-   ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Config_Binding_Key);
-   ECORE_IPC_GET32(context);
-   ECORE_IPC_GET32(modifiers);
-   ECORE_IPC_GETS(key);
-   ECORE_IPC_GETS(action);
-   ECORE_IPC_GETS(params);
-   ECORE_IPC_GET8(any_mod);
-   ECORE_IPC_DEC_EVAS_LIST_FOOT();
-}
-
-ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_key_binding_enc)
-{
-   int l1, l2, l3;
-   ECORE_IPC_ENC_STRUCT_HEAD(E_Config_Binding_Key,
-                            4 + 4 +
-                            ECORE_IPC_SLEN(l1, key) +
-                            ECORE_IPC_SLEN(l2, action) +
-                            ECORE_IPC_SLEN(l3, params) +
-                            1);
-   ECORE_IPC_PUT32(context);
-   ECORE_IPC_PUT32(modifiers);
-   ECORE_IPC_PUTS(key, l1);
-   ECORE_IPC_PUTS(action, l2);
-   ECORE_IPC_PUTS(params, l3);
-   ECORE_IPC_PUT8(any_mod);
-   ECORE_IPC_ENC_STRUCT_FOOT();
-}
-
-ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_key_binding_dec)
-{
-   ECORE_IPC_DEC_STRUCT_HEAD_MIN(E_Config_Binding_Key,
-                                4 + 4 +
-                                1 +
-                                1 +
-                                1 +
-                                1);
-   ECORE_IPC_CHEKS();
-   ECORE_IPC_GET32(context);
-   ECORE_IPC_GET32(modifiers);
-   ECORE_IPC_GETS(key);
-   ECORE_IPC_GETS(action);
-   ECORE_IPC_GETS(params);
-   ECORE_IPC_GET8(any_mod);
-   ECORE_IPC_DEC_STRUCT_FOOT();
-}
-
-ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_path_list_dec)
-{
-   ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Path_Dir);
-   ECORE_IPC_GETS(dir);
-   ECORE_IPC_DEC_EVAS_LIST_FOOT();
-}
+#endif
index a774fe9..2b02d1e 100644 (file)
@@ -18,6 +18,8 @@
 # endif
 #endif
 
+/* FIXME: this is all borken right now :( */
+
 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;
index f69f9ec..01b8427 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef _E_PRIVATE_H
-#define _E_PRIVATE_H
+#ifndef E_PRIVATE_H
+#define E_PRIVATE_H
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #define __UNUSED__
 #endif
 
+#define E_REMOTE_OPTIONS 1
+#define E_REMOTE_OUT     2
+#define E_WM_IN          3
+#define E_REMOTE_IN      4
+#define E_ENUM           5
+
 #define E_TYPEDEFS 1
 #include "e_ipc.h"
 #undef E_TYPEDEFS