forked from enlightenment/enlightenment
-Added new config item for init screens into e_config.h/c.
-Bumped e_config.h File_Generation to coincide with added config value. -Fixed e_init.c to look for config value instead of hard-coded init.edj. -Newer Config Startup dialog that allows selecting (with previews) of the init. New init screens can now be copied into the init search directories, and easily selected via dialog. SVN revision: 23166
This commit is contained in:
parent
ecfaf0da58
commit
27621d739b
|
@ -315,6 +315,7 @@ e_config_init(void)
|
|||
/**/ /* == already configurable via ipc */
|
||||
E_CONFIG_VAL(D, T, config_version, INT); /**/
|
||||
E_CONFIG_VAL(D, T, show_splash, INT); /**/
|
||||
E_CONFIG_VAL(D, T, init_default_theme, STR);
|
||||
E_CONFIG_VAL(D, T, desktop_default_background, STR); /**/
|
||||
E_CONFIG_VAL(D, T, desktop_default_name, STR); /**/
|
||||
E_CONFIG_LIST(D, T, desktop_backgrounds, _e_config_desktop_bg_edd); /**/
|
||||
|
@ -509,6 +510,7 @@ e_config_init(void)
|
|||
#define IFCFGEND }
|
||||
IFCFG(0x008d);
|
||||
e_config->show_splash = 1;
|
||||
e_config->init_default_theme = NULL;
|
||||
e_config->desktop_default_background = NULL;
|
||||
e_config->desktop_default_name = evas_stringshare_add(_("Desktop %i, %i"));
|
||||
e_config->menus_scroll_speed = 1000.0;
|
||||
|
@ -1784,6 +1786,7 @@ _e_config_free(void)
|
|||
if (cc->name) evas_stringshare_del(cc->name);
|
||||
E_FREE(cc);
|
||||
}
|
||||
if (e_config->init_default_theme) evas_stringshare_del(e_config->init_default_theme);
|
||||
if (e_config->desktop_default_background) evas_stringshare_del(e_config->desktop_default_background);
|
||||
if (e_config->desktop_default_name) evas_stringshare_del(e_config->desktop_default_name);
|
||||
if (e_config->language) evas_stringshare_del(e_config->language);
|
||||
|
|
|
@ -47,10 +47,10 @@ typedef Eet_Data_Descriptor E_Config_DD;
|
|||
* defaults for e to work.
|
||||
*/
|
||||
#define E_CONFIG_FILE_EPOCH 0x0000
|
||||
/* increment this whenever a new set of configvalues are added but the users
|
||||
/* increment this whenever a new set of config values are added but the users
|
||||
* config doesn't need top be wiped - simply new values need to be put in
|
||||
*/
|
||||
#define E_CONFIG_FILE_GENERATION 0x0093
|
||||
#define E_CONFIG_FILE_GENERATION 0x0094
|
||||
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
|
||||
|
||||
#define E_EVAS_ENGINE_DEFAULT 0
|
||||
|
@ -75,6 +75,7 @@ struct _E_Config
|
|||
{
|
||||
int config_version;
|
||||
int show_splash; //GUI
|
||||
const char *init_default_theme;
|
||||
const char *desktop_default_background; // GUI
|
||||
Evas_List *desktop_backgrounds; // GUI
|
||||
const char *desktop_default_name;
|
||||
|
|
|
@ -67,8 +67,10 @@ e_init_init(void)
|
|||
/* first screen */
|
||||
if (l == screens)
|
||||
{
|
||||
/* FIXME: "init.edj" needs to come from config */
|
||||
s = e_path_find(path_init, "init.edj"),
|
||||
if (!e_config->init_default_theme)
|
||||
s = e_path_find(path_init, "init.edj");
|
||||
else
|
||||
s = e_path_find(path_init, e_config->init_default_theme);
|
||||
edje_object_file_set(o, s, "init/splash");
|
||||
if (s) evas_stringshare_del(s);
|
||||
_e_init_object = o;
|
||||
|
@ -76,8 +78,10 @@ e_init_init(void)
|
|||
/* other screens */
|
||||
else
|
||||
{
|
||||
/* FIXME: "init.edj" needs to come from config */
|
||||
s = e_path_find(path_init, "init.edj"),
|
||||
if (!e_config->init_default_theme)
|
||||
s = e_path_find(path_init, "init.edj");
|
||||
else
|
||||
s = e_path_find(path_init, e_config->init_default_theme);
|
||||
edje_object_file_set(o, s, "init/extra_screen");
|
||||
if (s) evas_stringshare_del(s);
|
||||
}
|
||||
|
@ -89,8 +93,10 @@ e_init_init(void)
|
|||
else
|
||||
{
|
||||
o = edje_object_add(_e_init_evas);
|
||||
/* FIXME: "init.edj" needs to come from config */
|
||||
s = e_path_find(path_init, "init.edj"),
|
||||
if (!e_config->init_default_theme)
|
||||
s = e_path_find(path_init, "init.edj");
|
||||
else
|
||||
s = e_path_find(path_init, e_config->init_default_theme);
|
||||
edje_object_file_set(o, s, "init/splash");
|
||||
if (s) evas_stringshare_del(s);
|
||||
_e_init_object = o;
|
||||
|
|
|
@ -4,10 +4,19 @@ static void *_create_data(E_Config_Dialog *cfd);
|
|||
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
||||
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
||||
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
|
||||
static void _load_inits(E_Config_Dialog *cfd, Evas_Object *il);
|
||||
void _ilist_cb_init_selected(void *data);
|
||||
static void _init_file_added(void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event, const char *path);
|
||||
|
||||
static Ecore_File_Monitor *_init_file_monitor;
|
||||
|
||||
struct _E_Config_Dialog_Data
|
||||
{
|
||||
int show_splash;
|
||||
char *init_default_theme;
|
||||
|
||||
E_Config_Dialog *cfd;
|
||||
Evas_Object *il;
|
||||
};
|
||||
|
||||
EAPI E_Config_Dialog *
|
||||
|
@ -31,6 +40,10 @@ static void
|
|||
_fill_data(E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
cfdata->show_splash = e_config->show_splash;
|
||||
if (e_config->init_default_theme)
|
||||
cfdata->init_default_theme = strdup(e_config->init_default_theme);
|
||||
else
|
||||
cfdata->init_default_theme = NULL;
|
||||
}
|
||||
|
||||
static void *
|
||||
|
@ -40,12 +53,20 @@ _create_data(E_Config_Dialog *cfd)
|
|||
|
||||
cfdata = E_NEW(E_Config_Dialog_Data, 1);
|
||||
_fill_data(cfdata);
|
||||
cfd->cfdata = cfdata;
|
||||
cfdata->cfd = cfd;
|
||||
return cfdata;
|
||||
}
|
||||
|
||||
static void
|
||||
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
if (_init_file_monitor)
|
||||
{
|
||||
ecore_file_monitor_del(_init_file_monitor);
|
||||
_init_file_monitor = NULL;
|
||||
}
|
||||
if (cfdata->init_default_theme) free(cfdata->init_default_theme);
|
||||
free(cfdata);
|
||||
}
|
||||
|
||||
|
@ -53,6 +74,17 @@ static int
|
|||
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
e_config->show_splash = cfdata->show_splash;
|
||||
if (e_config->init_default_theme)
|
||||
evas_stringshare_del(e_config->init_default_theme);
|
||||
|
||||
if (!cfdata->init_default_theme[0])
|
||||
e_config->init_default_theme = NULL;
|
||||
else
|
||||
{
|
||||
const char *f = ecore_file_get_file(cfdata->init_default_theme);
|
||||
e_config->init_default_theme = evas_stringshare_add(f);
|
||||
}
|
||||
|
||||
e_config_save_queue();
|
||||
return 1;
|
||||
}
|
||||
|
@ -60,14 +92,249 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
static Evas_Object *
|
||||
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
Evas_Object *o, *of, *ob;
|
||||
Evas_Object *ot, *ob, *il, *im;
|
||||
char path[4096];
|
||||
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
ot = e_widget_table_add(evas, 0);
|
||||
il = e_widget_ilist_add(evas, 48, 48, &(cfdata->init_default_theme));
|
||||
cfdata->il = il;
|
||||
e_widget_ilist_selector_set(il, 1);
|
||||
e_widget_min_size_set(il, 180, 40);
|
||||
|
||||
_load_inits(cfd, il);
|
||||
im = cfd->data;
|
||||
|
||||
e_widget_table_object_append(ot, il, 0, 0, 1, 2, 1, 1, 1, 1);
|
||||
e_widget_table_object_append(ot, im, 1, 0, 1, 2, 1, 1, 1, 1);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Startup Settings"), 0);
|
||||
ob = e_widget_check_add(evas, _("Show Splash Screen At Boot"), &(cfdata->show_splash));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
e_widget_table_object_append(ot, ob, 0, 3, 2, 1, 1, 0, 0, 0);
|
||||
|
||||
return o;
|
||||
if (_init_file_monitor)
|
||||
{
|
||||
ecore_file_monitor_del(_init_file_monitor);
|
||||
_init_file_monitor = NULL;
|
||||
}
|
||||
|
||||
snprintf(path, sizeof(path), "%s/.e/e/init", e_user_homedir_get());
|
||||
_init_file_monitor = ecore_file_monitor_add(path, _init_file_added, cfdata);
|
||||
|
||||
return ot;
|
||||
}
|
||||
|
||||
static void
|
||||
_load_inits(E_Config_Dialog *cfd, Evas_Object *il)
|
||||
{
|
||||
Evas *evas;
|
||||
Evas_Object *ic, *im, *o, *init_obj;
|
||||
Evas_List *init_dirs, *init;
|
||||
Ecore_Evas *eebuf;
|
||||
Evas *evasbuf;
|
||||
int i = 0;
|
||||
int selnum = -1;
|
||||
const char *s;
|
||||
char *c;
|
||||
char *homedir;
|
||||
|
||||
if (!il) return;
|
||||
|
||||
homedir = e_user_homedir_get();
|
||||
|
||||
evas = evas_object_evas_get(il);
|
||||
init_obj = edje_object_add(cfd->dia->win->evas);
|
||||
eebuf = ecore_evas_buffer_new(1, 1);
|
||||
evasbuf = ecore_evas_get(eebuf);
|
||||
o = edje_object_add(evasbuf);
|
||||
|
||||
e_widget_ilist_header_append(il, NULL, _("Theme"));
|
||||
i++;
|
||||
|
||||
/* Load the init */
|
||||
s = e_path_find(path_init, "init.edj");
|
||||
c = strdup(s);
|
||||
if (edje_object_file_set(o, s, "init/splash"))
|
||||
{
|
||||
Evas_Object *ic = NULL;
|
||||
|
||||
ic = edje_object_add(evas);
|
||||
e_util_edje_icon_set(ic, "enlightenment/run");
|
||||
|
||||
/*
|
||||
ic = e_widget_preview_add(evas, 48, 48);
|
||||
e_widget_preview_edje_set(ic, s, "init/splash");
|
||||
*/
|
||||
|
||||
e_widget_ilist_append(il, ic, _("Theme Init"), _ilist_cb_init_selected, cfd, "");
|
||||
if (!e_config->init_default_theme)
|
||||
selnum = i;
|
||||
|
||||
i++;
|
||||
}
|
||||
im = e_widget_preview_add(cfd->dia->win->evas, 320,
|
||||
(320 * e_zone_current_get(cfd->dia->win->container)->h) /
|
||||
e_zone_current_get(cfd->dia->win->container)->w);
|
||||
|
||||
e_widget_preview_edje_set(im, s, "init/splash");
|
||||
evas_object_del(init_obj);
|
||||
|
||||
evas_object_del(o);
|
||||
ecore_evas_free(eebuf);
|
||||
if (s) evas_stringshare_del(s);
|
||||
|
||||
/* Load other inits */
|
||||
init_dirs = e_path_dir_list_get(path_init);
|
||||
for (init = init_dirs; init; init = init->next)
|
||||
{
|
||||
E_Path_Dir *d;
|
||||
int detected;
|
||||
char *init_file;
|
||||
Ecore_List *inits;
|
||||
|
||||
d = init->data;
|
||||
if (!ecore_file_is_dir(d->dir)) continue;
|
||||
inits = ecore_file_ls(d->dir);
|
||||
if (!inits) continue;
|
||||
|
||||
detected = 0;
|
||||
if (homedir)
|
||||
{
|
||||
if (!strncmp(d->dir, homedir, strlen(homedir)))
|
||||
{
|
||||
e_widget_ilist_header_append(il, NULL, _("Personal"));
|
||||
i++;
|
||||
detected = 1;
|
||||
}
|
||||
}
|
||||
if (!detected)
|
||||
{
|
||||
if (!strncmp(d->dir, e_prefix_data_get(), strlen(e_prefix_data_get())))
|
||||
{
|
||||
e_widget_ilist_header_append(il, NULL, _("System"));
|
||||
i++;
|
||||
detected = 1;
|
||||
}
|
||||
}
|
||||
if (!detected)
|
||||
{
|
||||
e_widget_ilist_header_append(il, NULL, _("Other"));
|
||||
i++;
|
||||
detected = 1;
|
||||
}
|
||||
|
||||
while ((init_file = ecore_list_next(inits)))
|
||||
{
|
||||
char full_path[4096];
|
||||
|
||||
snprintf(full_path, sizeof(full_path), "%s/%s", d->dir, init_file);
|
||||
if (ecore_file_is_dir(full_path)) continue;
|
||||
if (!e_util_edje_collection_exists(full_path, "init/splash")) continue;
|
||||
|
||||
ic = edje_object_add(evas);
|
||||
e_util_edje_icon_set(ic, "enlightenment/run");
|
||||
|
||||
/*
|
||||
* Using live previews for icons in list here
|
||||
* really drains resources. */
|
||||
|
||||
/*
|
||||
ic = e_widget_preview_add(evas, 48, 48);
|
||||
e_widget_preview_edje_set(ic, full_path, "init/splash");
|
||||
*/
|
||||
|
||||
/* e_thumb_generate cannot handle init splash yet */
|
||||
|
||||
/*
|
||||
if (!e_thumb_exists(full_path))
|
||||
ic = e_thumb_generate_begin(full_path, 48, 48, evas, &ic, NULL, NULL);
|
||||
else
|
||||
ic = e_thumb_evas_object_get(full_path, evas, 48, 48, 1);
|
||||
*/
|
||||
|
||||
e_widget_ilist_append(il, ic, ecore_file_strip_ext(init_file), _ilist_cb_init_selected, cfd, full_path);
|
||||
|
||||
if ((e_config->init_default_theme) &&
|
||||
(!strcmp(e_config->init_default_theme, init_file)))
|
||||
{
|
||||
E_Zone *z;
|
||||
|
||||
z = e_zone_current_get(cfd->dia->win->container);
|
||||
|
||||
selnum = i;
|
||||
evas_object_del(im);
|
||||
im = e_widget_preview_add(cfd->dia->win->evas, 320, (320 * z->h) / z->w);
|
||||
e_widget_preview_edje_set(im, full_path, "init/splash");
|
||||
}
|
||||
i++;
|
||||
}
|
||||
free(init_file);
|
||||
ecore_list_destroy(inits);
|
||||
}
|
||||
evas_list_free(init);
|
||||
if (init_dirs) e_path_dir_list_free(init_dirs);
|
||||
free(c);
|
||||
cfd->data = im;
|
||||
e_widget_ilist_go(il);
|
||||
if (selnum >= 0)
|
||||
e_widget_ilist_selected_set(il, selnum);
|
||||
|
||||
free(homedir);
|
||||
}
|
||||
|
||||
void
|
||||
_ilist_cb_init_selected(void *data)
|
||||
{
|
||||
E_Config_Dialog *cfd;
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
Evas *evas;
|
||||
const char *init;
|
||||
const char *f;
|
||||
|
||||
cfd = data;
|
||||
cfdata = cfd->cfdata;
|
||||
evas = cfd->dia->win->evas;
|
||||
|
||||
if (!cfdata->init_default_theme[0])
|
||||
init = e_path_find(path_init, "init.edj");
|
||||
else
|
||||
{
|
||||
f = ecore_file_get_file(cfd->cfdata->init_default_theme);
|
||||
init = e_path_find(path_init, f);
|
||||
}
|
||||
e_widget_preview_edje_set(cfd->data, init, "init/splash");
|
||||
}
|
||||
|
||||
static void
|
||||
_init_file_added(void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event, const char *path)
|
||||
{
|
||||
E_Config_Dialog *cfd;
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
Evas *evas;
|
||||
Evas_Object *il, *ic;
|
||||
char *file, *noext;
|
||||
|
||||
cfdata = data;
|
||||
if (!cfdata) return;
|
||||
|
||||
il = cfdata->il;
|
||||
if (!il) return;
|
||||
|
||||
cfd = cfdata->cfd;
|
||||
if (!cfd) return;
|
||||
|
||||
evas = e_win_evas_get(cfd->dia->win);
|
||||
|
||||
file = (char *)ecore_file_get_file((char *)path);
|
||||
noext = ecore_file_strip_ext(file);
|
||||
|
||||
if (event == ECORE_FILE_EVENT_CREATED_FILE)
|
||||
{
|
||||
if (e_util_edje_collection_exists((char *)path, "init/splash"))
|
||||
{
|
||||
ic = edje_object_add(evas);
|
||||
e_util_edje_icon_set(ic, "enlightenment/run");
|
||||
e_widget_ilist_append(il, ic, noext, _ilist_cb_init_selected, cfd, (char *)path);
|
||||
}
|
||||
}
|
||||
else if (event == ECORE_FILE_EVENT_DELETED_FILE)
|
||||
e_widget_ilist_remove_label(il, noext);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue