Tizen 2.1 base
[framework/uifw/ecore.git] / src / lib / ecore_x / xlib / ecore_x_screensaver.c
1 /*
2  * Screensaver code
3  */
4
5 #ifdef HAVE_CONFIG_H
6 # include <config.h>
7 #endif /* ifdef HAVE_CONFIG_H */
8
9 #include "Ecore.h"
10 #include "ecore_x_private.h"
11 #include "Ecore_X.h"
12 #include "Ecore_X_Atoms.h"
13
14 static int _screensaver_available = -1;
15
16 EAPI Eina_Bool
17 ecore_x_screensaver_event_available_get(void)
18 {
19    if (_screensaver_available >= 0)
20      return _screensaver_available;
21
22 #ifdef ECORE_XSS
23    int _screensaver_major, _screensaver_minor;
24
25    LOGFN(__FILE__, __LINE__, __FUNCTION__);
26    _screensaver_major = 1;
27    _screensaver_minor = 0;
28
29    if (XScreenSaverQueryVersion(_ecore_x_disp, &_screensaver_major,
30                                 &_screensaver_minor))
31      _screensaver_available = 1;
32    else
33      _screensaver_available = 0;
34
35 #else /* ifdef ECORE_XSS */
36    _screensaver_available = 0;
37 #endif /* ifdef ECORE_XSS */
38    return _screensaver_available;
39 }
40
41 EAPI int
42 ecore_x_screensaver_idle_time_get(void)
43 {
44 #ifdef ECORE_XSS
45    XScreenSaverInfo *xss;
46    int idle;
47
48    LOGFN(__FILE__, __LINE__, __FUNCTION__);
49    xss = XScreenSaverAllocInfo();
50    XScreenSaverQueryInfo(_ecore_x_disp,
51                          RootWindow(_ecore_x_disp, DefaultScreen(
52                                       _ecore_x_disp)), xss);
53    idle = xss->idle / 1000;
54    XFree(xss);
55
56    return idle;
57 #else
58    return 0;
59 #endif /* ifdef ECORE_XSS */
60 }
61
62 EAPI void
63 ecore_x_screensaver_set(int timeout,
64                         int interval,
65                         int prefer_blanking,
66                         int allow_exposures)
67 {
68    LOGFN(__FILE__, __LINE__, __FUNCTION__);
69    XSetScreenSaver(_ecore_x_disp,
70                    timeout,
71                    interval,
72                    prefer_blanking,
73                    allow_exposures);
74 }
75
76 EAPI void
77 ecore_x_screensaver_timeout_set(int timeout)
78 {
79    int pto, pint, pblank, pexpo;
80
81    LOGFN(__FILE__, __LINE__, __FUNCTION__);
82    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
83    XSetScreenSaver(_ecore_x_disp, timeout, pint, pblank, pexpo);
84 }
85
86 EAPI int
87 ecore_x_screensaver_timeout_get(void)
88 {
89    int pto, pint, pblank, pexpo;
90
91    LOGFN(__FILE__, __LINE__, __FUNCTION__);
92    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
93    return pto;
94 }
95
96 EAPI void
97 ecore_x_screensaver_blank_set(int blank)
98 {
99    int pto, pint, pblank, pexpo;
100
101    LOGFN(__FILE__, __LINE__, __FUNCTION__);
102    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
103    XSetScreenSaver(_ecore_x_disp, pto, pint, blank, pexpo);
104 }
105
106 EAPI int
107 ecore_x_screensaver_blank_get(void)
108 {
109    int pto, pint, pblank, pexpo;
110
111    LOGFN(__FILE__, __LINE__, __FUNCTION__);
112    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
113    return pblank;
114 }
115
116 EAPI void
117 ecore_x_screensaver_expose_set(int expose)
118 {
119    int pto, pint, pblank, pexpo;
120
121    LOGFN(__FILE__, __LINE__, __FUNCTION__);
122    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
123    XSetScreenSaver(_ecore_x_disp, pto, pint, pblank, expose);
124 }
125
126 EAPI int
127 ecore_x_screensaver_expose_get(void)
128 {
129    int pto, pint, pblank, pexpo;
130
131    LOGFN(__FILE__, __LINE__, __FUNCTION__);
132    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
133    return pexpo;
134 }
135
136 EAPI void
137 ecore_x_screensaver_interval_set(int interval)
138 {
139    int pto, pint, pblank, pexpo;
140
141    LOGFN(__FILE__, __LINE__, __FUNCTION__);
142    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
143    XSetScreenSaver(_ecore_x_disp, pto, interval, pblank, pexpo);
144 }
145
146 EAPI int
147 ecore_x_screensaver_interval_get(void)
148 {
149    int pto, pint, pblank, pexpo;
150
151    LOGFN(__FILE__, __LINE__, __FUNCTION__);
152    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
153    return pint;
154 }
155
156 EAPI void
157 ecore_x_screensaver_event_listen_set(Eina_Bool on)
158 {
159 #ifdef ECORE_XSS
160    Ecore_X_Window root;
161
162    LOGFN(__FILE__, __LINE__, __FUNCTION__);
163    root = DefaultRootWindow(_ecore_x_disp);
164    if (on)
165      XScreenSaverSelectInput(_ecore_x_disp, root,
166                              ScreenSaverNotifyMask | ScreenSaverCycle);
167    else
168      XScreenSaverSelectInput(_ecore_x_disp, root, 0);
169 #else
170    return;
171    on = EINA_FALSE;
172 #endif /* ifdef ECORE_XSS */
173 }
174
175
176 EAPI Eina_Bool
177 ecore_x_screensaver_custom_blanking_enable(void)
178 {
179 #ifdef ECORE_XSS
180    XSetWindowAttributes attr;
181    
182    XScreenSaverSetAttributes(_ecore_x_disp,
183                              DefaultRootWindow(_ecore_x_disp),
184                              -9999, -9999, 1, 1, 0,
185                              CopyFromParent, InputOnly, CopyFromParent,
186                              0, &attr);
187    return EINA_TRUE;
188 #else
189    return EINA_FALSE;
190 #endif /* ifdef ECORE_XSS */
191 }
192
193 EAPI Eina_Bool
194 ecore_x_screensaver_custom_blanking_disable(void)
195 {
196 #ifdef ECORE_XSS
197    XScreenSaverUnsetAttributes(_ecore_x_disp,
198                                DefaultRootWindow(_ecore_x_disp));
199    return EINA_TRUE;
200 #else
201    return EINA_FALSE;
202 #endif /* ifdef ECORE_XSS */
203 }
204