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