-rw-r--r-- | core/launcher/screensaver.cpp | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/core/launcher/screensaver.cpp b/core/launcher/screensaver.cpp new file mode 100644 index 0000000..9e823ff --- a/dev/null +++ b/core/launcher/screensaver.cpp | |||
@@ -0,0 +1,237 @@ | |||
1 | |||
2 | #include "screensaver.h" | ||
3 | |||
4 | #include <qpe/config.h> | ||
5 | #include <qpe/power.h> | ||
6 | #include <qpe/network.h> | ||
7 | |||
8 | #include <opie/odevice.h> | ||
9 | |||
10 | |||
11 | using namespace Opie; | ||
12 | |||
13 | |||
14 | OpieScreenSaver::OpieScreenSaver ( ) | ||
15 | : QObject ( 0, "screensaver" ), QWSScreenSaver ( ) | ||
16 | { | ||
17 | m_disable_suspend = 100; | ||
18 | m_enable_dim = false; | ||
19 | m_enable_lightoff = false; | ||
20 | m_enable_suspend = false; | ||
21 | m_onlylcdoff = false; | ||
22 | |||
23 | m_enable_dim_ac = false; | ||
24 | m_enable_lightoff_ac = false; | ||
25 | m_enable_suspend_ac = false; | ||
26 | m_onlylcdoff_ac = false; | ||
27 | |||
28 | m_use_light_sensor = false; | ||
29 | m_backlight_sensor = -1; | ||
30 | |||
31 | m_lcd_status = true; | ||
32 | |||
33 | m_backlight_normal = -1; | ||
34 | m_backlight_current = -1; | ||
35 | m_backlight_forcedoff = false; | ||
36 | |||
37 | m_on_ac = false; | ||
38 | |||
39 | m_level = -1; | ||
40 | |||
41 | // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off) | ||
42 | ODevice::inst ( )-> setDisplayStatus ( true ); | ||
43 | setBacklight ( -1 ); | ||
44 | } | ||
45 | |||
46 | |||
47 | void OpieScreenSaver::restore() | ||
48 | { | ||
49 | m_level = -1; | ||
50 | |||
51 | if ( !m_lcd_status ) { // We must have turned it off | ||
52 | ODevice::inst ( ) -> setDisplayStatus ( true ); | ||
53 | m_lcd_status = true; | ||
54 | } | ||
55 | |||
56 | setBacklightInternal ( -1 ); | ||
57 | } | ||
58 | |||
59 | |||
60 | bool OpieScreenSaver::save( int level ) | ||
61 | { | ||
62 | m_level = level; | ||
63 | |||
64 | switch ( level ) { | ||
65 | case 0: | ||
66 | if (( m_on_ac && m_enable_dim_ac ) || | ||
67 | ( !m_on_ac && m_enable_dim )) { | ||
68 | if (( m_disable_suspend > 0 ) && ( m_backlight_current > 1 ) && !m_use_light_sensor ) | ||
69 | setBacklightInternal ( 1 ); // lowest non-off | ||
70 | } | ||
71 | return true; | ||
72 | break; | ||
73 | |||
74 | case 1: | ||
75 | if (( m_on_ac && m_enable_lightoff_ac ) || | ||
76 | ( !m_on_ac && m_enable_lightoff )) { | ||
77 | if ( m_disable_suspend > 1 ) | ||
78 | setBacklightInternal ( 0 ); // off | ||
79 | } | ||
80 | return true; | ||
81 | break; | ||
82 | |||
83 | case 2: | ||
84 | if (( m_on_ac && !m_enable_suspend_ac ) || | ||
85 | ( !m_on_ac && !m_enable_suspend )) { | ||
86 | return true; | ||
87 | } | ||
88 | |||
89 | if (( m_on_ac && m_onlylcdoff_ac ) || | ||
90 | ( !m_on_ac && m_onlylcdoff )) { | ||
91 | ODevice::inst ( ) -> setDisplayStatus ( false ); | ||
92 | m_lcd_status = false; | ||
93 | return true; | ||
94 | } | ||
95 | |||
96 | // We're going to suspend the whole machine | ||
97 | |||
98 | if (( m_disable_suspend > 2 ) && !Network::networkOnline ( )) { | ||
99 | QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); | ||
100 | return true; | ||
101 | } | ||
102 | |||
103 | break; | ||
104 | } | ||
105 | return false; | ||
106 | } | ||
107 | |||
108 | |||
109 | void OpieScreenSaver::setIntervals ( int i1, int i2, int i3 ) | ||
110 | { | ||
111 | Config config ( "apm" ); | ||
112 | config. setGroup ( m_on_ac ? "AC" : "Battery" ); | ||
113 | |||
114 | int v[ 4 ]; | ||
115 | if ( i1 < 0 ) | ||
116 | i1 = config. readNumEntry ( "Dim", 30 ); | ||
117 | if ( i2 < 0 ) | ||
118 | i2 = config. readNumEntry ( "LightOff", 20 ); | ||
119 | if ( i3 < 0 ) | ||
120 | i3 = config. readNumEntry ( "Suspend", 60 ); | ||
121 | |||
122 | if ( m_on_ac ) { | ||
123 | m_enable_dim_ac = ( i1 > 0 ); | ||
124 | m_enable_lightoff_ac = ( i2 > 0 ); | ||
125 | m_enable_suspend_ac = ( i3 > 0 ); | ||
126 | m_onlylcdoff_ac = config.readNumEntry ( "LcdOffOnly", 0 ); | ||
127 | } | ||
128 | else { | ||
129 | m_enable_dim = ( i1 > 0 ); | ||
130 | m_enable_lightoff = ( i2 > 0 ); | ||
131 | m_enable_suspend = ( i3 > 0 ); | ||
132 | m_onlylcdoff = config.readNumEntry ( "LcdOffOnly", 0 ); | ||
133 | } | ||
134 | |||
135 | qDebug("screen saver intervals: %d %d %d", i1, i2, i3); | ||
136 | |||
137 | v [ 0 ] = QMAX( 1000 * i1, 100 ); | ||
138 | v [ 1 ] = QMAX( 1000 * i2, 100 ); | ||
139 | v [ 2 ] = QMAX( 1000 * i3, 100 ); | ||
140 | v [ 3 ] = 0; | ||
141 | |||
142 | if ( !i1 && !i2 && !i3 ) | ||
143 | QWSServer::setScreenSaverInterval( 0 ); | ||
144 | else | ||
145 | QWSServer::setScreenSaverIntervals( v ); | ||
146 | } | ||
147 | |||
148 | |||
149 | void OpieScreenSaver::setInterval ( int interval ) | ||
150 | { | ||
151 | setIntervals ( -1, -1, interval ); | ||
152 | } | ||
153 | |||
154 | |||
155 | void OpieScreenSaver::setMode ( int mode ) | ||
156 | { | ||
157 | if ( mode > m_disable_suspend ) | ||
158 | setInterval ( -1 ); | ||
159 | m_disable_suspend = mode; | ||
160 | } | ||
161 | |||
162 | |||
163 | void OpieScreenSaver::setBacklight ( int bright ) | ||
164 | { | ||
165 | // Read from config | ||
166 | Config config ( "apm" ); | ||
167 | config. setGroup ( m_on_ac ? "AC" : "Battery" ); | ||
168 | m_backlight_normal = config. readNumEntry ( "Brightness", 255 ); | ||
169 | |||
170 | m_use_light_sensor = config. readBoolEntry ( "LightSensor", false ); | ||
171 | |||
172 | qDebug ( "setBacklight: %d (ls: %d)", m_backlight_normal, m_use_light_sensor ? 1 : 0 ); | ||
173 | |||
174 | killTimers ( ); | ||
175 | if ( m_use_light_sensor ) { | ||
176 | timerEvent ( 0 ); | ||
177 | startTimer ( 2000 ); | ||
178 | } | ||
179 | |||
180 | setBacklightInternal ( bright ); | ||
181 | } | ||
182 | |||
183 | |||
184 | void OpieScreenSaver::setBacklightInternal ( int bright ) | ||
185 | { | ||
186 | if ( bright == -3 ) { | ||
187 | // Forced on | ||
188 | m_backlight_forcedoff = false; | ||
189 | bright = -1; | ||
190 | } | ||
191 | if ( m_backlight_forcedoff && bright != -2 ) | ||
192 | return ; | ||
193 | if ( bright == -2 ) { | ||
194 | // Toggle between off and on | ||
195 | bright = m_backlight_current ? 0 : -1; | ||
196 | m_backlight_forcedoff = !bright; | ||
197 | } | ||
198 | if ( bright == -1 ) | ||
199 | bright = m_use_light_sensor ? m_backlight_sensor : m_backlight_normal; | ||
200 | |||
201 | if ( bright != m_backlight_current ) { | ||
202 | ODevice::inst ( )-> setDisplayBrightness ( bright ); | ||
203 | m_backlight_current = bright; | ||
204 | } | ||
205 | } | ||
206 | |||
207 | |||
208 | void OpieScreenSaver::timerEvent ( QTimerEvent * ) | ||
209 | { | ||
210 | m_backlight_sensor = (( 255 - ODevice::inst ( )-> readLightSensor ( )) * m_backlight_normal ) / 255; | ||
211 | |||
212 | if ( m_level <= 0 ) | ||
213 | setBacklightInternal ( -1 ); | ||
214 | } | ||
215 | |||
216 | |||
217 | void OpieScreenSaver::setDisplayState ( bool on ) | ||
218 | { | ||
219 | if ( m_lcd_status != on ) { | ||
220 | ODevice::inst ( ) -> setDisplayStatus ( on ); | ||
221 | m_lcd_status = on; | ||
222 | } | ||
223 | } | ||
224 | |||
225 | |||
226 | void OpieScreenSaver::powerStatusChanged ( PowerStatus ps ) | ||
227 | { | ||
228 | bool newonac = ( ps. acStatus ( ) == PowerStatus::Online ); | ||
229 | |||
230 | if ( newonac != m_on_ac ) { | ||
231 | m_on_ac = newonac; | ||
232 | setInterval ( -1 ); | ||
233 | setBacklight ( -1 ); | ||
234 | restore ( ); | ||
235 | } | ||
236 | } | ||
237 | |||