3 typedef struct _E_Screensaver
6 Ecore_Idle_Enterer *idle_before;
9 Ecore_Timer *idletimer;
12 Eina_Bool active; /* indicates that screensaver window is showing */
13 Eina_Bool enable; /* indicates that screensaver feature is enabled */
16 static E_Screensaver *_saver = NULL;
18 E_API int E_EVENT_SCREENSAVER_ON = -1;
19 E_API int E_EVENT_SCREENSAVER_OFF = -1;
20 E_API int E_EVENT_SCREENSAVER_OFF_PRE = -1;
22 static Eina_Bool _e_scrsaver_cb_idletimeout(void *data EINA_UNUSED);
23 static void _e_scrsaver_idletimeout_reset(void);
24 static Eina_Bool _e_scrsaver_cb_idle_before(void *data EINA_UNUSED);
25 static Eina_Bool _e_scrsaver_cb_input(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED);
26 static void _e_scrsaver_active_set(Eina_Bool set);
29 _e_scrsaver_cb_idletimeout(void *data EINA_UNUSED)
31 _e_scrsaver_active_set(EINA_TRUE);
32 _saver->idletimer = NULL;
37 _e_scrsaver_idletimeout_reset(void)
39 if (_saver->idletimer)
41 ecore_timer_del(_saver->idletimer);
42 _saver->idletimer = NULL;
45 if (!_saver->enable) return;
47 if (_saver->idletime != 0.0)
50 ecore_timer_add(_saver->idletime,
51 _e_scrsaver_cb_idletimeout,
57 _e_scrsaver_cb_idle_before(void *data EINA_UNUSED)
59 if (!_saver) return ECORE_CALLBACK_RENEW;
60 if (!_saver->ev_update) return ECORE_CALLBACK_RENEW;
62 _e_scrsaver_idletimeout_reset();
63 _e_scrsaver_active_set(EINA_FALSE);
64 _saver->ev_update = EINA_FALSE;
66 return ECORE_CALLBACK_RENEW;
70 _e_scrsaver_cb_input(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
72 if (!_saver) return ECORE_CALLBACK_PASS_ON;
73 _saver->ev_update = EINA_TRUE;
74 return ECORE_CALLBACK_PASS_ON;
78 _e_scrsaver_active_set(Eina_Bool set)
81 if (set == _saver->active) return;
84 ev = E_EVENT_SCREENSAVER_ON;
86 ev = E_EVENT_SCREENSAVER_OFF;
88 ecore_event_add(ev, NULL, NULL, NULL);
94 e_screensaver_preinit(void)
96 E_EVENT_SCREENSAVER_ON = ecore_event_type_new();
97 E_EVENT_SCREENSAVER_OFF = ecore_event_type_new();
98 E_EVENT_SCREENSAVER_OFF_PRE = ecore_event_type_new();
102 e_screensaver_init(void)
106 _saver = E_NEW(E_Screensaver, 1);
107 if (!_saver) return 0;
109 _saver->idletime = 0.0;
115 e_screensaver_shutdown(void)
117 e_screensaver_disable();
123 e_screensaver_timeout_set(double time)
127 _saver->idletime = time;
128 _e_scrsaver_idletimeout_reset();
132 e_screensaver_timeout_get(void)
134 if (!_saver) return 0.0;
135 return _saver->idletime;
139 _e_scrsaver_cb_input_async(void *data)
141 _e_scrsaver_cb_input(NULL, 0, NULL);
145 e_screensaver_notidle(void)
147 ecore_main_loop_thread_safe_call_async(_e_scrsaver_cb_input_async, NULL);
151 e_screensaver_enable(void)
154 if (_saver->enable) return;
156 _saver->enable = EINA_TRUE;
157 _saver->idle_before = ecore_idle_enterer_before_add(_e_scrsaver_cb_idle_before, NULL);
159 E_LIST_HANDLER_APPEND(_saver->handlers, ECORE_EVENT_MOUSE_MOVE, _e_scrsaver_cb_input, NULL);
160 E_LIST_HANDLER_APPEND(_saver->handlers, ECORE_EVENT_MOUSE_BUTTON_DOWN, _e_scrsaver_cb_input, NULL);
161 E_LIST_HANDLER_APPEND(_saver->handlers, ECORE_EVENT_MOUSE_BUTTON_UP, _e_scrsaver_cb_input, NULL);
162 E_LIST_HANDLER_APPEND(_saver->handlers, ECORE_EVENT_MOUSE_WHEEL, _e_scrsaver_cb_input, NULL);
164 _e_scrsaver_idletimeout_reset();
168 e_screensaver_disable(void)
171 if (!_saver->enable) return;
173 _saver->enable = EINA_FALSE;
174 _e_scrsaver_active_set(EINA_FALSE);
176 E_FREE_LIST(_saver->handlers, ecore_event_handler_del);
177 _saver->handlers = NULL;
179 if (_saver->idletimer)
181 ecore_timer_del(_saver->idletimer);
182 _saver->idletimer = NULL;
185 if (_saver->idle_before)
187 ecore_idle_enterer_del(_saver->idle_before);
188 _saver->idle_before = NULL;
193 e_screensaver_enabled_get(void)
195 if (!_saver) return EINA_FALSE;
197 return _saver->enable;