From 764755eb9fc7683d4eb3105db57b15d21bde224c Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Thu, 18 Sep 2014 10:49:47 +0200 Subject: [PATCH] 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 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; }