Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_config.c e_config.h e_module.c e_module.h 


Log Message:


add delayed module loading in idle time. moduels can register if they
should/can be delayed or not.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_config.c,v
retrieving revision 1.258
retrieving revision 1.259
diff -u -3 -r1.258 -r1.259
--- e_config.c  29 Jul 2007 06:58:23 -0000      1.258
+++ e_config.c  29 Jul 2007 10:24:52 -0000      1.259
@@ -174,6 +174,7 @@
 #define D _e_config_module_edd
    E_CONFIG_VAL(D, T, name, STR);
    E_CONFIG_VAL(D, T, enabled, UCHAR);
+   E_CONFIG_VAL(D, T, delayed, UCHAR);
 
    _e_config_font_default_edd = E_CONFIG_DD_NEW("E_Font_Default", 
                                                E_Font_Default);
@@ -741,52 +742,53 @@
      {
        E_Config_Module *em;
 
-#define CFG_MODULE(_name, _enabled) \
+#define CFG_MODULE(_name, _enabled, _delayed) \
    em = E_NEW(E_Config_Module, 1); \
    em->name = evas_stringshare_add(_name); \
    em->enabled = _enabled; \
+   em->delayed = _delayed; \
    e_config->modules = evas_list_append(e_config->modules, em)
 
-       CFG_MODULE("start", 1);
-       CFG_MODULE("ibar", 1);
-       CFG_MODULE("ibox", 1);
-       CFG_MODULE("dropshadow", 1);
-       CFG_MODULE("clock", 1);
-       CFG_MODULE("battery", 1);
-       CFG_MODULE("cpufreq", 1);
-       CFG_MODULE("temperature", 1);
-       CFG_MODULE("pager", 1);
-       CFG_MODULE("conf_wallpaper", 1);
-       CFG_MODULE("conf_theme", 1);
-       CFG_MODULE("conf_colors", 1);
-       CFG_MODULE("conf_fonts", 1);
-       CFG_MODULE("conf_borders", 1);
-       CFG_MODULE("conf_icon_theme", 1);
-       CFG_MODULE("conf_mouse_cursor", 1);
-       CFG_MODULE("conf_transitions", 1);
-       CFG_MODULE("conf_startup", 1);
-       CFG_MODULE("conf_applications", 1);
-       CFG_MODULE("conf_desks", 1);
-       CFG_MODULE("conf_desk", 1);
-       CFG_MODULE("conf_display", 1);
-       CFG_MODULE("conf_desklock", 1);
-       CFG_MODULE("conf_screensaver", 1);
-       CFG_MODULE("conf_dpms", 1);
-       CFG_MODULE("conf_shelves", 1);
-       CFG_MODULE("conf_keybindings", 1);
-       CFG_MODULE("conf_mousebindings", 1);
-       CFG_MODULE("conf_mouse", 1);
-       CFG_MODULE("conf_window_display", 1);
-       CFG_MODULE("conf_window_focus", 1);
-       CFG_MODULE("conf_window_manipulation", 1);
-       CFG_MODULE("conf_menus", 1);
-       CFG_MODULE("conf_clientlist", 1);
-       CFG_MODULE("conf_dialogs", 1);
-       CFG_MODULE("conf_performance", 1);
-       CFG_MODULE("conf_winlist", 1);
-       CFG_MODULE("conf_exebuf", 1);
-       CFG_MODULE("conf_paths", 1);
-       CFG_MODULE("conf_mime", 1);
+       CFG_MODULE("start", 1, 0);
+       CFG_MODULE("ibar", 1, 0);
+       CFG_MODULE("ibox", 1, 0);
+       CFG_MODULE("dropshadow", 1, 0);
+       CFG_MODULE("clock", 1, 0);
+       CFG_MODULE("battery", 1, 0);
+       CFG_MODULE("cpufreq", 1, 0);
+       CFG_MODULE("temperature", 1, 0);
+       CFG_MODULE("pager", 1, 0);
+       CFG_MODULE("conf_wallpaper", 1, 1);
+       CFG_MODULE("conf_theme", 1, 1);
+       CFG_MODULE("conf_colors", 1, 1);
+       CFG_MODULE("conf_fonts", 1, 1);
+       CFG_MODULE("conf_borders", 1, 1);
+       CFG_MODULE("conf_icon_theme", 1, 1);
+       CFG_MODULE("conf_mouse_cursor", 1, 1);
+       CFG_MODULE("conf_transitions", 1, 1);
+       CFG_MODULE("conf_startup", 1, 1);
+       CFG_MODULE("conf_applications", 1, 1);
+       CFG_MODULE("conf_desks", 1, 1);
+       CFG_MODULE("conf_desk", 1, 1);
+       CFG_MODULE("conf_display", 1, 1);
+       CFG_MODULE("conf_desklock", 1, 1);
+       CFG_MODULE("conf_screensaver", 1, 1);
+       CFG_MODULE("conf_dpms", 1, 1);
+       CFG_MODULE("conf_shelves", 1, 1);
+       CFG_MODULE("conf_keybindings", 1, 1);
+       CFG_MODULE("conf_mousebindings", 1, 1);
+       CFG_MODULE("conf_mouse", 1, 1);
+       CFG_MODULE("conf_window_display", 1, 1);
+       CFG_MODULE("conf_window_focus", 1, 1);
+       CFG_MODULE("conf_window_manipulation", 1, 1);
+       CFG_MODULE("conf_menus", 1, 1);
+       CFG_MODULE("conf_clientlist", 1, 1);
+       CFG_MODULE("conf_dialogs", 1, 1);
+       CFG_MODULE("conf_performance", 1, 1);
+       CFG_MODULE("conf_winlist", 1, 1);
+       CFG_MODULE("conf_exebuf", 1, 1);
+       CFG_MODULE("conf_paths", 1, 1);
+       CFG_MODULE("conf_mime", 1, 1);
      }
 #if 0
      {
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_config.h,v
retrieving revision 1.159
retrieving revision 1.160
diff -u -3 -r1.159 -r1.160
--- e_config.h  23 Jul 2007 16:32:10 -0000      1.159
+++ e_config.h  29 Jul 2007 10:24:53 -0000      1.160
@@ -305,6 +305,7 @@
 {
    const char    *name;
    unsigned char  enabled;
+   unsigned char  delayed;
 };
 
 struct _E_Config_Theme
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_module.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -3 -r1.81 -r1.82
--- e_module.c  26 Jul 2007 11:34:08 -0000      1.81
+++ e_module.c  29 Jul 2007 10:24:53 -0000      1.82
@@ -15,9 +15,12 @@
 static void _e_module_dialog_disable_show(const char *title, const char *body, 
E_Module *m);
 static void _e_module_cb_dialog_disable(void *data, E_Dialog *dia);
 static void _e_module_event_update_free(void *data, void *event);
+static int _e_module_cb_idler(void *data);
 
 /* local subsystem globals */
 static Evas_List *_e_modules = NULL;
+static Ecore_Idler *_e_module_idler = NULL;
+static Evas_List *_e_modules_delayed = NULL;
 
 EAPI int E_EVENT_MODULE_UPDATE = 0;
 
@@ -54,28 +57,30 @@
 EAPI void
 e_module_all_load(void)
 {
-   Evas_List *pl = NULL, *l;
+   Evas_List *l;
    
-   for (l = e_config->modules; l;)
+   for (l = e_config->modules; l; l = l->next)
      {
        E_Config_Module *em;
        E_Module *m;
        
        em = l->data;
-       pl = l;
-       l = l->next;
-       m = NULL;
-       if (em->name) m = e_module_new(em->name);
-       if (m)
+       if ((em->delayed) && (em->enabled))
          {
-            if (em->enabled) e_module_enable(m);
+            if (!_e_module_idler)
+              _e_module_idler = ecore_idler_add(_e_module_cb_idler, NULL);
+            _e_modules_delayed = 
+              evas_list_append(_e_modules_delayed,
+                               evas_stringshare_add(em->name));
          }
        else
          {
-            if (em->name) evas_stringshare_del(em->name);
-            E_FREE(em);
-            e_config->modules = evas_list_remove_list(e_config->modules, pl);
-            e_config_save_queue();
+            m = NULL;
+            if (em->name) m = e_module_new(em->name);
+            if (m)
+              {
+                 if (em->enabled) e_module_enable(m);
+              }
          }
      }
 }
@@ -417,6 +422,28 @@
    free(icon);
 }
 
+EAPI void
+e_module_delayed_set(E_Module *m, int delayed)
+{
+   Evas_List *l;
+   
+   for (l = e_config->modules; l; l = l->next)
+     {
+        E_Config_Module *em;
+       
+       em = l->data;
+       if ((em->name) && (!strcmp(m->name, em->name)))
+         {
+            if (em->delayed != delayed)
+              {
+                 em->delayed = delayed;
+                 e_config_save_queue();
+              }
+            break;
+         }
+     }
+}
+
 /* local subsystem functions */
 
 static void
@@ -492,4 +519,27 @@
    if (!ev) return;
    E_FREE(ev->name);
    E_FREE(ev);
+}
+
+static int
+_e_module_cb_idler(void *data)
+{
+   if (_e_modules_delayed)
+     {
+       const char *name;
+       E_Module *m;
+       
+       name = _e_modules_delayed->data;
+       _e_modules_delayed = evas_list_remove_list(_e_modules_delayed, 
_e_modules_delayed);
+       m = NULL;
+       if (name) m = e_module_new(name);
+       if (m)
+         {
+            e_module_enable(m);
+         }
+       evas_stringshare_del(name);
+     }
+   if (_e_modules_delayed) return 1;
+   _e_module_idler = NULL;
+   return 0;
 }
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_module.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- e_module.h  16 Jul 2007 02:15:37 -0000      1.18
+++ e_module.h  29 Jul 2007 10:24:53 -0000      1.19
@@ -69,6 +69,7 @@
 EAPI E_Module    *e_module_find(const char *name);
 EAPI Evas_List   *e_module_list(void);
 EAPI void         e_module_dialog_show(E_Module *m, const char *title, const 
char *body);
-
+EAPI void         e_module_delayed_set(E_Module *m, int delayed);
+    
 #endif
 #endif



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to