save modules list and load it again

SVN revision: 12361
This commit is contained in:
Carsten Haitzler 2004-12-05 09:34:59 +00:00
parent e6dc661ce1
commit 2f516dc4ad
4 changed files with 134 additions and 31 deletions

View File

@ -18,12 +18,22 @@ static void _e_config_save_cb(void *data);
/* local subsystem globals */ /* local subsystem globals */
static Ecore_Job *_e_config_save_job = NULL; static Ecore_Job *_e_config_save_job = NULL;
static E_Config_DD *_e_config_edd = NULL; static E_Config_DD *_e_config_edd = NULL;
static E_Config_DD *_e_config_module_edd = NULL;
/* externally accessible functions */ /* externally accessible functions */
int int
e_config_init(void) e_config_init(void)
{ {
_e_config_module_edd = E_CONFIG_DD_NEW("E_Config", E_Config);
#undef T
#undef D
#define T E_Config_Module
#define D _e_config_module_edd
E_CONFIG_VAL(D, T, name, STR);
E_CONFIG_VAL(D, T, enabled, UCHAR);
_e_config_edd = E_CONFIG_DD_NEW("E_Config", E_Config); _e_config_edd = E_CONFIG_DD_NEW("E_Config", E_Config);
#undef T #undef T
#undef D #undef D
@ -36,11 +46,13 @@ e_config_init(void)
E_CONFIG_VAL(D, T, framerate, DOUBLE); E_CONFIG_VAL(D, T, framerate, DOUBLE);
E_CONFIG_VAL(D, T, image_cache, INT); E_CONFIG_VAL(D, T, image_cache, INT);
E_CONFIG_VAL(D, T, font_cache, INT); E_CONFIG_VAL(D, T, font_cache, INT);
E_CONFIG_LIST(D, T, modules, _e_config_module_edd);
e_config = e_config_domain_load("e", _e_config_edd); e_config = e_config_domain_load("e", _e_config_edd);
if (!e_config) e_config = E_NEW(E_Config, 1); if (!e_config)
if (e_config)
{ {
/* DEFAULT CONFIG */
e_config = E_NEW(E_Config, 1);
e_config->desktop_default_background = strdup(PACKAGE_DATA_DIR"/data/themes/default.eet"); e_config->desktop_default_background = strdup(PACKAGE_DATA_DIR"/data/themes/default.eet");
e_config->menus_scroll_speed = 1000.0; e_config->menus_scroll_speed = 1000.0;
e_config->menus_fast_mouse_move_thresthold = 300.0; e_config->menus_fast_mouse_move_thresthold = 300.0;
@ -48,9 +60,24 @@ e_config_init(void)
e_config->framerate = 30.0; e_config->framerate = 30.0;
e_config->image_cache = 2048; e_config->image_cache = 2048;
e_config->font_cache = 512; e_config->font_cache = 512;
{
E_Config_Module *em;
em = E_NEW(E_Config_Module, 1);
em->name = strdup("ibar");
em->enabled = 1;
e_config->modules = evas_list_append(e_config->modules, em);
em = E_NEW(E_Config_Module, 1);
em->name = strdup("dropshadow");
em->enabled = 1;
e_config->modules = evas_list_append(e_config->modules, em);
em = E_NEW(E_Config_Module, 1);
em->name = strdup("clock");
em->enabled = 1;
e_config->modules = evas_list_append(e_config->modules, em);
}
} }
else
return 0;
E_CONFIG_LIMIT(e_config->menus_scroll_speed, 1.0, 20000.0); E_CONFIG_LIMIT(e_config->menus_scroll_speed, 1.0, 20000.0);
E_CONFIG_LIMIT(e_config->menus_fast_mouse_move_thresthold, 1.0, 2000.0); E_CONFIG_LIMIT(e_config->menus_fast_mouse_move_thresthold, 1.0, 2000.0);
E_CONFIG_LIMIT(e_config->menus_click_drag_timeout, 0.0, 10.0); E_CONFIG_LIMIT(e_config->menus_click_drag_timeout, 0.0, 10.0);
@ -65,13 +92,20 @@ e_config_shutdown(void)
{ {
if (e_config) if (e_config)
{ {
while (e_config->modules)
{
E_Config_Module *em;
em = e_config->modules->data;
e_config->modules = evas_list_remove(e_config->modules, em);
E_FREE(em->name);
E_FREE(em);
}
E_FREE(e_config->desktop_default_background); E_FREE(e_config->desktop_default_background);
E_FREE(e_config); E_FREE(e_config);
} }
if (_e_config_edd) E_CONFIG_DD_FREE(_e_config_edd);
{ E_CONFIG_DD_FREE(_e_config_module_edd);
E_CONFIG_DD_FREE(_e_config_edd);
}
return 1; return 1;
} }

View File

@ -1,18 +1,27 @@
#ifndef E_CONFIG_H #ifndef E_CONFIG_H
#define E_CONFIG_H #define E_CONFIG_H
typedef struct _E_Config E_Config; typedef struct _E_Config E_Config;
typedef struct _E_Config_Module E_Config_Module;
typedef Eet_Data_Descriptor E_Config_DD; typedef Eet_Data_Descriptor E_Config_DD;
struct _E_Config struct _E_Config
{ {
char *desktop_default_background; char *desktop_default_background;
double menus_scroll_speed; double menus_scroll_speed;
double menus_fast_mouse_move_thresthold; double menus_fast_mouse_move_thresthold;
double menus_click_drag_timeout; double menus_click_drag_timeout;
double framerate; double framerate;
int image_cache; int image_cache;
int font_cache; int font_cache;
Evas_List *modules;
};
struct _E_Config_Module
{
char *name;
unsigned char enabled;
}; };
#define E_CONFIG_DD_NEW(str, typ) \ #define E_CONFIG_DD_NEW(str, typ) \

View File

@ -277,10 +277,8 @@ main(int argc, char **argv)
/* ask all modules to save their config and then shutdown */ /* ask all modules to save their config and then shutdown */
e_module_save_all(); e_module_save_all();
e_module_shutdown();
/* save our config FIXME: check return value */
e_config_save(); e_config_save();
e_module_shutdown();
/* unroll our stack of shutdown functions with exit code of 0 */ /* unroll our stack of shutdown functions with exit code of 0 */
_e_main_shutdown(0); _e_main_shutdown(0);

View File

@ -36,26 +36,21 @@ static E_Module_Api _e_module_api =
int int
e_module_init(void) e_module_init(void)
{ {
Evas_List *l;
_e_path_modules = e_path_new(); _e_path_modules = e_path_new();
if (!_e_path_modules) return 0; if (!_e_path_modules) return 0;
e_path_path_append(_e_path_modules, "~/.e/e/modules"); e_path_path_append(_e_path_modules, "~/.e/e/modules");
e_path_path_append(_e_path_modules, PACKAGE_LIB_DIR"/enlightenment/modules"); e_path_path_append(_e_path_modules, PACKAGE_LIB_DIR"/enlightenment/modules");
/* FIXME: this is crap. need to have a separate call to load a list of */ for (l = e_config->modules; l; l = l->next)
/* modules that the user wants loaded */
{ {
E_Config_Module *em;
E_Module *m; E_Module *m;
m = e_module_new("test"); em = l->data;
if (m) e_module_enable(m); m = e_module_new(em->name);
m = e_module_new("ibar"); if ((em->enabled) && (m)) e_module_enable(m);
if (m) e_module_enable(m);
m = e_module_new("dropshadow");
if (m) e_module_enable(m);
#if 1
m = e_module_new("clock");
if (m) e_module_enable(m);
#endif
} }
return 1; return 1;
@ -82,6 +77,8 @@ e_module_new(char *name)
E_Module *m; E_Module *m;
char buf[4096]; char buf[4096];
const char *modpath, *tmp, *p; const char *modpath, *tmp, *p;
Evas_List *l;
int in_list = 0;
if (!name) return NULL; if (!name) return NULL;
m = E_OBJECT_ALLOC(E_Module, _e_module_free); m = E_OBJECT_ALLOC(E_Module, _e_module_free);
@ -143,6 +140,27 @@ e_module_new(char *name)
m->name = strdup(name); m->name = strdup(name);
m->dir = e_file_get_dir(modpath); m->dir = e_file_get_dir(modpath);
m->func.info(m); m->func.info(m);
for (l = e_config->modules; l; l = l->next)
{
E_Config_Module *em;
em = l->data;
if (!strcmp(em->name, m->name))
{
in_list = 1;
break;
}
}
if (!in_list)
{
E_Config_Module *em;
em = E_NEW(E_Config_Module, 1);
em->name = strdup(m->name);
em->enabled = 0;
e_config->modules = evas_list_append(e_config->modules, em);
e_config_save_queue();
}
return m; return m;
} }
@ -163,15 +181,30 @@ e_module_dir_get(E_Module *m)
int int
e_module_enable(E_Module *m) e_module_enable(E_Module *m)
{ {
Evas_List *l;
E_OBJECT_CHECK_RETURN(m, 0); E_OBJECT_CHECK_RETURN(m, 0);
if (m->enabled) return 0; if (m->enabled) return 0;
m->data = m->func.init(m); m->data = m->func.init(m);
if (m->data) m->enabled = 1; if (m->data) m->enabled = 1;
for (l = e_config->modules; l; l = l->next)
{
E_Config_Module *em;
em = l->data;
if (!strcmp(em->name, m->name))
{
em->enabled = 1;
e_config_save_queue();
break;
}
}
} }
int int
e_module_disable(E_Module *m) e_module_disable(E_Module *m)
{ {
Evas_List *l;
int ret; int ret;
E_OBJECT_CHECK_RETURN(m, 0); E_OBJECT_CHECK_RETURN(m, 0);
@ -179,6 +212,18 @@ e_module_disable(E_Module *m)
ret = m->func.shutdown(m); ret = m->func.shutdown(m);
m->data = NULL; m->data = NULL;
m->enabled = 0; m->enabled = 0;
for (l = e_config->modules; l; l = l->next)
{
E_Config_Module *em;
em = l->data;
if (!strcmp(em->name, m->name))
{
em->enabled = 0;
e_config_save_queue();
break;
}
}
return ret; return ret;
} }
@ -273,6 +318,23 @@ e_module_menu_new(void)
static void static void
_e_module_free(E_Module *m) _e_module_free(E_Module *m)
{ {
Evas_List *l;
for (l = e_config->modules; l; l = l->next)
{
E_Config_Module *em;
em = l->data;
if (!strcmp(em->name, m->name))
{
e_config->modules = evas_list_remove(e_config->modules, em);
E_FREE(em->name);
E_FREE(em);
e_config_save_queue();
break;
}
}
if (m->enabled) m->func.shutdown(m); if (m->enabled) m->func.shutdown(m);
if (m->name) free(m->name); if (m->name) free(m->name);
if (m->dir) free(m->dir); if (m->dir) free(m->dir);