svn update: 48958 (latest:48959)
[framework/uifw/ecore.git] / src / lib / ecore_x / xlib / ecore_x_screensaver.c
1 /*
2  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3  */
4
5 /*
6  * Screensaver code
7  */
8
9 #ifdef HAVE_CONFIG_H
10 # include <config.h>
11 #endif
12
13 #include "Ecore.h"
14 #include "ecore_x_private.h"
15 #include "Ecore_X.h"
16 #include "Ecore_X_Atoms.h"
17
18 static int _screensaver_available = -1;
19
20 EAPI int
21 ecore_x_screensaver_event_available_get(void)
22 {
23    if (_screensaver_available >= 0) return _screensaver_available;
24 #ifdef ECORE_XSS
25    int _screensaver_major, _screensaver_minor;
26
27    LOGFN(__FILE__, __LINE__, __FUNCTION__);
28    _screensaver_major = 1;
29    _screensaver_minor = 0;
30
31    if (XScreenSaverQueryVersion(_ecore_x_disp, &_screensaver_major, &_screensaver_minor))
32      _screensaver_available = 1;
33    else
34      _screensaver_available = 0;
35 #else
36    _screensaver_available = 0;
37 #endif
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, RootWindow(_ecore_x_disp, DefaultScreen(_ecore_x_disp)), xss); 
51    idle = xss->idle / 1000;
52    XFree(xss);
53
54    return idle;
55 #endif
56
57    return 0;
58 }
59
60 EAPI void
61 ecore_x_screensaver_set(int timeout, int interval, int prefer_blanking, int allow_exposures)
62 {
63    LOGFN(__FILE__, __LINE__, __FUNCTION__);
64    XSetScreenSaver(_ecore_x_disp, timeout, interval, prefer_blanking, allow_exposures);
65 }
66
67 EAPI void
68 ecore_x_screensaver_timeout_set(int timeout)
69 {
70    int pto, pint, pblank, pexpo;
71
72    LOGFN(__FILE__, __LINE__, __FUNCTION__);
73    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
74    XSetScreenSaver(_ecore_x_disp, timeout, pint, pblank, pexpo);
75 }
76
77 EAPI int
78 ecore_x_screensaver_timeout_get(void)
79 {
80    int pto, pint, pblank, pexpo;
81
82    LOGFN(__FILE__, __LINE__, __FUNCTION__);
83    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
84    return pto;
85 }
86
87 EAPI void
88 ecore_x_screensaver_blank_set(int blank)
89 {
90    int pto, pint, pblank, pexpo;
91
92    LOGFN(__FILE__, __LINE__, __FUNCTION__);
93    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
94    XSetScreenSaver(_ecore_x_disp, pto, pint, blank, pexpo);
95 }
96
97 EAPI int
98 ecore_x_screensaver_blank_get(void)
99 {
100    int pto, pint, pblank, pexpo;
101
102    LOGFN(__FILE__, __LINE__, __FUNCTION__);
103    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
104    return pblank;
105 }
106
107 EAPI void
108 ecore_x_screensaver_expose_set(int expose)
109 {
110    int pto, pint, pblank, pexpo;
111
112    LOGFN(__FILE__, __LINE__, __FUNCTION__);
113    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
114    XSetScreenSaver(_ecore_x_disp, pto, pint, pblank, expose);
115 }
116
117 EAPI int
118 ecore_x_screensaver_expose_get(void)
119 {
120    int pto, pint, pblank, pexpo;
121
122    LOGFN(__FILE__, __LINE__, __FUNCTION__);
123    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
124    return pexpo;
125 }
126
127 EAPI void
128 ecore_x_screensaver_interval_set(int interval)
129 {
130    int pto, pint, pblank, pexpo;
131
132    LOGFN(__FILE__, __LINE__, __FUNCTION__);
133    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
134    XSetScreenSaver(_ecore_x_disp, pto, interval, pblank, pexpo);
135 }
136
137 EAPI int
138 ecore_x_screensaver_interval_get(void)
139 {
140    int pto, pint, pblank, pexpo;
141
142    LOGFN(__FILE__, __LINE__, __FUNCTION__);
143    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
144    return pint;
145 }
146
147 EAPI void
148 ecore_x_screensaver_event_listen_set(int on)
149 {
150 #ifdef ECORE_XSS
151    Ecore_X_Window root;
152
153    LOGFN(__FILE__, __LINE__, __FUNCTION__);
154    root = DefaultRootWindow(_ecore_x_disp);
155    if (on)
156      XScreenSaverSelectInput(_ecore_x_disp, root, ScreenSaverNotifyMask);
157    else
158      XScreenSaverSelectInput(_ecore_x_disp, root, 0);
159 #endif
160 }