1 #include "ecore_xcb_private.h"
2 # ifdef ECORE_XCB_SCREENSAVER
3 # include <xcb/screensaver.h>
7 static Eina_Bool _screensaver_avail = EINA_FALSE;
9 /* external variables */
10 int _ecore_xcb_event_screensaver = -1;
13 _ecore_xcb_screensaver_init(void)
15 LOGFN(__FILE__, __LINE__, __FUNCTION__);
17 #ifdef ECORE_XCB_SCREENSAVER
18 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_screensaver_id);
23 _ecore_xcb_screensaver_finalize(void)
25 #ifdef ECORE_XCB_SCREENSAVER
26 const xcb_query_extension_reply_t *ext_reply;
29 LOGFN(__FILE__, __LINE__, __FUNCTION__);
31 #ifdef ECORE_XCB_SCREENSAVER
32 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_screensaver_id);
33 if ((ext_reply) && (ext_reply->present))
35 xcb_screensaver_query_version_cookie_t cookie;
36 xcb_screensaver_query_version_reply_t *reply;
39 xcb_screensaver_query_version_unchecked(_ecore_xcb_conn,
40 XCB_SCREENSAVER_MAJOR_VERSION,
41 XCB_SCREENSAVER_MINOR_VERSION);
43 xcb_screensaver_query_version_reply(_ecore_xcb_conn, cookie, NULL);
46 if ((reply->server_major_version >= XCB_SCREENSAVER_MAJOR_VERSION) &&
47 (reply->server_minor_version >= XCB_SCREENSAVER_MINOR_VERSION))
48 _screensaver_avail = EINA_TRUE;
53 if (_screensaver_avail)
54 _ecore_xcb_event_screensaver = ext_reply->first_event;
60 ecore_x_screensaver_idle_time_get(void)
63 #ifdef ECORE_XCB_SCREENSAVER
64 xcb_screensaver_query_info_cookie_t cookie;
65 xcb_screensaver_query_info_reply_t *reply;
69 LOGFN(__FILE__, __LINE__, __FUNCTION__);
72 if (!_screensaver_avail) return 0;
74 #ifdef ECORE_XCB_SCREENSAVER
75 root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
76 cookie = xcb_screensaver_query_info_unchecked(_ecore_xcb_conn, root);
77 reply = xcb_screensaver_query_info_reply(_ecore_xcb_conn, cookie, NULL);
79 ret = (reply->ms_until_server / 1000);
87 ecore_x_screensaver_set(int timeout,
92 LOGFN(__FILE__, __LINE__, __FUNCTION__);
95 if (!_screensaver_avail) return;
97 #ifdef ECORE_XCB_SCREENSAVER
98 xcb_set_screen_saver(_ecore_xcb_conn,
99 timeout, interval, prefer_blanking, allow_exposures);
104 ecore_x_screensaver_timeout_set(int timeout)
106 #ifdef ECORE_XCB_SCREENSAVER
107 xcb_get_screen_saver_cookie_t cookie;
108 xcb_get_screen_saver_reply_t *reply;
110 uint8_t pblank, pexpo;
113 LOGFN(__FILE__, __LINE__, __FUNCTION__);
116 if (!_screensaver_avail) return;
118 #ifdef ECORE_XCB_SCREENSAVER
119 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
120 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
122 pint = reply->interval;
123 pblank = reply->prefer_blanking;
124 pexpo = reply->allow_exposures;
126 xcb_set_screen_saver(_ecore_xcb_conn, timeout, pint, pblank, pexpo);
131 ecore_x_screensaver_timeout_get(void)
134 #ifdef ECORE_XCB_SCREENSAVER
135 xcb_get_screen_saver_cookie_t cookie;
136 xcb_get_screen_saver_reply_t *reply;
139 LOGFN(__FILE__, __LINE__, __FUNCTION__);
142 if (!_screensaver_avail) return 0;
144 #ifdef ECORE_XCB_SCREENSAVER
145 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
146 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
147 if (!reply) return 0;
148 timeout = reply->timeout;
156 ecore_x_screensaver_blank_set(int blank)
158 #ifdef ECORE_XCB_SCREENSAVER
159 xcb_get_screen_saver_cookie_t cookie;
160 xcb_get_screen_saver_reply_t *reply;
165 LOGFN(__FILE__, __LINE__, __FUNCTION__);
168 if (!_screensaver_avail) return;
170 #ifdef ECORE_XCB_SCREENSAVER
171 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
172 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
174 pto = reply->timeout;
175 pint = reply->interval;
176 pexpo = reply->allow_exposures;
178 xcb_set_screen_saver(_ecore_xcb_conn, pto, pint, blank, pexpo);
183 ecore_x_screensaver_blank_get(void)
186 #ifdef ECORE_XCB_SCREENSAVER
187 xcb_get_screen_saver_cookie_t cookie;
188 xcb_get_screen_saver_reply_t *reply;
191 LOGFN(__FILE__, __LINE__, __FUNCTION__);
194 if (!_screensaver_avail) return 0;
196 #ifdef ECORE_XCB_SCREENSAVER
197 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
198 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
199 if (!reply) return 0;
200 blank = reply->prefer_blanking;
208 ecore_x_screensaver_expose_set(int expose)
210 #ifdef ECORE_XCB_SCREENSAVER
211 xcb_get_screen_saver_cookie_t cookie;
212 xcb_get_screen_saver_reply_t *reply;
217 LOGFN(__FILE__, __LINE__, __FUNCTION__);
220 if (!_screensaver_avail) return;
222 #ifdef ECORE_XCB_SCREENSAVER
223 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
224 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
226 pto = reply->timeout;
227 pint = reply->interval;
228 pblank = reply->prefer_blanking;
230 xcb_set_screen_saver(_ecore_xcb_conn, pto, pint, pblank, expose);
235 ecore_x_screensaver_expose_get(void)
238 #ifdef ECORE_XCB_SCREENSAVER
239 xcb_get_screen_saver_cookie_t cookie;
240 xcb_get_screen_saver_reply_t *reply;
243 LOGFN(__FILE__, __LINE__, __FUNCTION__);
246 if (!_screensaver_avail) return 0;
248 #ifdef ECORE_XCB_SCREENSAVER
249 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
250 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
251 if (!reply) return 0;
252 expose = reply->allow_exposures;
260 ecore_x_screensaver_interval_set(int interval)
262 #ifdef ECORE_XCB_SCREENSAVER
263 xcb_get_screen_saver_cookie_t cookie;
264 xcb_get_screen_saver_reply_t *reply;
266 uint8_t pblank, pexpose;
269 LOGFN(__FILE__, __LINE__, __FUNCTION__);
272 if (!_screensaver_avail) return;
274 #ifdef ECORE_XCB_SCREENSAVER
275 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
276 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
278 pto = reply->timeout;
279 pblank = reply->prefer_blanking;
280 pexpose = reply->allow_exposures;
282 xcb_set_screen_saver(_ecore_xcb_conn, pto, interval, pblank, pexpose);
287 ecore_x_screensaver_interval_get(void)
290 #ifdef ECORE_XCB_SCREENSAVER
291 xcb_get_screen_saver_cookie_t cookie;
292 xcb_get_screen_saver_reply_t *reply;
295 LOGFN(__FILE__, __LINE__, __FUNCTION__);
298 if (!_screensaver_avail) return 0;
300 #ifdef ECORE_XCB_SCREENSAVER
301 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
302 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
303 if (!reply) return 0;
304 interval = reply->interval;
312 ecore_x_screensaver_event_listen_set(Eina_Bool on)
314 #ifdef ECORE_XCB_SCREENSAVER
318 LOGFN(__FILE__, __LINE__, __FUNCTION__);
321 if (!_screensaver_avail) return;
323 #ifdef ECORE_XCB_SCREENSAVER
324 root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
326 xcb_screensaver_select_input(_ecore_xcb_conn, root,
327 XCB_SCREENSAVER_EVENT_NOTIFY_MASK |
328 XCB_SCREENSAVER_EVENT_CYCLE_MASK);
330 xcb_screensaver_select_input(_ecore_xcb_conn, root, 0);
335 ecore_x_screensaver_event_available_get(void)
337 return _screensaver_avail;
341 ecore_x_screensaver_custom_blanking_enable(void)
343 #ifdef ECORE_XCB_SCREENSAVER
344 uint32_t mask_list[9];
346 xcb_screensaver_set_attributes_checked
348 ((xcb_screen_t *)_ecore_xcb_screen)->root,
349 -9999, -9999, 1, 1, 0,
350 XCB_WINDOW_CLASS_INPUT_ONLY.
351 XCB_COPY_FROM_PARENT, XCB_COPY_FROM_PARENT,
360 ecore_x_screensaver_custom_blanking_disable(void)
362 #ifdef ECORE_XCB_SCREENSAVER
363 xcb_screensaver_unset_attributes_checked
365 ((xcb_screen_t *)_ecore_xcb_screen)->root);