6559cad0f3e0501a53c236a1b03e56d168bd956e
[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  * Screensaver code
6  */
7 #include "Ecore.h"
8 #include "ecore_x_private.h"
9 #include "Ecore_X.h"
10 #include "Ecore_X_Atoms.h"
11
12 static int _screensaver_available = -1;
13
14 EAPI int
15 ecore_x_screensaver_event_available_get(void)
16 {
17    if (_screensaver_available >= 0) return _screensaver_available;
18 #ifdef ECORE_XSS
19    int _screensaver_major, _screensaver_minor;
20
21    _screensaver_major = 1;
22    _screensaver_minor = 0;
23
24    if (XScreenSaverQueryVersion(_ecore_x_disp, &_screensaver_major, &_screensaver_minor))
25      _screensaver_available = 1;
26    else
27      _screensaver_available = 0;
28 #else
29    _screensaver_available = 0;
30 #endif
31    return _screensaver_available;
32 }
33
34 EAPI int
35 ecore_x_screensaver_idle_time_get(void)
36 {
37 #ifdef ECORE_XSS
38    XScreenSaverInfo *xss;
39    int idle;
40
41    xss = XScreenSaverAllocInfo();
42    XScreenSaverQueryInfo(_ecore_x_disp, RootWindow(_ecore_x_disp, DefaultScreen(_ecore_x_disp)), xss); 
43    idle = xss->idle / 1000;
44    XFree(xss);
45
46    return idle;
47 #endif
48
49    return 0;
50 }
51
52 EAPI void
53 ecore_x_screensaver_set(int timeout, int interval, int prefer_blanking, int allow_exposures)
54 {
55    XSetScreenSaver(_ecore_x_disp, timeout, interval, prefer_blanking, allow_exposures);
56 }
57
58 EAPI void
59 ecore_x_screensaver_timeout_set(int timeout)
60 {
61    int pto, pint, pblank, pexpo;
62
63    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
64    XSetScreenSaver(_ecore_x_disp, timeout, pint, pblank, pexpo);
65 }
66
67 EAPI int
68 ecore_x_screensaver_timeout_get(void)
69 {
70    int pto, pint, pblank, pexpo;
71
72    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
73    return pto;
74 }
75
76 EAPI void
77 ecore_x_screensaver_blank_set(int blank)
78 {
79    int pto, pint, pblank, pexpo;
80
81    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
82    XSetScreenSaver(_ecore_x_disp, pto, pint, blank, pexpo);
83 }
84
85 EAPI int
86 ecore_x_screensaver_blank_get(void)
87 {
88    int pto, pint, pblank, pexpo;
89
90    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
91    return pblank;
92 }
93
94 EAPI void
95 ecore_x_screensaver_expose_set(int expose)
96 {
97    int pto, pint, pblank, pexpo;
98
99    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
100    XSetScreenSaver(_ecore_x_disp, pto, pint, pblank, expose);
101 }
102
103 EAPI int
104 ecore_x_screensaver_expose_get(void)
105 {
106    int pto, pint, pblank, pexpo;
107
108    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
109    return pexpo;
110 }
111
112 EAPI void
113 ecore_x_screensaver_interval_set(int interval)
114 {
115    int pto, pint, pblank, pexpo;
116
117    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
118    XSetScreenSaver(_ecore_x_disp, pto, interval, pblank, pexpo);
119 }
120
121 EAPI int
122 ecore_x_screensaver_interval_get(void)
123 {
124    int pto, pint, pblank, pexpo;
125
126    XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
127    return pint;
128 }
129
130 EAPI void
131 ecore_x_screensaver_event_listen_set(int on)
132 {
133 #ifdef ECORE_XSS
134    Ecore_X_Window root;
135
136    root = DefaultRootWindow(_ecore_x_disp);
137    if (on)
138      XScreenSaverSelectInput(_ecore_x_disp, root, ScreenSaverNotifyMask);
139    else
140      XScreenSaverSelectInput(_ecore_x_disp, root, 0);
141 #else
142    on = 0;
143 #endif
144 }