summaryrefslogtreecommitdiff
path: root/core/launcher/screensaver.cpp
authorsandman <sandman>2002-10-28 04:48:35 (UTC)
committer sandman <sandman>2002-10-28 04:48:35 (UTC)
commitcb687974f9e97c0ce6117b0ac4551ad4d4342b6a (patch) (unidiff)
tree3128de5e3647a786bcc47a5fb14af06ba65f2a09 /core/launcher/screensaver.cpp
parentf3c9e44d9d694a0a803fb6a7d79cfa8d173b9864 (diff)
downloadopie-cb687974f9e97c0ce6117b0ac4551ad4d4342b6a.zip
opie-cb687974f9e97c0ce6117b0ac4551ad4d4342b6a.tar.gz
opie-cb687974f9e97c0ce6117b0ac4551ad4d4342b6a.tar.bz2
- moved the QPEScreenSaver to screensaver.cpp/.h and renamed the class to
OpieScreenSaver - (hopefully) fixed all outstanding bugs regarding the new on batt/on ac handling - first (primitive) version of light sensor control (but it works)
Diffstat (limited to 'core/launcher/screensaver.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/screensaver.cpp237
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
11using namespace Opie;
12
13
14OpieScreenSaver::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
47void 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
60bool 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
109void 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
149void OpieScreenSaver::setInterval ( int interval )
150{
151 setIntervals ( -1, -1, interval );
152}
153
154
155void OpieScreenSaver::setMode ( int mode )
156{
157 if ( mode > m_disable_suspend )
158 setInterval ( -1 );
159 m_disable_suspend = mode;
160}
161
162
163void 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
184void 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
208void 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
217void 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
226void 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