f967afe5d91f9fb757debdcf355fe41c8ae5502b
[platform/upstream/enlightenment.git] / src / bin / e_int_config_comp.c
1 #include "e.h"
2
3 struct _E_Config_Dialog_Data
4 {
5    int         engine;
6    int         indirect;
7    int         texture_from_pixmap;
8    int         smooth_windows;
9    int         lock_fps;
10    int         grab;
11    int         vsync;
12    int         swap_mode;
13
14    const char *shadow_style;
15
16    struct
17    {
18       int disable_popups;
19       int disable_borders;
20       int disable_overrides;
21       int disable_menus;
22       int disable_objects;
23       int disable_all;
24       int toggle_changed : 1;
25    } match;
26
27    Evas_Object *styles_il;
28
29    int          keep_unmapped;
30    int          max_unmapped_pixels;
31    int          max_unmapped_time;
32    int          min_unmapped_time;
33    int          send_flush;
34    int          send_dump;
35    int          nocomp_fs;
36    int          nofade;
37
38    int          fps_show;
39    int          fps_corner;
40    int          fps_average_range;
41    double       first_draw_delay;
42    int disable_screen_effects;
43    int enable_advanced_features;
44    // the following options add the "/fast" suffix to the normal groups
45    int fast_popups;
46    int fast_borders;
47    int fast_menus;
48    int fast_overrides;
49    int fast_objects;
50    int fast;
51    Evas_Object *fast_ob;
52    int fast_changed : 1;
53 };
54
55 /* Protos */
56 static void        *_create_data(E_Config_Dialog *cfd);
57 static void         _free_data(E_Config_Dialog *cfd,
58                                E_Config_Dialog_Data *cfdata);
59 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd,
60                                           Evas *evas,
61                                           E_Config_Dialog_Data *cfdata);
62 static int          _basic_apply_data(E_Config_Dialog *cfd,
63                                       E_Config_Dialog_Data *cfdata);
64 static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd,
65                                           Evas *evas,
66                                           E_Config_Dialog_Data *cfdata);
67 static int          _advanced_apply_data(E_Config_Dialog *cfd,
68                                       E_Config_Dialog_Data *cfdata);
69
70 EAPI E_Config_Dialog *
71 e_int_config_comp(Evas_Object *parent EINA_UNUSED, const char *params __UNUSED__)
72 {
73    E_Config_Dialog *cfd;
74    E_Config_Dialog_View *v;
75
76    if (e_config_dialog_find("E", "appearance/comp")) return NULL;
77    v = E_NEW(E_Config_Dialog_View, 1);
78
79    v->create_cfdata = _create_data;
80    v->free_cfdata = _free_data;
81    v->basic.apply_cfdata = _basic_apply_data;
82    v->basic.create_widgets = _basic_create_widgets;
83    v->advanced.apply_cfdata = _advanced_apply_data;
84    v->advanced.create_widgets = _advanced_create_widgets;
85    
86    cfd = e_config_dialog_new(NULL, _("Composite Settings"),
87                              "E", "appearance/comp", "preferences-composite", 0, v, NULL);
88    e_dialog_resizable_set(cfd->dia, 1);
89    return cfd;
90 }
91
92 static void *
93 _create_data(E_Config_Dialog *cfd EINA_UNUSED)
94 {
95    E_Config_Dialog_Data *cfdata;
96    E_Comp_Config *conf = e_comp_config_get();
97
98    cfdata = E_NEW(E_Config_Dialog_Data, 1);
99
100    cfdata->engine = conf->engine;
101    if ((cfdata->engine != E_COMP_ENGINE_SW) &&
102        (cfdata->engine != E_COMP_ENGINE_GL))
103      cfdata->engine = E_COMP_ENGINE_SW;
104
105    cfdata->fast_popups = conf->fast_popups;
106    cfdata->fast_borders = conf->fast_borders;
107    cfdata->fast_overrides = conf->fast_overrides;
108    cfdata->fast_menus = conf->fast_menus;
109    cfdata->fast_objects = conf->fast_objects;
110    cfdata->match.disable_popups = conf->match.disable_popups;
111    cfdata->match.disable_borders = conf->match.disable_borders;
112    cfdata->match.disable_overrides = conf->match.disable_overrides;
113    cfdata->match.disable_menus = conf->match.disable_menus;
114    cfdata->match.disable_objects = conf->match.disable_objects;
115    cfdata->disable_screen_effects = conf->disable_screen_effects;
116    cfdata->enable_advanced_features = conf->enable_advanced_features;
117
118    cfdata->indirect = conf->indirect;
119    cfdata->texture_from_pixmap = conf->texture_from_pixmap;
120    cfdata->smooth_windows = conf->smooth_windows;
121    cfdata->lock_fps = conf->lock_fps;
122    cfdata->grab = conf->grab;
123    cfdata->vsync = conf->vsync;
124    cfdata->swap_mode = conf->swap_mode;
125    cfdata->shadow_style = eina_stringshare_add(conf->shadow_style);
126
127    cfdata->keep_unmapped = conf->keep_unmapped;
128    cfdata->max_unmapped_pixels = conf->max_unmapped_pixels;
129    cfdata->max_unmapped_time = conf->max_unmapped_time;
130    cfdata->min_unmapped_time = conf->min_unmapped_time;
131    cfdata->send_flush = conf->send_flush;
132    cfdata->send_dump = conf->send_dump;
133    cfdata->nocomp_fs = conf->nocomp_fs;
134    cfdata->nofade = conf->nofade;
135
136    cfdata->fps_show = conf->fps_show;
137    cfdata->fps_corner = conf->fps_corner;
138    cfdata->fps_average_range = conf->fps_average_range;
139
140    if (cfdata->fps_average_range < 1) cfdata->fps_average_range = 12;
141    else if (cfdata->fps_average_range > 120)
142      cfdata->fps_average_range = 120;
143    cfdata->first_draw_delay = conf->first_draw_delay;
144
145    return cfdata;
146 }
147
148 static void
149 _advanced_features_changed(E_Comp_Config *conf)
150 {
151    conf->enable_advanced_features = !conf->enable_advanced_features;
152    if (conf->enable_advanced_features)
153      e_util_dialog_internal(_("WARNING"),
154                             _("This option WILL break your desktop if you don't know what you're doing.<br>"
155                               "Do not file bugs about anything that occurs with this option enabled.<br>"
156                               "You have been warned."));
157 }
158
159 static void
160 _free_data(E_Config_Dialog *cfd  __UNUSED__,
161            E_Config_Dialog_Data *cfdata)
162 {
163    eina_stringshare_del(cfdata->shadow_style);
164    free(cfdata);
165 }
166
167 static void
168 _advanced_comp_style_toggle(void *oi, Evas_Object *o)
169 {
170    e_widget_disabled_set(oi, e_widget_check_checked_get(o));
171 }
172
173 static void
174 _advanced_matches_edit(void *data, void *d EINA_UNUSED)
175 {
176    E_Config_Dialog *cfd = data;
177
178    e_int_config_comp_match(cfd->dia->win, NULL);
179 }
180
181 static Evas_Object *
182 _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
183 {
184    Evas_Object *ob,*ol, *of, *otb, *oi, *orec0;
185    E_Radio_Group *rg;
186
187    e_dialog_resizable_set(cfd->dia, 1);
188    orec0 = evas_object_rectangle_add(evas);
189    evas_object_name_set(orec0, "style_shadows");
190
191    otb = e_widget_toolbook_add(evas, 48 * e_scale, 48 * e_scale);
192
193    ///////////////////////////////////////////
194    ol = e_widget_list_add(evas, 0, 0);
195
196    ob = e_widget_button_add(evas, _("Edit window matches"), NULL, _advanced_matches_edit, cfd, NULL);
197    e_widget_list_object_append(ol, ob, 0, 0, 0.5);
198
199    of = e_widget_frametable_add(evas, _("Select default style"), 0);
200    e_widget_frametable_content_align_set(of, 0.5, 0.5);
201    cfdata->styles_il = oi = e_comp_style_selector_create(evas, &(cfdata->shadow_style));
202    e_widget_frametable_object_append(of, oi, 0, 0, 1, 1, 1, 1, 1, 1);
203    e_widget_list_object_append(ol, of, 1, 1, 0.5);
204
205    e_widget_toolbook_page_append(otb, NULL, _("Styles"), ol, 1, 1, 1, 1, 0.5, 0.0);
206
207    //////////////////////////////////////////////
208
209    ol = e_widget_list_add(evas, 0, 0);
210    {
211       Evas_Object *w, *m, *p, *o1, *o2;
212
213       of = e_widget_framelist_add(evas, _("Fast Effects"), 0);
214       w = ob = e_widget_check_add(evas, _("Enable fast composite effects for windows"), &(cfdata->fast_borders));
215       e_widget_disabled_set(ob, cfdata->match.disable_borders);
216       e_widget_framelist_object_append(of, ob);
217       m = ob = e_widget_check_add(evas, _("Enable fast composite effects for menus"), &(cfdata->fast_menus));
218       e_widget_disabled_set(ob, cfdata->match.disable_menus);
219       e_widget_framelist_object_append(of, ob);
220       p = ob = e_widget_check_add(evas, _("Enable fast composite effects for popups"), &(cfdata->fast_popups));
221       e_widget_disabled_set(ob, cfdata->match.disable_popups);
222       e_widget_framelist_object_append(of, ob);
223       o1 = ob = e_widget_check_add(evas, _("Enable fast composite effects for objects"), &(cfdata->fast_objects));
224       e_widget_disabled_set(ob, cfdata->match.disable_objects);
225       e_widget_framelist_object_append(of, ob);
226       o2 = ob = e_widget_check_add(evas, _("Enable fast composite effects for overrides"), &(cfdata->fast_overrides));
227       e_widget_disabled_set(ob, cfdata->match.disable_overrides);
228       e_widget_framelist_object_append(of, ob);
229       e_widget_list_object_append(ol, of, 1, 0, 0.5);
230
231       of = e_widget_framelist_add(evas, _("Disable Effects"), 0);
232       ob = e_widget_check_add(evas, _("Disable composite effects for windows"), &(cfdata->match.disable_borders));
233       e_widget_on_change_hook_set(ob, _advanced_comp_style_toggle, w);
234       e_widget_framelist_object_append(of, ob);
235       ob = e_widget_check_add(evas, _("Disable composite effects for menus"), &(cfdata->match.disable_menus));
236       e_widget_on_change_hook_set(ob, _advanced_comp_style_toggle, m);
237       e_widget_framelist_object_append(of, ob);
238       ob = e_widget_check_add(evas, _("Disable composite effects for popups"), &(cfdata->match.disable_popups));
239       e_widget_on_change_hook_set(ob, _advanced_comp_style_toggle, p);
240       e_widget_framelist_object_append(of, ob);
241       ob = e_widget_check_add(evas, _("Disable composite effects for objects"), &(cfdata->match.disable_objects));
242       e_widget_on_change_hook_set(ob, _advanced_comp_style_toggle, o1);
243       e_widget_framelist_object_append(of, ob);
244       ob = e_widget_check_add(evas, _("Disable composite effects for overrides"), &(cfdata->match.disable_overrides));
245       e_widget_on_change_hook_set(ob, _advanced_comp_style_toggle, o2);
246       e_widget_framelist_object_append(of, ob);
247       ob = e_widget_check_add(evas, _("Disable composite effects for screen"), &(cfdata->disable_screen_effects));
248       e_widget_framelist_object_append(of, ob);
249       e_widget_list_object_append(ol, of, 1, 0, 0.5);
250    }
251
252    e_widget_toolbook_page_append(otb, NULL, _("Effects"), ol, 1, 1, 1, 1, 0.5, 0.0);
253
254    ///////////////////////////////////////////
255    ol = e_widget_list_add(evas, 0, 0);
256    of = e_widget_framelist_add(evas, _("Behavior"), 0);
257    ob = e_widget_check_add(evas, _("Smooth scaling"), &(cfdata->smooth_windows));
258    e_widget_framelist_object_append(of, ob);
259    ob = e_widget_check_add(evas, _("Don't composite fullscreen windows"), &(cfdata->nocomp_fs));
260    e_widget_framelist_object_append(of, ob);
261    ob = e_widget_check_add(evas, _("Don't fade backlight"), &(cfdata->nofade));
262    e_widget_framelist_object_append(of, ob);
263    e_widget_list_object_append(ol, of, 1, 1, 0.5);
264
265    of = e_widget_framelist_add(evas, _("Engine"), 0);
266    rg = e_widget_radio_group_new(&(cfdata->engine));
267    ob = e_widget_radio_add(evas, _("Software"), E_COMP_ENGINE_SW, rg);
268    e_widget_framelist_object_append(of, ob);
269    if (!getenv("ECORE_X_NO_XLIB"))
270      {
271         if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_X11))
272           {
273              ob = e_widget_radio_add(evas, _("OpenGL"), E_COMP_ENGINE_GL, rg);
274              e_widget_framelist_object_append(of, ob);
275
276              ob = e_widget_label_add(evas, _("OpenGL options:"));
277              e_widget_framelist_object_append(of, ob);
278              ob = e_widget_check_add(evas, _("Tear-free updates (VSynced)"), &(cfdata->vsync));
279              e_widget_framelist_object_append(of, ob);
280              ob = e_widget_check_add(evas, _("Texture from pixmap"), &(cfdata->texture_from_pixmap));
281              e_widget_framelist_object_append(of, ob);
282              ob = e_widget_label_add(evas, _("Assume swapping method:"));
283              e_widget_framelist_object_append(of, ob);
284              rg = e_widget_radio_group_new(&(cfdata->swap_mode));
285              ob = e_widget_radio_add(evas, _("Auto"), ECORE_EVAS_GL_X11_SWAP_MODE_AUTO, rg);
286              e_widget_framelist_object_append(of, ob);
287              ob = e_widget_radio_add(evas, _("Invalidate (full redraw)"), ECORE_EVAS_GL_X11_SWAP_MODE_FULL, rg);
288              e_widget_framelist_object_append(of, ob);
289              ob = e_widget_radio_add(evas, _("Copy from back to front"), ECORE_EVAS_GL_X11_SWAP_MODE_COPY, rg);
290              e_widget_framelist_object_append(of, ob);
291              ob = e_widget_radio_add(evas, _("Double buffered swaps"), ECORE_EVAS_GL_X11_SWAP_MODE_DOUBLE, rg);
292              e_widget_framelist_object_append(of, ob);
293              ob = e_widget_radio_add(evas, _("Triple buffered swaps"), ECORE_EVAS_GL_X11_SWAP_MODE_TRIPLE, rg);
294              e_widget_framelist_object_append(of, ob);
295 // lets not offer this anymore             
296 //             ob = e_widget_check_add(evas, _("Indirect OpenGL (EXPERIMENTAL)"), &(cfdata->indirect));
297 //             e_widget_framelist_object_append(of, ob);
298           }
299      }
300    e_widget_list_object_append(ol, of, 1, 1, 0.5);
301    e_widget_toolbook_page_append(otb, NULL, _("Rendering"), ol, 0, 0, 0, 0, 0.5, 0.0);
302
303    ///////////////////////////////////////////
304    ol = e_widget_list_add(evas, 0, 0);
305    of = e_widget_framelist_add(evas, _("X Messages"), 0);
306    ob = e_widget_check_add(evas, _("Send flush"), &(cfdata->send_flush));
307    e_widget_framelist_object_append(of, ob);
308    ob = e_widget_check_add(evas, _("Send dump"), &(cfdata->send_dump));
309    e_widget_framelist_object_append(of, ob);
310    e_widget_list_object_append(ol, of, 1, 1, 0.5);
311
312 /*   
313    ob = e_widget_check_add(evas, _("Keep hidden windows"), &(cfdata->keep_unmapped));
314    e_widget_list_object_append(ol, ob, 1, 1, 0.5);
315    of = e_widget_frametable_add(evas, _("Maximum hidden pixels"), 0);
316    e_widget_frametable_content_align_set(of, 0.5, 0.5);
317    rg = e_widget_radio_group_new(&(cfdata->max_unmapped_pixels));
318    ob = e_widget_radio_add(evas, _("1M"), 1 * 1024, rg);
319    e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 0, 0);
320    ob = e_widget_radio_add(evas, _("2M"), 2 * 1024, rg);
321    e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 0, 0);
322    ob = e_widget_radio_add(evas, _("4M"), 4 * 1024, rg);
323    e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 0, 0);
324    ob = e_widget_radio_add(evas, _("8M"), 8 * 1024, rg);
325    e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 0, 0);
326    ob = e_widget_radio_add(evas, _("16M"), 16 * 1024, rg);
327    e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 0, 0);
328    ob = e_widget_radio_add(evas, _("32M"), 32 * 1024, rg);
329    e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 0, 0);
330    ob = e_widget_radio_add(evas, _("64M"), 64 * 1024, rg);
331    e_widget_frametable_object_append(of, ob, 2, 0, 1, 1, 1, 1, 0, 0);
332    ob = e_widget_radio_add(evas, _("128M"), 128 * 1024, rg);
333    e_widget_frametable_object_append(of, ob, 2, 1, 1, 1, 1, 1, 0, 0);
334    ob = e_widget_radio_add(evas, _("256M"), 256 * 1024, rg);
335    e_widget_frametable_object_append(of, ob, 2, 2, 1, 1, 1, 1, 0, 0);
336    e_widget_list_object_append(ol, of, 1, 1, 0.5);
337  */
338    of = e_widget_framelist_add(evas, _("Sync"), 0);
339    ob = e_widget_check_add(evas, _("Grab Server during draw"), &(cfdata->grab));
340    e_widget_framelist_object_append(of, ob);
341    ob = e_widget_label_add(evas, _("Initial draw timeout for newly mapped windows"));
342    e_widget_framelist_object_append(of, ob);
343    ob = e_widget_slider_add(evas, 1, 0, _("%1.2f Seconds"), 0.01, 0.5, 0.01, 0, &(cfdata->first_draw_delay), NULL, 150);
344    e_widget_framelist_object_append(of, ob);
345    e_widget_list_object_append(ol, of, 1, 1, 0.5);
346    of = e_widget_framelist_add(evas, _("DANGEROUS"), 0);
347    ob = e_widget_check_add(evas, _("Enable advanced compositing features"), &(cfdata->enable_advanced_features));
348    e_widget_framelist_object_append(of, ob);
349    e_widget_list_object_append(ol, of, 1, 1, 0.5);
350    e_widget_toolbook_page_append(otb, NULL, _("Misc"), ol, 0, 0, 0, 0, 0.5, 0.0);
351
352    ///////////////////////////////////////////
353 /*   
354    ol = e_widget_list_add(evas, 0, 0);
355    ol2 = e_widget_list_add(evas, 1, 1);
356    of = e_widget_framelist_add(evas, _("Min hidden"), 0);
357    e_widget_framelist_content_align_set(of, 0.5, 0.0);
358    rg = e_widget_radio_group_new(&(cfdata->min_unmapped_time));
359    ob = e_widget_radio_add(evas, _("30 Seconds"), 30, rg);
360    e_widget_framelist_object_append(of, ob);
361    ob = e_widget_radio_add(evas, _("1 Minute"), 60, rg);
362    e_widget_framelist_object_append(of, ob);
363    ob = e_widget_radio_add(evas, _("5 Minutes"), 5 * 60, rg);
364    e_widget_framelist_object_append(of, ob);
365    ob = e_widget_radio_add(evas, _("30 Minutes"), 30 * 60, rg);
366    e_widget_framelist_object_append(of, ob);
367    ob = e_widget_radio_add(evas, _("2 Hours"), 2 * 3600, rg);
368    e_widget_framelist_object_append(of, ob);
369    ob = e_widget_radio_add(evas, _("10 Hours"), 10 * 3600, rg);
370    e_widget_framelist_object_append(of, ob);
371    ob = e_widget_radio_add(evas, _("Forever"), 0, rg);
372    e_widget_framelist_object_append(of, ob);
373    e_widget_list_object_append(ol2, of, 1, 1, 0.5);
374    of = e_widget_framelist_add(evas, _("Max hidden"), 0);
375    e_widget_framelist_content_align_set(of, 0.5, 0.0);
376    rg = e_widget_radio_group_new(&(cfdata->max_unmapped_time));
377    ob = e_widget_radio_add(evas, _("30 Seconds"), 30, rg);
378    e_widget_framelist_object_append(of, ob);
379    ob = e_widget_radio_add(evas, _("1 Minute"), 60, rg);
380    e_widget_framelist_object_append(of, ob);
381    ob = e_widget_radio_add(evas, _("5 Minutes"), 5 * 60, rg);
382    e_widget_framelist_object_append(of, ob);
383    ob = e_widget_radio_add(evas, _("30 Minutes"), 30 * 60, rg);
384    e_widget_framelist_object_append(of, ob);
385    ob = e_widget_radio_add(evas, _("2 Hours"), 2 * 3600, rg);
386    e_widget_framelist_object_append(of, ob);
387    ob = e_widget_radio_add(evas, _("10 Hours"), 10 * 3600, rg);
388    e_widget_framelist_object_append(of, ob);
389    ob = e_widget_radio_add(evas, _("Forever"), 0, rg);
390    e_widget_framelist_object_append(of, ob);
391    e_widget_list_object_append(ol2, of, 1, 1, 0.5);
392    e_widget_list_object_append(ol, ol2, 1, 1, 0.5);
393    e_widget_toolbook_page_append(otb, NULL, _("Timeouts"), ol, 0, 0, 0, 0, 0.5, 0.0);
394  */
395    ///////////////////////////////////////////
396    ol = e_widget_list_add(evas, 0, 0);
397
398    ob = e_widget_check_add(evas, _("Show Framerate"), &(cfdata->fps_show));
399    e_widget_list_object_append(ol, ob, 1, 1, 0.5);
400    ob = e_widget_label_add(evas, _("Rolling average frame count"));
401    e_widget_list_object_append(ol, ob, 1, 1, 0.5);
402    ob = e_widget_slider_add(evas, 1, 0, _("%1.0f Frames"), 1, 120, 1, 0,
403                             NULL, &(cfdata->fps_average_range), 240);
404    e_widget_list_object_append(ol, ob, 1, 1, 0.5);
405
406    of = e_widget_frametable_add(evas, _("Corner"), 0);
407    e_widget_frametable_content_align_set(of, 0.5, 0.5);
408    rg = e_widget_radio_group_new(&(cfdata->fps_corner));
409    ob = e_widget_radio_icon_add(evas, _("Top Left"), "preferences-position-top-left",
410                                 24, 24, 0, rg);
411    e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
412    ob = e_widget_radio_icon_add(evas, _("Top Right"), "preferences-position-top-right",
413                                 24, 24, 1, rg);
414    e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1);
415    ob = e_widget_radio_icon_add(evas, _("Bottom Left"), "preferences-position-bottom-left",
416                                 24, 24, 2, rg);
417    e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 1);
418    ob = e_widget_radio_icon_add(evas, _("Bottom Right"), "preferences-position-bottom-right",
419                                 24, 24, 3, rg);
420    e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1);
421    e_widget_list_object_append(ol, of, 1, 1, 0.5);
422
423    e_widget_toolbook_page_append(otb, NULL, _("Debug"), ol, 0, 0, 0, 0, 0.5, 0.0);
424
425    e_widget_toolbook_page_show(otb, 0);
426
427    return otb;
428 }
429
430 static int
431 _advanced_apply_data(E_Config_Dialog *cfd  __UNUSED__,
432                      E_Config_Dialog_Data *cfdata)
433 {
434    E_Comp_Config *conf = e_comp_config_get();
435
436    if ((cfdata->lock_fps != conf->lock_fps) ||
437        (cfdata->smooth_windows != conf->smooth_windows) ||
438        (cfdata->grab != conf->grab) ||
439        (cfdata->keep_unmapped != conf->keep_unmapped) ||
440        (cfdata->nocomp_fs != conf->nocomp_fs) ||
441        (cfdata->nofade != conf->nofade) ||
442        (cfdata->shadow_style != conf->shadow_style) ||
443        (cfdata->max_unmapped_pixels != conf->max_unmapped_pixels) ||
444        (cfdata->max_unmapped_time != conf->max_unmapped_time) ||
445        (cfdata->min_unmapped_time != conf->min_unmapped_time) ||
446        (cfdata->send_flush != conf->send_flush) ||
447        (cfdata->send_dump != conf->send_dump) ||
448        (cfdata->fps_show != conf->fps_show) ||
449        (cfdata->fps_corner != conf->fps_corner) ||
450        (cfdata->fps_average_range != conf->fps_average_range) ||
451        (cfdata->first_draw_delay != conf->first_draw_delay) ||
452        (conf->match.disable_popups != cfdata->match.disable_popups) ||
453        (conf->match.disable_borders != cfdata->match.disable_borders) ||
454        (conf->match.disable_overrides != cfdata->match.disable_overrides) ||
455        (conf->match.disable_menus != cfdata->match.disable_menus) ||
456        (conf->match.disable_objects != cfdata->match.disable_objects) ||
457        (conf->disable_screen_effects != cfdata->disable_screen_effects) ||
458        (conf->enable_advanced_features != cfdata->enable_advanced_features) ||
459        (conf->fast_popups != cfdata->fast_popups) ||
460        (conf->fast_borders != cfdata->fast_borders) ||
461        (conf->fast_overrides != cfdata->fast_overrides) ||
462        (conf->fast_menus != cfdata->fast_menus) ||
463        (conf->fast_objects != cfdata->fast_objects)
464        )
465      {
466         conf->fast_popups = cfdata->fast_popups;
467         conf->fast_borders = cfdata->fast_borders;
468         conf->fast_overrides = cfdata->fast_overrides;
469         conf->fast_menus = cfdata->fast_menus;
470         conf->fast_objects = cfdata->fast_objects;
471         conf->match.disable_popups = cfdata->match.disable_popups;
472         conf->match.disable_borders = cfdata->match.disable_borders;
473         conf->match.disable_overrides = cfdata->match.disable_overrides;
474         conf->match.disable_menus = cfdata->match.disable_menus;
475         conf->match.disable_objects = cfdata->match.disable_objects;
476         conf->disable_screen_effects = cfdata->disable_screen_effects;
477         if (conf->enable_advanced_features != cfdata->enable_advanced_features)
478           _advanced_features_changed(conf);
479         conf->lock_fps = cfdata->lock_fps;
480         conf->smooth_windows = cfdata->smooth_windows;
481         conf->grab = cfdata->grab;
482         conf->keep_unmapped = cfdata->keep_unmapped;
483         conf->nocomp_fs = cfdata->nocomp_fs;
484         conf->nofade = cfdata->nofade;
485         conf->max_unmapped_pixels = cfdata->max_unmapped_pixels;
486         conf->max_unmapped_time = cfdata->max_unmapped_time;
487         conf->min_unmapped_time = cfdata->min_unmapped_time;
488         conf->send_flush = cfdata->send_flush;
489         conf->send_dump = cfdata->send_dump;
490         conf->fps_show = cfdata->fps_show;
491         conf->fps_corner = cfdata->fps_corner;
492         conf->fps_average_range = cfdata->fps_average_range;
493         conf->first_draw_delay = cfdata->first_draw_delay;
494         if (conf->shadow_style)
495           eina_stringshare_del(conf->shadow_style);
496         conf->shadow_style = eina_stringshare_ref(cfdata->shadow_style);
497         e_comp_shadows_reset();
498      }
499    if ((cfdata->engine != conf->engine) ||
500        (cfdata->indirect != conf->indirect) ||
501        (cfdata->texture_from_pixmap != conf->texture_from_pixmap) ||
502        (cfdata->vsync != conf->vsync) ||
503        (cfdata->swap_mode != conf->swap_mode))
504      {
505         E_Action *a;
506
507         conf->engine = cfdata->engine;
508         conf->indirect = cfdata->indirect;
509         conf->texture_from_pixmap = cfdata->texture_from_pixmap;
510         conf->vsync = cfdata->vsync;
511         conf->swap_mode = cfdata->swap_mode;
512
513         a = e_action_find("restart");
514         if ((a) && (a->func.go)) a->func.go(NULL, NULL);
515      }
516    e_config_save_queue();
517    return 1;
518 }
519
520 static void
521 _basic_comp_style_fast_toggle(void *data, Evas_Object *o EINA_UNUSED)
522 {
523    E_Config_Dialog_Data *cfdata = data;
524    cfdata->fast_changed = 1;
525 }
526
527 static void
528 _basic_comp_style_toggle(void *data, Evas_Object *o)
529 {
530    E_Config_Dialog_Data *cfdata = data;
531    
532    e_widget_disabled_set(cfdata->styles_il, e_widget_check_checked_get(o));
533    e_widget_disabled_set(cfdata->fast_ob, e_widget_check_checked_get(o));
534    cfdata->match.toggle_changed = 1;
535 }
536
537 static Evas_Object *
538 _basic_create_widgets(E_Config_Dialog *cfd EINA_UNUSED,
539                       Evas *evas,
540                       E_Config_Dialog_Data *cfdata)
541 {
542    Evas_Object *ob,*ol, *of, *otb, *oi, *orec0, *tab;
543    E_Radio_Group *rg;
544
545    e_dialog_resizable_set(cfd->dia, 1);
546    orec0 = evas_object_rectangle_add(evas);
547    evas_object_name_set(orec0, "style_shadows");
548
549    tab = e_widget_table_add(evas, 0);
550    otb = e_widget_toolbook_add(evas, 48 * e_scale, 48 * e_scale);
551
552    ///////////////////////////////////////////
553    ol = e_widget_list_add(evas, 0, 0);
554
555    ob = e_widget_check_add(evas, _("Don't fade backlight"), &(cfdata->nofade));
556    e_widget_list_object_append(ol, ob, 1, 0, 0.5);
557    
558    cfdata->fast =
559      (cfdata->fast_menus && cfdata->fast_overrides && cfdata->fast_borders && cfdata->fast_popups && cfdata->fast_objects);
560    cfdata->fast_ob = ob = e_widget_check_add(evas, _("Enable \"fast\" composite effects"), &(cfdata->fast));
561    evas_object_data_set(ob, "cfdata", cfdata);
562    e_widget_list_object_append(ol, ob, 1, 0, 0.5);
563    e_widget_on_change_hook_set(ob, _basic_comp_style_fast_toggle, cfdata);
564
565    cfdata->match.disable_all =
566      (cfdata->match.disable_menus && cfdata->match.disable_overrides && cfdata->match.disable_borders &&
567       cfdata->match.disable_popups && cfdata->match.disable_objects && cfdata->disable_screen_effects);
568    e_widget_disabled_set(ob, cfdata->match.disable_all);
569    ob = e_widget_check_add(evas, _("Disable composite effects"), &(cfdata->match.disable_all));
570    evas_object_data_set(ob, "cfdata", cfdata);
571    e_widget_list_object_append(ol, ob, 1, 0, 0.5);
572
573    of = e_widget_frametable_add(evas, _("Select default style"), 0);
574    e_widget_frametable_content_align_set(of, 0.5, 0.5);
575    cfdata->styles_il = oi = e_comp_style_selector_create(evas, &(cfdata->shadow_style));
576    e_widget_frametable_object_append(of, oi, 0, 0, 1, 1, 1, 1, 1, 1);
577    e_widget_list_object_append(ol, of, 1, 1, 0.5);
578
579    e_widget_on_change_hook_set(ob, _basic_comp_style_toggle, cfdata);
580
581    e_widget_toolbook_page_append(otb, NULL, _("General"), ol, 1, 1, 1, 1, 0.5, 0.0);
582
583    ///////////////////////////////////////////
584    ol = e_widget_list_add(evas, 0, 0);
585
586    of = e_widget_framelist_add(evas, _("Behavior"), 0);
587
588    ob = e_widget_check_add(evas, _("Tear-free updates (VSynced)"), &(cfdata->vsync));
589    e_widget_framelist_object_append(of, ob);
590    
591    ob = e_widget_check_add(evas, _("Smooth scaling of window content"), &(cfdata->smooth_windows));
592    e_widget_framelist_object_append(of, ob);
593
594    ob = e_widget_check_add(evas, _("Don't composite fullscreen windows"), &(cfdata->nocomp_fs));
595    e_widget_framelist_object_append(of, ob);
596
597    e_widget_list_object_append(ol, of, 1, 0, 0.5);
598
599    of = e_widget_framelist_add(evas, _("Engine"), 0);
600    rg = e_widget_radio_group_new(&(cfdata->engine));
601    ob = e_widget_radio_add(evas, _("Software"), E_COMP_ENGINE_SW, rg);
602    e_widget_framelist_object_append(of, ob);
603    if (!getenv("ECORE_X_NO_XLIB"))
604      {
605         if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_X11))
606           {
607              ob = e_widget_radio_add(evas, _("OpenGL"), E_COMP_ENGINE_GL, rg);
608              e_widget_framelist_object_append(of, ob);
609           }
610      }
611    ob = e_widget_label_add(evas, _("To reset compositor:"));
612    e_widget_framelist_object_append(of, ob);
613    ob = e_widget_label_add(evas, _("Ctrl+Alt+Shift+Home"));
614    e_widget_framelist_object_append(of, ob);
615
616    e_widget_list_object_append(ol, of, 1, 0, 0.5);
617    
618    e_widget_toolbook_page_append(otb, NULL, _("Rendering"), ol, 0, 0, 0, 0, 0.5, 0.0);
619
620    e_widget_toolbook_page_show(otb, 0);
621
622
623    e_widget_table_object_append(tab, otb, 0, 0, 1, 1, 1, 1, 1, 1);
624    return tab;
625 }
626
627 static int
628 _basic_apply_data(E_Config_Dialog *cfd  __UNUSED__,
629                   E_Config_Dialog_Data *cfdata)
630 {
631    E_Comp_Config *conf = e_comp_config_get();
632
633    if (cfdata->match.toggle_changed || cfdata->fast_changed ||
634        (cfdata->lock_fps != conf->lock_fps) ||
635        (cfdata->smooth_windows != conf->smooth_windows) ||
636        (cfdata->grab != conf->grab) ||
637        (cfdata->nofade != conf->nofade) ||
638        (cfdata->keep_unmapped != conf->keep_unmapped) ||
639        (cfdata->nocomp_fs != conf->nocomp_fs) ||
640        (cfdata->shadow_style != conf->shadow_style) ||
641        (cfdata->max_unmapped_pixels != conf->max_unmapped_pixels) ||
642        (cfdata->max_unmapped_time != conf->max_unmapped_time) ||
643        (cfdata->min_unmapped_time != conf->min_unmapped_time) ||
644        (cfdata->send_flush != conf->send_flush) ||
645        (cfdata->send_dump != conf->send_dump) ||
646        (cfdata->fps_show != conf->fps_show) ||
647        (cfdata->fps_corner != conf->fps_corner) ||
648        (cfdata->fps_average_range != conf->fps_average_range) ||
649        (cfdata->first_draw_delay != conf->first_draw_delay)
650        )
651      {
652         if (cfdata->match.toggle_changed)
653           {
654              conf->match.disable_popups = cfdata->match.disable_popups = cfdata->match.disable_all;
655              conf->match.disable_borders = cfdata->match.disable_borders = cfdata->match.disable_all;
656              conf->match.disable_overrides = cfdata->match.disable_overrides = cfdata->match.disable_all;
657              conf->match.disable_menus = cfdata->match.disable_menus = cfdata->match.disable_all;
658              conf->match.disable_objects = cfdata->match.disable_objects = cfdata->match.disable_all;
659              conf->disable_screen_effects = cfdata->disable_screen_effects = cfdata->match.disable_all;
660           }
661         if (cfdata->fast_changed)
662           {
663              conf->fast_borders = cfdata->fast_borders = cfdata->fast;
664              conf->fast_popups = cfdata->fast_popups = cfdata->fast;
665              conf->fast_menus = cfdata->fast_menus = cfdata->fast;
666              conf->fast_objects = cfdata->fast_objects = cfdata->fast;
667              conf->fast_overrides = cfdata->fast_overrides = cfdata->fast;
668           }
669         conf->lock_fps = cfdata->lock_fps;
670         conf->smooth_windows = cfdata->smooth_windows;
671         conf->grab = cfdata->grab;
672         conf->nofade = cfdata->nofade;
673         conf->keep_unmapped = cfdata->keep_unmapped;
674         conf->nocomp_fs = cfdata->nocomp_fs;
675         conf->max_unmapped_pixels = cfdata->max_unmapped_pixels;
676         conf->max_unmapped_time = cfdata->max_unmapped_time;
677         conf->min_unmapped_time = cfdata->min_unmapped_time;
678         if (conf->enable_advanced_features != cfdata->enable_advanced_features)
679           _advanced_features_changed(conf);
680         conf->send_flush = cfdata->send_flush;
681         conf->send_dump = cfdata->send_dump;
682         conf->fps_show = cfdata->fps_show;
683         conf->fps_corner = cfdata->fps_corner;
684         conf->fps_average_range = cfdata->fps_average_range;
685         conf->first_draw_delay = cfdata->first_draw_delay;
686         if (conf->shadow_style)
687           eina_stringshare_del(conf->shadow_style);
688         conf->shadow_style = NULL;
689         if (cfdata->shadow_style)
690           conf->shadow_style = eina_stringshare_add(cfdata->shadow_style);
691         e_comp_shadows_reset();
692      }
693    if ((cfdata->engine != conf->engine) ||
694        (cfdata->indirect != conf->indirect) ||
695        (cfdata->texture_from_pixmap != conf->texture_from_pixmap) ||
696        (cfdata->vsync != conf->vsync))
697      {
698         E_Action *a;
699
700         conf->engine = cfdata->engine;
701         conf->indirect = cfdata->indirect;
702         conf->texture_from_pixmap = cfdata->texture_from_pixmap;
703         conf->vsync = cfdata->vsync;
704
705         a = e_action_find("restart");
706         if ((a) && (a->func.go)) a->func.go(NULL, NULL);
707      }
708    return e_comp_internal_save();
709 }
710