englebass pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=764755eb9fc7683d4eb3105db57b15d21bde224c
commit 764755eb9fc7683d4eb3105db57b15d21bde224c Author: Sebastian Dransfeld <[email protected]> Date: Thu Sep 18 10:49:47 2014 +0200 e: Add preferred desktop environment for apps In preferences we show which external applications can be used for setting preferences. If several desktop environments are installed, this list will have several duplicates, as there can be many different apps for setting a preference. With this setting we can filter out for one desktop_environment. @feature --- configure.ac | 2 +- src/bin/e_config.c | 2 + src/bin/e_config.h | 1 + src/bin/e_main.c | 1 + .../conf_applications/e_int_config_deskenv.c | 66 +++++++++++++++++++++- 5 files changed, 69 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 9a65f6d..d92bdc0 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 eb3dd0c..4787c17 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 43ee599..8997493 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 dde87ad..93689fe 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 50cfb8a..e15c4f4 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; } --
