diff --git a/src/bin/e_comp_cfdata.c b/src/bin/e_comp_cfdata.c
index 79b371791..d5eccccf3 100644
--- a/src/bin/e_comp_cfdata.c
+++ b/src/bin/e_comp_cfdata.c
@@ -53,6 +53,7 @@ e_comp_cfdata_edd_init(E_Config_DD **conf_edd, E_Config_DD **match_edd)
E_CONFIG_VAL(D, T, smooth_windows, UCHAR);
E_CONFIG_VAL(D, T, first_draw_delay, DOUBLE);
E_CONFIG_VAL(D, T, disable_screen_effects, UCHAR);
+ E_CONFIG_VAL(D, T, enable_advanced_features, UCHAR);
E_CONFIG_VAL(D, T, fast_popups, UCHAR);
E_CONFIG_VAL(D, T, fast_borders, UCHAR);
E_CONFIG_VAL(D, T, fast_menus, UCHAR);
diff --git a/src/bin/e_comp_cfdata.h b/src/bin/e_comp_cfdata.h
index fc8439207..b1620eb43 100644
--- a/src/bin/e_comp_cfdata.h
+++ b/src/bin/e_comp_cfdata.h
@@ -31,6 +31,7 @@ struct _E_Comp_Config
unsigned char nofade;
double first_draw_delay;
Eina_Bool disable_screen_effects;
+ Eina_Bool enable_advanced_features;
// the following options add the "/fast" suffix to the normal groups
Eina_Bool fast_popups;
Eina_Bool fast_borders;
diff --git a/src/bin/e_int_config_comp.c b/src/bin/e_int_config_comp.c
index 3aae82d43..812d61dc1 100644
--- a/src/bin/e_int_config_comp.c
+++ b/src/bin/e_int_config_comp.c
@@ -40,6 +40,7 @@ struct _E_Config_Dialog_Data
int fps_average_range;
double first_draw_delay;
int disable_screen_effects;
+ int enable_advanced_features;
// the following options add the "/fast" suffix to the normal groups
int fast_popups;
int fast_borders;
@@ -112,6 +113,7 @@ _create_data(E_Config_Dialog *cfd EINA_UNUSED)
cfdata->match.disable_menus = conf->match.disable_menus;
cfdata->match.disable_objects = conf->match.disable_objects;
cfdata->disable_screen_effects = conf->disable_screen_effects;
+ cfdata->enable_advanced_features = conf->enable_advanced_features;
cfdata->indirect = conf->indirect;
cfdata->texture_from_pixmap = conf->texture_from_pixmap;
@@ -143,6 +145,17 @@ _create_data(E_Config_Dialog *cfd EINA_UNUSED)
return cfdata;
}
+static void
+_advanced_features_changed(E_Comp_Config *conf)
+{
+ conf->enable_advanced_features = !conf->enable_advanced_features;
+ if (conf->enable_advanced_features)
+ e_util_dialog_internal(_("WARNING"),
+ _("This option WILL break your desktop if you don't know what you're doing.
"
+ "Do not file bugs about anything that occurs with this option enabled.
"
+ "You have been warned."));
+}
+
static void
_free_data(E_Config_Dialog *cfd __UNUSED__,
E_Config_Dialog_Data *cfdata)
@@ -337,6 +350,10 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
ob = e_widget_slider_add(evas, 1, 0, _("%1.2f Seconds"), 0.01, 0.5, 0.01, 0, &(cfdata->first_draw_delay), NULL, 150);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(ol, of, 1, 1, 0.5);
+ of = e_widget_framelist_add(evas, _("DANGEROUS"), 0);
+ ob = e_widget_check_add(evas, _("Enable advanced compositing features"), &(cfdata->enable_advanced_features));
+ e_widget_framelist_object_append(of, ob);
+ e_widget_list_object_append(ol, of, 1, 1, 0.5);
e_widget_toolbook_page_append(otb, NULL, _("Misc"), ol, 0, 0, 0, 0, 0.5, 0.0);
///////////////////////////////////////////
@@ -445,6 +462,7 @@ _advanced_apply_data(E_Config_Dialog *cfd __UNUSED__,
(conf->match.disable_menus != cfdata->match.disable_menus) ||
(conf->match.disable_objects != cfdata->match.disable_objects) ||
(conf->disable_screen_effects != cfdata->disable_screen_effects) ||
+ (conf->enable_advanced_features != cfdata->enable_advanced_features) ||
(conf->fast_popups != cfdata->fast_popups) ||
(conf->fast_borders != cfdata->fast_borders) ||
(conf->fast_overrides != cfdata->fast_overrides) ||
@@ -463,6 +481,8 @@ _advanced_apply_data(E_Config_Dialog *cfd __UNUSED__,
conf->match.disable_menus = cfdata->match.disable_menus;
conf->match.disable_objects = cfdata->match.disable_objects;
conf->disable_screen_effects = cfdata->disable_screen_effects;
+ if (conf->enable_advanced_features != cfdata->enable_advanced_features)
+ _advanced_features_changed(conf);
conf->lock_fps = cfdata->lock_fps;
conf->smooth_windows = cfdata->smooth_windows;
conf->grab = cfdata->grab;
@@ -661,6 +681,8 @@ _basic_apply_data(E_Config_Dialog *cfd __UNUSED__,
conf->max_unmapped_pixels = cfdata->max_unmapped_pixels;
conf->max_unmapped_time = cfdata->max_unmapped_time;
conf->min_unmapped_time = cfdata->min_unmapped_time;
+ if (conf->enable_advanced_features != cfdata->enable_advanced_features)
+ _advanced_features_changed(conf);
conf->send_flush = cfdata->send_flush;
conf->send_dump = cfdata->send_dump;
conf->fps_show = cfdata->fps_show;