-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:
Christopher Michael 2006-06-05 03:16:16 +00:00
parent ecfaf0da58
commit 27621d739b
4 changed files with 294 additions and 17 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -1,13 +1,22 @@
#include "e.h"
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 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,19 +53,38 @@ _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);
}
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);
of = e_widget_framelist_add(evas, _("Startup Settings"), 0);
_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);
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);
}