diff --git a/configure.ac b/configure.ac index 9a65f6db1..d92bdc07b 100644 --- a/configure.ac +++ b/configure.ac @@ -92,7 +92,7 @@ extern char **environ; AC_DEFINE(HAVE_ENVIRON, 1, [Have environ var]) ]) -efl_version="1.11" +efl_version="1.11.99" AC_SUBST(efl_version) AC_CHECK_HEADERS([sys/timerfd.h sys/ptrace.h arpa/inet.h netinet/in.h]) diff --git a/src/bin/e_config.c b/src/bin/e_config.c index eb3dd0c28..4787c1786 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -621,6 +621,7 @@ _e_config_edd_init(Eina_Bool old) E_CONFIG_VAL(D, T, icon_theme, STR); E_CONFIG_VAL(D, T, icon_theme_overrides, UCHAR); + E_CONFIG_VAL(D, T, desktop_environment, STR); E_CONFIG_VAL(D, T, desk_flip_animate_mode, INT); E_CONFIG_VAL(D, T, desk_flip_animate_type, STR); @@ -2250,6 +2251,7 @@ _e_config_free(E_Config *ecf) if (ecf->input_method) eina_stringshare_del(ecf->input_method); if (ecf->exebuf_term_cmd) eina_stringshare_del(ecf->exebuf_term_cmd); if (ecf->icon_theme) eina_stringshare_del(ecf->icon_theme); + if (ecf->desktop_environment) eina_stringshare_del(ecf->desktop_environment); if (ecf->wallpaper_import_last_dev) eina_stringshare_del(ecf->wallpaper_import_last_dev); if (ecf->wallpaper_import_last_path) eina_stringshare_del(ecf->wallpaper_import_last_path); if (ecf->theme_default_border_style) eina_stringshare_del(ecf->theme_default_border_style); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 43ee59952..8997493bb 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -264,6 +264,7 @@ struct _E_Config const char *icon_theme; // GUI unsigned char icon_theme_overrides; // GUI + const char *desktop_environment; // GUI /* modes: * 1-"pane") horizontal or vertical movement to/from next/previous "screen" diff --git a/src/bin/e_main.c b/src/bin/e_main.c index dde87ad49..93689fe7b 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -524,6 +524,7 @@ main(int argc, char **argv) TS("E_Env Init Done"); _e_main_shutdown_push(e_env_shutdown); + efreet_desktop_environment_set(e_config->desktop_environment); e_util_env_set("E_ICON_THEME", e_config->icon_theme); ecore_exe_run_priority_set(e_config->priority); locked |= e_config->desklock_start_locked; diff --git a/src/modules/conf_applications/e_int_config_deskenv.c b/src/modules/conf_applications/e_int_config_deskenv.c index 50cfb8af5..e15c4f455 100644 --- a/src/modules/conf_applications/e_int_config_deskenv.c +++ b/src/modules/conf_applications/e_int_config_deskenv.c @@ -16,6 +16,9 @@ struct _E_Config_Dialog_Data int load_gnome; int load_kde; int exe_always_single_instance; + const char *desktop_environment; + Eina_List *desktop_environments; + int desktop_environment_id; }; /* a nice easy setup function that does the dirty work */ @@ -52,6 +55,25 @@ _fill_data(E_Config_Dialog_Data *cfdata) cfdata->load_gnome = e_config->deskenv.load_gnome; cfdata->load_kde = e_config->deskenv.load_kde; cfdata->exe_always_single_instance = e_config->exe_always_single_instance; + cfdata->desktop_environments = efreet_util_desktop_environments_list(); + eina_stringshare_replace(&(cfdata->desktop_environment), e_config->desktop_environment); + cfdata->desktop_environment_id = 0; + if (e_config->desktop_environment) + { + Eina_List *l; + const char *de; + int cde = 0; + + EINA_LIST_FOREACH(cfdata->desktop_environments, l, de) + { + cde++; + if (!strcmp(e_config->desktop_environment, de)) + { + cfdata->desktop_environment_id = cde; + break; + } + } + } } static void * @@ -67,17 +89,39 @@ _create_data(E_Config_Dialog *cfd __UNUSED__) static void _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) { + eina_list_free(cfdata->desktop_environments); E_FREE(cfdata); } static int _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) { + if (cfdata->desktop_environment_id > 0) + { + Eina_List *l; + const char *de; + int cde = 0; + + EINA_LIST_FOREACH(cfdata->desktop_environments, l, de) + { + if ((++cde) == cfdata->desktop_environment_id) + { + eina_stringshare_replace(&(cfdata->desktop_environment), de); + break; + } + } + } + else + { + eina_stringshare_replace(&(cfdata->desktop_environment), NULL); + } + return (e_config->deskenv.load_xrdb != cfdata->load_xrdb) || (e_config->deskenv.load_xmodmap != cfdata->load_xmodmap) || (e_config->deskenv.load_gnome != cfdata->load_gnome) || (e_config->deskenv.load_kde != cfdata->load_kde) || - (e_config->exe_always_single_instance != cfdata->exe_always_single_instance); + (e_config->exe_always_single_instance != cfdata->exe_always_single_instance) || + (e_util_strcmp(e_config->desktop_environment, cfdata->desktop_environment)); } /**--APPLY--**/ @@ -89,7 +133,9 @@ _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) e_config->deskenv.load_gnome = cfdata->load_gnome; e_config->deskenv.load_kde = cfdata->load_kde; e_config->exe_always_single_instance = cfdata->exe_always_single_instance; + eina_stringshare_replace(&(e_config->desktop_environment), cfdata->desktop_environment); e_config_save_queue(); + efreet_desktop_environment_set(e_config->desktop_environment); return 1; /* Apply was OK */ } @@ -99,6 +145,10 @@ _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data { /* generate the core widget layout for a basic dialog */ Evas_Object *o, *fr, *ob; + Eina_List *l; + E_Radio_Group *rg; + const char *de; + int cde = 0; o = e_widget_list_add(evas, 0, 0); @@ -125,7 +175,19 @@ _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data &(cfdata->load_kde)); e_widget_framelist_object_append(fr, ob); e_widget_list_object_append(o, fr, 1, 0, 0.0); - + + fr = e_widget_framelist_add(evas, _("Prefer applications from Desktop Environment"), 0); + rg = e_widget_radio_group_new(&(cfdata->desktop_environment_id)); + ob = e_widget_radio_add(evas, _("All"), cde, rg); + e_widget_framelist_object_append(fr, ob); + EINA_LIST_FOREACH(cfdata->desktop_environments, l, de) + { + ob = e_widget_radio_add(evas, de, ++cde, rg); + e_widget_framelist_object_append(fr, ob); + } + + e_widget_list_object_append(o, fr, 1, 0, 0.0); + return o; }