Add a task to copy configuration files to user's HOME dir from data dir for multi...
[platform/core/uifw/e17.git] / src / modules / conf_display / e_int_config_screensaver.c
1 #include "e.h"
2
3 #define E_CONFIG_BLANKING_DEFAULT 2
4 #define E_CONFIG_BLANKING_PREFERRED 1
5 #define E_CONFIG_BLANKING_NOT_PREFERRED 0
6
7 #define E_CONFIG_EXPOSURES_DEFAULT 2
8 #define E_CONFIG_EXPOSURES_ALLOWED 1
9 #define E_CONFIG_EXPOSURES_NOT_ALLOWED 0
10
11 static void *_create_data(E_Config_Dialog *cfd);
12 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
13 static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
14 static int _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata);
15 static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
16 static void _cb_disable(void *data, Evas_Object *obj);
17 static void _cb_ask_presentation_changed(void *data, Evas_Object *obj);
18
19 struct _E_Config_Dialog_Data
20 {
21    E_Config_Dialog *cfd;
22
23    int enable_screensaver;
24    double timeout;
25    int presentation_mode;
26    int ask_presentation;
27    double ask_presentation_timeout;
28    
29    int screensaver_suspend;
30    int screensaver_suspend_on_ac;
31    double screensaver_suspend_delay;
32
33    Eina_List *disable_list;
34
35    struct 
36      {
37         Evas_Object *ask_presentation_slider;
38      } gui;
39 };
40
41 E_Config_Dialog *
42 e_int_config_screensaver(E_Container *con, const char *params __UNUSED__)
43 {
44    E_Config_Dialog *cfd;
45    E_Config_Dialog_View *v;
46
47    if (e_config_dialog_find("E", "screen/screen_saver")) return NULL;
48    v = E_NEW(E_Config_Dialog_View, 1);
49
50    v->create_cfdata = _create_data;
51    v->free_cfdata = _free_data;
52    v->basic.apply_cfdata = _basic_apply;
53    v->basic.create_widgets = _basic_create;
54    v->basic.check_changed = _basic_check_changed;
55
56    v->override_auto_apply = 1;
57
58    cfd = e_config_dialog_new(con,_("Screen Saver Settings"),
59                              "E", "screen/screen_saver",
60                              "preferences-desktop-screensaver", 0, v, NULL);
61    return cfd;
62 }
63
64 static void
65 _fill_data(E_Config_Dialog_Data *cfdata)
66 {
67    cfdata->enable_screensaver = e_config->screensaver_enable;
68    cfdata->timeout = e_config->screensaver_timeout / 60;
69    cfdata->ask_presentation = e_config->screensaver_ask_presentation;
70    cfdata->presentation_mode = e_config->mode.presentation;
71    cfdata->ask_presentation_timeout = e_config->screensaver_ask_presentation_timeout;
72    cfdata->screensaver_suspend = e_config->screensaver_suspend;
73    cfdata->screensaver_suspend_on_ac = e_config->screensaver_suspend_on_ac;
74    cfdata->screensaver_suspend_delay = e_config->screensaver_suspend_delay;
75 }
76
77 static void *
78 _create_data(E_Config_Dialog *cfd)
79 {
80    E_Config_Dialog_Data *cfdata;
81
82    cfdata = E_NEW(E_Config_Dialog_Data, 1);
83    cfdata->cfd = cfd;
84    _fill_data(cfdata);
85    return cfdata;
86 }
87
88 static void
89 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
90 {
91    eina_list_free(cfdata->disable_list);
92    E_FREE(cfdata);
93 }
94
95 static int
96 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
97 {
98    e_config->screensaver_enable = cfdata->enable_screensaver;
99    e_config->screensaver_timeout = (cfdata->timeout * 60);
100    e_config->screensaver_ask_presentation = cfdata->ask_presentation;
101    e_config->mode.presentation = cfdata->presentation_mode;
102    e_config->screensaver_ask_presentation_timeout = cfdata->ask_presentation_timeout;
103    e_config->screensaver_suspend = cfdata->screensaver_suspend;
104    e_config->screensaver_suspend_on_ac = cfdata->screensaver_suspend_on_ac;
105    e_config->screensaver_suspend_delay = cfdata->screensaver_suspend_delay;
106
107    // enough of dpms vs screensaver being different! useless
108    e_config->dpms_enable = e_config->screensaver_enable;
109    e_config->dpms_standby_enable = e_config->dpms_enable;
110    e_config->dpms_suspend_enable = e_config->dpms_enable;
111    e_config->dpms_off_enable = e_config->dpms_enable;
112    // XXX: 5 seconds after screenblank until dpms - enough for most anims;
113    e_config->dpms_standby_timeout = e_config->screensaver_timeout + 5;
114    e_config->dpms_suspend_timeout = e_config->screensaver_timeout + 6;
115    e_config->dpms_off_timeout = e_config->screensaver_timeout + 7;
116
117    e_config->screensaver_interval = 0;
118    
119    /* Apply settings */
120    e_screensaver_update();
121    e_dpms_update();
122    
123    e_config_save_queue();
124    return 1;
125 }
126
127 static int
128 _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
129 {
130    return ((e_config->screensaver_enable != cfdata->enable_screensaver) ||
131            (e_config->screensaver_timeout != (int)(cfdata->timeout * 60)) ||
132            (e_config->screensaver_ask_presentation != cfdata->ask_presentation) ||
133            (e_config->mode.presentation != cfdata->presentation_mode) ||
134            (e_config->screensaver_ask_presentation_timeout != cfdata->ask_presentation_timeout) ||
135            (e_config->screensaver_suspend != cfdata->screensaver_suspend) ||
136            (e_config->screensaver_suspend_on_ac != cfdata->screensaver_suspend_on_ac) ||
137            (e_config->screensaver_suspend_delay != cfdata->screensaver_suspend_delay));
138 }
139
140 static Evas_Object *
141 _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
142 {
143    Evas_Object *otb, *ol, *ow;
144
145    otb = e_widget_toolbook_add(evas, (24 * e_scale), (24 * e_scale));
146
147    /* Screensaver */
148    ol = e_widget_list_add(evas, 0, 0);
149    ow = e_widget_check_add(evas, _("Enable screen blanking"),
150                            &(cfdata->enable_screensaver));
151    e_widget_on_change_hook_set(ow, _cb_disable, cfdata);
152    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
153    
154    ow = e_widget_label_add(evas, _("Timeout"));
155    cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
156    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
157    ow = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"),
158                             1.0, 90.0, 1.0, 0, &(cfdata->timeout), NULL, 100);
159    cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
160    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
161    
162    ow = e_widget_check_add(evas, _("Suspend on blank"), 
163                            &(cfdata->screensaver_suspend));
164    cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
165    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
166    ow = e_widget_check_add(evas, _("Suspend even if AC"),
167                            &(cfdata->screensaver_suspend_on_ac));
168    cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
169    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
170    
171    ow = e_widget_label_add(evas, _("Suspend delay"));
172    cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
173    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
174    ow = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"),
175                             1.0, 20.0, 1.0, 0, &(cfdata->screensaver_suspend_delay), NULL, 100);
176    cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
177    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
178    
179    e_widget_toolbook_page_append(otb, NULL, _("Blanking"), ol, 
180                                  1, 0, 1, 0, 0.5, 0.0);
181    /* Presentation */
182    ol = e_widget_list_add(evas, 0, 0);
183    ow = e_widget_check_add(evas, _("Presentation mode enabled"), 
184                            &(cfdata->presentation_mode));
185    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
186    ow = e_widget_check_add(evas, _("Suggest if deactivated before"), 
187                            &(cfdata->ask_presentation));
188    e_widget_on_change_hook_set(ow, _cb_ask_presentation_changed, cfdata);
189    cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
190    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
191    ow = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"),
192                             1.0, 300.0, 10.0, 0,
193                             &(cfdata->ask_presentation_timeout), NULL, 100);
194    cfdata->gui.ask_presentation_slider = ow;
195    cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
196    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
197    e_widget_toolbook_page_append(otb, NULL, _("Presentation"), ol,
198                                  1, 0, 1, 0, 0.5, 0.0);
199    
200    e_widget_toolbook_page_show(otb, 0);
201
202    // handler for enable/disable widget array
203    _cb_disable(cfdata, NULL);
204
205    return otb;
206 }
207
208 static void
209 _cb_disable(void *data, Evas_Object *obj __UNUSED__)
210 {
211    E_Config_Dialog_Data *cfdata;
212    const Eina_List *l;
213    Evas_Object *o;
214
215    if (!(cfdata = data)) return;
216    EINA_LIST_FOREACH(cfdata->disable_list, l, o)
217      e_widget_disabled_set(o, !cfdata->enable_screensaver);
218
219    _cb_ask_presentation_changed(cfdata, NULL);
220 }
221
222 static void
223 _cb_ask_presentation_changed(void *data, Evas_Object *obj __UNUSED__)
224 {
225    E_Config_Dialog_Data *cfdata;
226    Eina_Bool disable;
227
228    if (!(cfdata = data)) return;
229    disable = ((!cfdata->enable_screensaver) || (!cfdata->ask_presentation));
230    e_widget_disabled_set(cfdata->gui.ask_presentation_slider, disable);
231 }