Tizen 2.1 release
[platform/core/uifw/e17.git] / src / modules / conf_performance / e_int_config_engine.c
1 #include "e.h"
2
3 static void *_create_data(E_Config_Dialog *cfd);
4 static void _fill_data(E_Config_Dialog_Data *cfdata);
5 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
6 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
7 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
8 static int _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
9 static void _cb_composite_change(void *data, Evas_Object *obj);
10 static void _cb_confirm_yes(void *data);
11 static void _cb_confirm_no(void *data);
12
13 struct _E_Config_Dialog_Data
14 {
15    E_Config_Dialog *cfd;
16
17    int use_composite;
18    Evas_Object *o_composite;
19 };
20
21 E_Config_Dialog *
22 e_int_config_engine(E_Container *con, const char *params __UNUSED__)
23 {
24    E_Config_Dialog *cfd;
25    E_Config_Dialog_View *v;
26
27    if (e_config_dialog_find("E", "advanced/engine")) return NULL;
28
29    v = E_NEW(E_Config_Dialog_View, 1);
30    if (!v) return NULL;
31    v->create_cfdata = _create_data;
32    v->free_cfdata = _free_data;
33    v->basic.apply_cfdata = _basic_apply_data;
34    v->basic.create_widgets = _basic_create_widgets;
35    v->basic.check_changed = _basic_check_changed;
36
37    cfd = e_config_dialog_new(con, _("Engine Settings"), "E", "advanced/engine",
38                              "preferences-engine", 0, v, NULL);
39    return cfd;
40 }
41
42 static void *
43 _create_data(E_Config_Dialog *cfd)
44 {
45    E_Config_Dialog_Data *cfdata;
46
47    cfdata = E_NEW(E_Config_Dialog_Data, 1);
48    _fill_data(cfdata);
49    cfdata->cfd = cfd;
50    return cfdata;
51 }
52
53 static void
54 _fill_data(E_Config_Dialog_Data *cfdata)
55 {
56    cfdata->use_composite = e_config->use_composite;
57 }
58
59 static void
60 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
61 {
62    E_FREE(cfdata);
63 }
64
65 static int
66 _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
67 {
68    e_config->use_composite = cfdata->use_composite;
69    e_config_save_queue();
70    return 1;
71 }
72
73 static int
74 _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
75 {
76    return !(cfdata->use_composite == e_config->use_composite);
77 }
78
79 static Evas_Object *
80 _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
81 {
82    Evas_Object *o, *ob, *of;
83
84    o = e_widget_list_add(evas, 0, 0);
85
86    of = e_widget_framelist_add(evas, _("General Settings"), 0);
87    ob = e_widget_check_add(evas, _("Use ARGB instead of shaped windows"),
88                            &(cfdata->use_composite));
89    cfdata->o_composite = ob;
90    e_widget_on_change_hook_set(ob, _cb_composite_change, cfdata);
91    e_widget_framelist_object_append(of, ob);
92    e_widget_list_object_append(o, of, 1, 0, 0.5);
93
94    e_dialog_resizable_set(cfd->dia, 0);
95    return o;
96 }
97
98 static void
99 _cb_composite_change(void *data, Evas_Object *obj __UNUSED__)
100 {
101    E_Config_Dialog_Data *cfdata = NULL;
102
103    if (!(cfdata = data)) return;
104    if (cfdata->use_composite)
105      {
106         if (!ecore_x_screen_is_composited(0))
107           {
108              /* pop dialog */
109              e_confirm_dialog_show(_("Use ARGB instead of shaped windows"),
110                                    "preferences-engine",
111                                    _("You have chosen to enable ARGB composite "
112                                      "support,<br>but your current screen does "
113                                      "not support composite.<br><br>"
114                                      "Are you sure you wish to enable ARGB support?"),
115                                    _("Enable"), NULL, _cb_confirm_yes, _cb_confirm_no,
116                                    cfdata, cfdata, NULL, NULL);
117           }
118      }
119 }
120
121 static void
122 _cb_confirm_yes(void *data)
123 {
124    E_Config_Dialog_Data *cfdata = NULL;
125
126    if (!(cfdata = data)) return;
127    cfdata->use_composite = 1;
128 }
129
130 static void
131 _cb_confirm_no(void *data)
132 {
133    E_Config_Dialog_Data *cfdata = NULL;
134
135    if (!(cfdata = data)) return;
136    cfdata->use_composite = 0;
137    e_widget_check_checked_set(cfdata->o_composite, 0);
138 }