3 static Ecore_Event_Handler *_e_screensaver_handler_config_mode = NULL;
4 static Ecore_Event_Handler *_e_screensaver_handler_screensaver_notify = NULL;
5 static Ecore_Event_Handler *_e_screensaver_handler_border_fullscreen = NULL;
6 static Ecore_Event_Handler *_e_screensaver_handler_border_unfullscreen = NULL;
7 static Ecore_Event_Handler *_e_screensaver_handler_border_remove = NULL;
8 static Ecore_Event_Handler *_e_screensaver_handler_border_iconify = NULL;
9 static Ecore_Event_Handler *_e_screensaver_handler_border_uniconify = NULL;
10 static Ecore_Event_Handler *_e_screensaver_handler_border_desk_set = NULL;
11 static Ecore_Event_Handler *_e_screensaver_handler_desk_show = NULL;
12 static E_Dialog *_e_screensaver_ask_presentation_dia = NULL;
13 static int _e_screensaver_ask_presentation_count = 0;
15 static int _e_screensaver_timeout = 0;
16 static int _e_screensaver_interval = 0;
17 static int _e_screensaver_blanking = 0;
18 static int _e_screensaver_expose = 0;
21 e_screensaver_update(void)
23 int timeout = 0, interval = 0, blanking = 0, expose = 0;
24 int count = (1 + _e_screensaver_ask_presentation_count);
25 Eina_Bool changed = EINA_FALSE;
27 if ((e_config->screensaver_enable) && (!e_config->mode.presentation) &&
28 (!e_util_fullscreen_curreny_any()))
29 timeout = e_config->screensaver_timeout * count;
31 interval = e_config->screensaver_interval;
32 blanking = e_config->screensaver_blanking;
33 expose = e_config->screensaver_expose;
35 if (_e_screensaver_timeout != timeout)
37 _e_screensaver_timeout = timeout;
40 if (_e_screensaver_interval != interval)
42 _e_screensaver_interval = interval;
45 if (_e_screensaver_blanking != blanking)
47 _e_screensaver_blanking = blanking;
50 if (_e_screensaver_expose != expose)
52 _e_screensaver_expose = expose;
56 if (changed) ecore_x_screensaver_set(timeout, interval, blanking, expose);
60 _e_screensaver_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
62 e_screensaver_update();
63 return ECORE_CALLBACK_PASS_ON;
67 _e_screensaver_ask_presentation_del(void *data)
69 if (_e_screensaver_ask_presentation_dia == data)
70 _e_screensaver_ask_presentation_dia = NULL;
74 _e_screensaver_ask_presentation_yes(void *data __UNUSED__, E_Dialog *dia)
76 e_config->mode.presentation = 1;
77 e_config_mode_changed();
78 e_config_save_queue();
79 e_object_del(E_OBJECT(dia));
80 _e_screensaver_ask_presentation_count = 0;
84 _e_screensaver_ask_presentation_no(void *data __UNUSED__, E_Dialog *dia)
86 e_object_del(E_OBJECT(dia));
87 _e_screensaver_ask_presentation_count = 0;
91 _e_screensaver_ask_presentation_no_increase(void *data __UNUSED__, E_Dialog *dia)
93 _e_screensaver_ask_presentation_count++;
94 e_screensaver_update();
95 e_object_del(E_OBJECT(dia));
99 _e_screensaver_ask_presentation_no_forever(void *data __UNUSED__, E_Dialog *dia)
101 e_config->screensaver_ask_presentation = 0;
102 e_config_save_queue();
103 e_object_del(E_OBJECT(dia));
104 _e_screensaver_ask_presentation_count = 0;
108 _e_screensaver_ask_presentation_key_down(void *data, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event)
110 Evas_Event_Key_Down *ev = event;
111 E_Dialog *dia = data;
113 if (strcmp(ev->keyname, "Return") == 0)
114 _e_screensaver_ask_presentation_yes(NULL, dia);
115 else if (strcmp(ev->keyname, "Escape") == 0)
116 _e_screensaver_ask_presentation_no(NULL, dia);
120 _e_screensaver_ask_presentation_mode(void)
126 if (_e_screensaver_ask_presentation_dia) return;
128 if (!(man = e_manager_current_get())) return;
129 if (!(con = e_container_current_get(man))) return;
130 if (!(dia = e_dialog_new(con, "E", "_screensaver_ask_presentation"))) return;
132 e_dialog_title_set(dia, _("Activate Presentation Mode?"));
133 e_dialog_icon_set(dia, "dialog-ask", 64);
134 e_dialog_text_set(dia,
135 _("You disabled screensaver too fast.<br><br>"
136 "Would you like to enable <b>presentation</b> mode and "
137 "temporarily disable screen saver, lock and power saving?"));
139 e_object_del_attach_func_set(E_OBJECT(dia),
140 _e_screensaver_ask_presentation_del);
141 e_dialog_button_add(dia, _("Yes"), NULL,
142 _e_screensaver_ask_presentation_yes, NULL);
143 e_dialog_button_add(dia, _("No"), NULL,
144 _e_screensaver_ask_presentation_no, NULL);
145 e_dialog_button_add(dia, _("No, but increase timeout"), NULL,
146 _e_screensaver_ask_presentation_no_increase, NULL);
147 e_dialog_button_add(dia, _("No, and stop asking"), NULL,
148 _e_screensaver_ask_presentation_no_forever, NULL);
150 e_dialog_button_focus_num(dia, 0);
151 e_widget_list_homogeneous_set(dia->box_object, 0);
152 e_win_centered_set(dia->win, 1);
155 evas_object_event_callback_add(dia->bg_object, EVAS_CALLBACK_KEY_DOWN,
156 _e_screensaver_ask_presentation_key_down, dia);
158 _e_screensaver_ask_presentation_dia = dia;
162 _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
164 Ecore_X_Event_Screensaver_Notify *e = event;
165 static double last_start = 0.0;
169 last_start = ecore_loop_time_get();
170 _e_screensaver_ask_presentation_count = 0;
172 else if ((last_start > 0.0) && (e_config->screensaver_ask_presentation))
174 double current = ecore_loop_time_get();
176 if (last_start + e_config->screensaver_ask_presentation_timeout >= current)
177 _e_screensaver_ask_presentation_mode();
180 else if (_e_screensaver_ask_presentation_count)
181 _e_screensaver_ask_presentation_count = 0;
183 return ECORE_CALLBACK_PASS_ON;
187 _e_screensaver_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
189 e_screensaver_update();
190 return ECORE_CALLBACK_PASS_ON;
194 _e_screensaver_handler_border_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
196 e_screensaver_update();
197 return ECORE_CALLBACK_PASS_ON;
201 _e_screensaver_handler_desk_show_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
203 e_screensaver_update();
204 return ECORE_CALLBACK_PASS_ON;
208 e_screensaver_init(void)
210 _e_screensaver_handler_config_mode = ecore_event_handler_add
211 (E_EVENT_CONFIG_MODE_CHANGED, _e_screensaver_handler_config_mode_cb, NULL);
213 _e_screensaver_handler_screensaver_notify = ecore_event_handler_add
214 (ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_screensaver_handler_screensaver_notify_cb, NULL);
216 _e_screensaver_handler_border_fullscreen = ecore_event_handler_add
217 (E_EVENT_BORDER_FULLSCREEN, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
219 _e_screensaver_handler_border_unfullscreen = ecore_event_handler_add
220 (E_EVENT_BORDER_UNFULLSCREEN, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
222 _e_screensaver_handler_border_remove = ecore_event_handler_add
223 (E_EVENT_BORDER_REMOVE, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
225 _e_screensaver_handler_border_iconify = ecore_event_handler_add
226 (E_EVENT_BORDER_ICONIFY, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
228 _e_screensaver_handler_border_uniconify = ecore_event_handler_add
229 (E_EVENT_BORDER_UNICONIFY, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
231 _e_screensaver_handler_border_desk_set = ecore_event_handler_add
232 (E_EVENT_BORDER_DESK_SET, _e_screensaver_handler_border_desk_set_cb, NULL);
234 _e_screensaver_handler_desk_show = ecore_event_handler_add
235 (E_EVENT_DESK_SHOW, _e_screensaver_handler_desk_show_cb, NULL);
237 _e_screensaver_timeout = ecore_x_screensaver_timeout_get();
238 _e_screensaver_interval = ecore_x_screensaver_interval_get();
239 _e_screensaver_blanking = ecore_x_screensaver_blank_get();
240 _e_screensaver_expose = ecore_x_screensaver_expose_get();
242 e_screensaver_update();
248 e_screensaver_shutdown(void)
250 if (_e_screensaver_handler_config_mode)
252 ecore_event_handler_del(_e_screensaver_handler_config_mode);
253 _e_screensaver_handler_config_mode = NULL;
256 if (_e_screensaver_handler_screensaver_notify)
258 ecore_event_handler_del(_e_screensaver_handler_screensaver_notify);
259 _e_screensaver_handler_screensaver_notify = NULL;
262 if (_e_screensaver_handler_border_fullscreen)
264 ecore_event_handler_del(_e_screensaver_handler_border_fullscreen);
265 _e_screensaver_handler_border_fullscreen = NULL;
268 if (_e_screensaver_handler_border_unfullscreen)
270 ecore_event_handler_del(_e_screensaver_handler_border_unfullscreen);
271 _e_screensaver_handler_border_unfullscreen = NULL;
274 if (_e_screensaver_handler_border_remove)
276 ecore_event_handler_del(_e_screensaver_handler_border_remove);
277 _e_screensaver_handler_border_remove = NULL;
280 if (_e_screensaver_handler_border_iconify)
282 ecore_event_handler_del(_e_screensaver_handler_border_iconify);
283 _e_screensaver_handler_border_iconify = NULL;
286 if (_e_screensaver_handler_border_uniconify)
288 ecore_event_handler_del(_e_screensaver_handler_border_uniconify);
289 _e_screensaver_handler_border_uniconify = NULL;
292 if (_e_screensaver_handler_border_desk_set)
294 ecore_event_handler_del(_e_screensaver_handler_border_desk_set);
295 _e_screensaver_handler_border_desk_set = NULL;
298 if (_e_screensaver_handler_desk_show)
300 ecore_event_handler_del(_e_screensaver_handler_desk_show);
301 _e_screensaver_handler_desk_show = NULL;