-rw-r--r-- | core/launcher/desktop.cpp | 161 | ||||
-rw-r--r-- | core/launcher/desktop.h | 15 |
2 files changed, 129 insertions, 47 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index d2bd8ae..4926b97 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp | |||
@@ -136,384 +136,459 @@ void DesktopPowerAlerter::alert( const QString &text, int priority ) | |||
136 | { | 136 | { |
137 | alertCount++; | 137 | alertCount++; |
138 | if ( alertCount < priority ) | 138 | if ( alertCount < priority ) |
139 | return ; | 139 | return ; |
140 | if ( priority > currentPriority ) | 140 | if ( priority > currentPriority ) |
141 | return ; | 141 | return ; |
142 | currentPriority = priority; | 142 | currentPriority = priority; |
143 | setText( text ); | 143 | setText( text ); |
144 | show(); | 144 | show(); |
145 | } | 145 | } |
146 | 146 | ||
147 | 147 | ||
148 | void DesktopPowerAlerter::hideEvent( QHideEvent *e ) | 148 | void DesktopPowerAlerter::hideEvent( QHideEvent *e ) |
149 | { | 149 | { |
150 | QMessageBox::hideEvent( e ); | 150 | QMessageBox::hideEvent( e ); |
151 | alertCount = 0; | 151 | alertCount = 0; |
152 | currentPriority = INT_MAX; | 152 | currentPriority = INT_MAX; |
153 | } | 153 | } |
154 | 154 | ||
155 | class QPEScreenSaver : public QWSScreenSaver | 155 | class QPEScreenSaver : public QWSScreenSaver |
156 | { | 156 | { |
157 | private: | 157 | private: |
158 | int LcdOn; | 158 | int LcdOn; |
159 | 159 | ||
160 | public: | 160 | public: |
161 | QPEScreenSaver() | 161 | QPEScreenSaver() |
162 | { | 162 | { |
163 | m_disable_suspend = 100; | 163 | m_disable_suspend = 100; |
164 | m_enable_dim = false; | 164 | m_enable_dim = false; |
165 | m_enable_lightoff = false; | 165 | m_enable_lightoff = false; |
166 | m_enable_onlylcdoff = false; | 166 | m_enable_onlylcdoff = false; |
167 | 167 | ||
168 | m_disable_suspend_ac = 100; | ||
169 | m_enable_dim_ac = false; | ||
170 | m_enable_lightoff_ac = false; | ||
171 | m_enable_onlylcdoff_ac = false; | ||
172 | |||
168 | m_lcd_status = true; | 173 | m_lcd_status = true; |
169 | 174 | ||
170 | m_backlight_normal = -1; | 175 | m_backlight_normal = -1; |
171 | m_backlight_current = -1; | 176 | m_backlight_current = -1; |
172 | m_backlight_forcedoff = false; | 177 | m_backlight_forcedoff = false; |
173 | 178 | ||
174 | // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off) | 179 | // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off) |
175 | ODevice::inst ( )-> setDisplayStatus ( true ); | 180 | ODevice::inst ( )-> setDisplayStatus ( true ); |
176 | setBacklight ( -1 ); | 181 | setBacklight ( -1 ); |
177 | } | 182 | } |
178 | void restore() | 183 | void restore() |
179 | { | 184 | { |
180 | if ( !m_lcd_status ) { // We must have turned it off | 185 | if ( !m_lcd_status ) { // We must have turned it off |
181 | ODevice::inst ( ) -> setDisplayStatus ( true ); | 186 | ODevice::inst ( ) -> setDisplayStatus ( true ); |
182 | m_lcd_status = true; | 187 | m_lcd_status = true; |
183 | } | 188 | } |
184 | 189 | ||
185 | setBacklightInternal ( -1 ); | 190 | setBacklightInternal ( -1 ); |
186 | } | 191 | } |
187 | bool save( int level ) | 192 | bool save( int level ) |
188 | { | 193 | { |
189 | switch ( level ) { | 194 | bool onAC = ( PowerStatusManager::readStatus().acStatus() == PowerStatus::Online ); |
195 | |||
196 | switch ( level ) { | ||
190 | case 0: | 197 | case 0: |
191 | if ( m_disable_suspend > 0 && m_enable_dim ) { | 198 | |
192 | if ( m_backlight_current > 1 ) | 199 | if ( m_disable_suspend_ac > 0 && m_enable_dim_ac && onAC ) { |
193 | setBacklightInternal ( 1 ); // lowest non-off | 200 | if ( m_backlight_current > 1 ) |
194 | } | 201 | setBacklight( 1 ); // lowest non-off |
195 | return true; | 202 | } else if ( m_disable_suspend > 0 && m_enable_dim ) { |
196 | break; | 203 | if ( m_backlight_current > 1 ) |
204 | setBacklightInternal( 1 ); // lowest non-off | ||
205 | } | ||
206 | return true; | ||
207 | break; | ||
197 | case 1: | 208 | case 1: |
198 | if ( m_disable_suspend > 1 && m_enable_lightoff ) { | 209 | |
199 | setBacklightInternal ( 0 ); // off | 210 | if ( m_disable_suspend_ac > 1 && m_enable_lightoff_ac && onAC ) { |
200 | } | 211 | setBacklightInternal( 0 ); // off |
201 | return true; | 212 | } else if ( m_disable_suspend > 1 && m_enable_lightoff ) { |
202 | break; | 213 | setBacklightInternal( 0 ); // off |
203 | case 2: | 214 | } |
204 | if ( m_enable_onlylcdoff ) { | ||
205 | ODevice::inst ( )-> setDisplayStatus ( false ); | ||
206 | m_lcd_status = false; | ||
207 | return true; | 215 | return true; |
208 | } | 216 | break; |
209 | else // We're going to suspend the whole machine | 217 | case 2: |
210 | { | 218 | if ( m_enable_onlylcdoff_ac && onAC ) { |
211 | if ( ( m_disable_suspend > 2 ) && | 219 | ODevice::inst ( ) -> setDisplayStatus ( false ); |
212 | ( PowerStatusManager::readStatus().acStatus() != PowerStatus::Online ) && | 220 | m_lcd_status = false; |
213 | ( !Network::networkOnline ( ) ) ) { | 221 | return true; |
214 | QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); | ||
215 | return true; | ||
216 | } | 222 | } |
217 | } | 223 | else if ( m_enable_onlylcdoff ) { |
218 | break; | 224 | ODevice::inst ( ) -> setDisplayStatus ( false ); |
219 | } | 225 | m_lcd_status = false; |
220 | return false; | 226 | return true; |
227 | } | ||
228 | else // We're going to suspend the whole machine | ||
229 | { | ||
230 | if ( ( m_disable_suspend_ac > 2 && onAC ) && ( !Network::networkOnline ( ) ) ) { | ||
231 | QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); | ||
232 | return true; | ||
233 | } | ||
234 | if ( ( m_disable_suspend > 2 ) && ( !Network::networkOnline ( ) ) ) { | ||
235 | QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); | ||
236 | return true; | ||
237 | } | ||
238 | } | ||
239 | break; | ||
240 | } | ||
241 | return false; | ||
221 | } | 242 | } |
222 | 243 | ||
223 | private: | 244 | private: |
224 | static int ssi( int interval, Config & config, const QString & enable, const QString & value, int def ) | 245 | static int ssi( int interval, Config & config, const QString & enable, const QString & value, int def ) |
225 | { | 246 | { |
226 | if ( !enable.isEmpty() && config.readNumEntry( enable, 0 ) == 0 ) | 247 | if ( !enable.isEmpty() && config.readNumEntry( enable, 0 ) == 0 ) |
227 | return 0; | 248 | return 0; |
228 | 249 | ||
229 | if ( interval < 0 ) { | 250 | if ( interval < 0 ) { |
230 | // Restore screen blanking and power saving state | 251 | // Restore screen blanking and power saving state |
231 | interval = config.readNumEntry( value, def ); | 252 | interval = config.readNumEntry( value, def ); |
232 | } | 253 | } |
233 | return interval; | 254 | return interval; |
234 | } | 255 | } |
235 | 256 | ||
236 | public: | 257 | public: |
237 | void setIntervals( int i1, int i2, int i3 ) | 258 | void setIntervals( int i1, int i2, int i3 ) |
238 | { | 259 | { |
239 | Config config( "qpe" ); | 260 | Config config( "qpe" ); |
240 | config.setGroup( "Screensaver" ); | 261 | config.setGroup( "Screensaver" ); |
241 | 262 | ||
242 | int v[ 4 ]; | 263 | int v[ 4 ]; |
243 | i1 = ssi( i1, config, "Dim", "Interval_Dim", 30 ); | 264 | i1 = ssi( i1, config, "Dim", "Interval_Dim", 30 ); |
244 | i2 = ssi( i2, config, "LightOff", "Interval_LightOff", 20 ); | 265 | i2 = ssi( i2, config, "LightOff", "Interval_LightOff", 20 ); |
245 | i3 = ssi( i3, config, "", "Interval", 60 ); | 266 | i3 = ssi( i3, config, "", "Interval", 60 ); |
246 | 267 | ||
247 | //qDebug("screen saver intervals: %d %d %d", i1, i2, i3); | 268 | //qDebug("screen saver intervals: %d %d %d", i1, i2, i3); |
248 | 269 | ||
249 | v [ 0 ] = QMAX( 1000 * i1, 100 ); | 270 | v [ 0 ] = QMAX( 1000 * i1, 100 ); |
250 | v [ 1 ] = QMAX( 1000 * i2, 100 ); | 271 | v [ 1 ] = QMAX( 1000 * i2, 100 ); |
251 | v [ 2 ] = QMAX( 1000 * i3, 100 ); | 272 | v [ 2 ] = QMAX( 1000 * i3, 100 ); |
252 | v [ 3 ] = 0; | 273 | v [ 3 ] = 0; |
253 | m_enable_dim = ( ( i1 != 0 ) ? config. readNumEntry ( "Dim", 1 ) : false ); | 274 | m_enable_dim = ( ( i1 != 0 ) ? config. readNumEntry ( "Dim", 1 ) : false ); |
254 | m_enable_lightoff = ( ( i2 != 0 ) ? config. readNumEntry ( "LightOff", 1 ) : false ); | 275 | m_enable_lightoff = ( ( i2 != 0 ) ? config. readNumEntry ( "LightOff", 1 ) : false ); |
255 | m_enable_onlylcdoff = config. readNumEntry ( "LcdOffOnly", 0 ); | 276 | m_enable_onlylcdoff = config. readNumEntry ( "LcdOffOnly", 0 ); |
256 | 277 | ||
257 | if ( !i1 && !i2 && !i3 ) | 278 | if ( !i1 && !i2 && !i3 ) |
258 | QWSServer::setScreenSaverInterval( 0 ); | 279 | QWSServer::setScreenSaverInterval( 0 ); |
259 | else | 280 | else |
260 | QWSServer::setScreenSaverIntervals( v ); | 281 | QWSServer::setScreenSaverIntervals( v ); |
261 | } | 282 | } |
262 | 283 | ||
284 | void setIntervalsAC( int i1, int i2, int i3 ) | ||
285 | { | ||
286 | Config config( "qpe" ); | ||
287 | config.setGroup( "Screensaver" ); | ||
288 | |||
289 | int v[ 4 ]; | ||
290 | i1 = ssi( i1, config, "DimAC", "Interval_DimAC", 30 ); | ||
291 | i2 = ssi( i2, config, "LightOffAC", "Interval_LightOffAC", 20 ); | ||
292 | i3 = ssi( i3, config, "", "IntervalAC", 60 ); | ||
293 | |||
294 | //qDebug("screen saver intervals: %d %d %d", i1, i2, i3); | ||
295 | |||
296 | v [ 0 ] = QMAX( 1000 * i1, 100 ); | ||
297 | v [ 1 ] = QMAX( 1000 * i2, 100 ); | ||
298 | v [ 2 ] = QMAX( 1000 * i3, 100 ); | ||
299 | v [ 3 ] = 0; | ||
300 | m_enable_dim_ac = ( ( i1 != 0 ) ? config.readNumEntry ( "DimAC", 1 ) : false ); | ||
301 | m_enable_lightoff_ac = ( ( i2 != 0 ) ? config.readNumEntry ( "LightOffAC", 1 ) : false ); | ||
302 | m_enable_onlylcdoff_ac = config.readNumEntry ( "LcdOffOnlyAC", 0 ); | ||
303 | |||
304 | if ( !i1 && !i2 && !i3 ) | ||
305 | QWSServer::setScreenSaverInterval( 0 ); | ||
306 | else | ||
307 | QWSServer::setScreenSaverIntervals( v ); | ||
308 | } | ||
309 | |||
263 | void setInterval ( int interval ) | 310 | void setInterval ( int interval ) |
264 | { | 311 | { |
265 | setIntervals ( -1, -1, interval ); | 312 | setIntervals ( -1, -1, interval ); |
266 | } | 313 | } |
267 | 314 | ||
268 | void setMode ( int mode ) | 315 | void setMode ( int mode ) |
269 | { | 316 | { |
270 | if ( mode > m_disable_suspend ) | 317 | if ( mode > m_disable_suspend ) |
271 | setInterval( -1 ); | 318 | setInterval( -1 ); |
272 | m_disable_suspend = mode; | 319 | m_disable_suspend = mode; |
273 | } | 320 | } |
274 | 321 | ||
275 | void setBacklight ( int bright ) | 322 | void setBacklight ( int bright ) |
276 | { | 323 | { |
277 | // Read from config | 324 | // Read from config |
278 | Config config ( "qpe" ); | 325 | Config config ( "qpe" ); |
279 | config. setGroup ( "Screensaver" ); | 326 | config. setGroup ( "Screensaver" ); |
280 | m_backlight_normal = config. readNumEntry ( "Brightness", 255 ); | 327 | m_backlight_normal = config. readNumEntry ( "Brightness", 255 ); |
281 | 328 | ||
282 | setBacklightInternal ( bright ); | 329 | setBacklightInternal ( bright ); |
283 | } | 330 | } |
284 | 331 | ||
285 | private: | 332 | private: |
286 | void setBacklightInternal ( int bright ) | 333 | void setBacklightInternal ( int bright ) |
287 | { | 334 | { |
288 | if ( bright == -3 ) { | 335 | if ( bright == -3 ) { |
289 | // Forced on | 336 | // Forced on |
290 | m_backlight_forcedoff = false; | 337 | m_backlight_forcedoff = false; |
291 | bright = -1; | 338 | bright = -1; |
292 | } | 339 | } |
293 | if ( m_backlight_forcedoff && bright != -2 ) | 340 | if ( m_backlight_forcedoff && bright != -2 ) |
294 | return ; | 341 | return ; |
295 | if ( bright == -2 ) { | 342 | if ( bright == -2 ) { |
296 | // Toggle between off and on | 343 | // Toggle between off and on |
297 | bright = m_backlight_current ? 0 : -1; | 344 | bright = m_backlight_current ? 0 : -1; |
298 | m_backlight_forcedoff = !bright; | 345 | m_backlight_forcedoff = !bright; |
299 | } | 346 | } |
300 | if ( bright == -1 ) | 347 | if ( bright == -1 ) |
301 | bright = m_backlight_normal; | 348 | bright = m_backlight_normal; |
302 | 349 | ||
303 | if ( bright != m_backlight_current ) { | 350 | if ( bright != m_backlight_current ) { |
304 | ODevice::inst ( )-> setDisplayBrightness ( bright ); | 351 | ODevice::inst ( )-> setDisplayBrightness ( bright ); |
305 | m_backlight_current = bright; | 352 | m_backlight_current = bright; |
306 | } | 353 | } |
307 | } | 354 | } |
308 | 355 | ||
309 | public: | 356 | public: |
310 | void setDisplayState ( bool on ) | 357 | void setDisplayState ( bool on ) |
311 | { | 358 | { |
312 | if ( m_lcd_status != on ) { | 359 | if ( m_lcd_status != on ) { |
313 | ODevice::inst ( ) -> setDisplayStatus ( on ); | 360 | ODevice::inst ( ) -> setDisplayStatus ( on ); |
314 | m_lcd_status = on; | 361 | m_lcd_status = on; |
315 | } | 362 | } |
316 | } | 363 | } |
317 | 364 | ||
318 | private: | 365 | private: |
319 | int m_disable_suspend; | 366 | int m_disable_suspend; |
320 | bool m_enable_dim; | 367 | bool m_enable_dim; |
321 | bool m_enable_lightoff; | 368 | bool m_enable_lightoff; |
322 | bool m_enable_onlylcdoff; | 369 | bool m_enable_onlylcdoff; |
323 | 370 | ||
371 | int m_disable_suspend_ac; | ||
372 | bool m_enable_dim_ac; | ||
373 | bool m_enable_lightoff_ac; | ||
374 | bool m_enable_onlylcdoff_ac; | ||
375 | |||
324 | bool m_lcd_status; | 376 | bool m_lcd_status; |
325 | 377 | ||
326 | int m_backlight_normal; | 378 | int m_backlight_normal; |
327 | int m_backlight_current; | 379 | int m_backlight_current; |
328 | bool m_backlight_forcedoff; | 380 | bool m_backlight_forcedoff; |
329 | }; | 381 | }; |
330 | 382 | ||
331 | void DesktopApplication::switchLCD ( bool on ) | 383 | void DesktopApplication::switchLCD ( bool on ) |
332 | { | 384 | { |
333 | if ( qApp ) { | 385 | if ( qApp ) { |
334 | DesktopApplication *dapp = (DesktopApplication *) qApp; | 386 | DesktopApplication *dapp = (DesktopApplication *) qApp; |
335 | 387 | ||
336 | if ( dapp-> m_screensaver ) { | 388 | if ( dapp-> m_screensaver ) { |
337 | if ( on ) { | 389 | if ( on ) { |
338 | dapp-> m_screensaver-> setDisplayState ( true ); | 390 | dapp-> m_screensaver-> setDisplayState ( true ); |
339 | dapp-> m_screensaver-> setBacklight ( -3 ); | 391 | dapp-> m_screensaver-> setBacklight ( -3 ); |
340 | } | 392 | } |
341 | else { | 393 | else { |
342 | dapp-> m_screensaver-> setDisplayState ( false ); | 394 | dapp-> m_screensaver-> setDisplayState ( false ); |
343 | } | 395 | } |
344 | } | 396 | } |
345 | } | 397 | } |
346 | } | 398 | } |
347 | 399 | ||
348 | 400 | ||
349 | DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) | 401 | DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) |
350 | : QPEApplication( argc, argv, appType ) | 402 | : QPEApplication( argc, argv, appType ) |
351 | { | 403 | { |
352 | 404 | ||
353 | QTimer * t = new QTimer( this ); | 405 | //FIXME, need also a method for setting different timer ( changed runtime ) |
354 | connect( t, SIGNAL( timeout() ), this, SLOT( psTimeout() ) ); | 406 | m_timer = new QTimer( this ); |
355 | t->start( 10000 ); | 407 | connect( m_timer, SIGNAL( timeout() ), this, SLOT( psTimeout() ) ); |
408 | Config cfg( "qpe" ); | ||
409 | cfg.setGroup( "APM" ); | ||
410 | m_timer->start( cfg.readNumEntry( "check_interval", 10000 ) ); | ||
411 | m_powerVeryLow = cfg.readNumEntry( "power_verylow", 10 ); | ||
412 | m_powerCritical = cfg.readNumEntry( "power_critical", 5 ); | ||
356 | ps = new PowerStatus; | 413 | ps = new PowerStatus; |
357 | pa = new DesktopPowerAlerter( 0 ); | 414 | pa = new DesktopPowerAlerter( 0 ); |
358 | 415 | ||
359 | channel = new QCopChannel( "QPE/Desktop", this ); | 416 | channel = new QCopChannel( "QPE/Desktop", this ); |
360 | connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), | 417 | connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), |
361 | this, SLOT( desktopMessage( const QCString&, const QByteArray& ) ) ); | 418 | this, SLOT( desktopMessage( const QCString&, const QByteArray& ) ) ); |
362 | 419 | ||
363 | channel = new QCopChannel( "QPE/System", this ); | 420 | channel = new QCopChannel( "QPE/System", this ); |
364 | connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), | 421 | connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), |
365 | this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) ); | 422 | this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) ); |
366 | 423 | ||
367 | m_screensaver = new QPEScreenSaver; | 424 | m_screensaver = new QPEScreenSaver; |
368 | 425 | ||
369 | m_screensaver-> setInterval ( -1 ); | 426 | m_screensaver-> setInterval ( -1 ); |
370 | QWSServer::setScreenSaver( m_screensaver ); | 427 | QWSServer::setScreenSaver( m_screensaver ); |
371 | } | 428 | } |
372 | 429 | ||
373 | 430 | ||
374 | DesktopApplication::~DesktopApplication() | 431 | DesktopApplication::~DesktopApplication() |
375 | { | 432 | { |
376 | delete ps; | 433 | delete ps; |
377 | delete pa; | 434 | delete pa; |
378 | } | 435 | } |
379 | 436 | ||
380 | void DesktopApplication::desktopMessage( const QCString &msg, const QByteArray &data ) | 437 | void DesktopApplication::desktopMessage( const QCString &msg, const QByteArray &data ) |
381 | { | 438 | { |
382 | QDataStream stream( data, IO_ReadOnly ); | 439 | QDataStream stream( data, IO_ReadOnly ); |
383 | if ( msg == "keyRegister(int key, QString channel, QString message)" ) { | 440 | if ( msg == "keyRegister(int key, QString channel, QString message)" ) { |
384 | int k; | 441 | int k; |
385 | QString c, m; | 442 | QString c, m; |
386 | stream >> k; | 443 | stream >> k; |
387 | stream >> c; | 444 | stream >> c; |
388 | stream >> m; | 445 | stream >> m; |
389 | 446 | ||
390 | qWarning( "KeyRegisterReceived: %i, %s, %s", k, ( const char* ) c, ( const char * ) m ); | 447 | qWarning( "KeyRegisterReceived: %i, %s, %s", k, ( const char* ) c, ( const char * ) m ); |
391 | keyRegisterList.append( QCopKeyRegister( k, c, m ) ); | 448 | keyRegisterList.append( QCopKeyRegister( k, c, m ) ); |
392 | } | 449 | } |
393 | } | 450 | } |
394 | 451 | ||
395 | 452 | ||
396 | void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data ) | 453 | void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data ) |
397 | { | 454 | { |
398 | QDataStream stream ( data, IO_ReadOnly ); | 455 | QDataStream stream ( data, IO_ReadOnly ); |
399 | 456 | ||
400 | if ( msg == "setScreenSaverInterval(int)" ) { | 457 | if ( msg == "setScreenSaverInterval(int)" ) { |
401 | int time; | 458 | int time; |
402 | stream >> time; | 459 | stream >> time; |
403 | m_screensaver-> setInterval( time ); | 460 | m_screensaver-> setInterval( time ); |
404 | } | 461 | } |
405 | else if ( msg == "setScreenSaverIntervals(int,int,int)" ) { | 462 | else if ( msg == "setScreenSaverIntervals(int,int,int)" ) { |
406 | int t1, t2, t3; | 463 | int t1, t2, t3; |
407 | stream >> t1 >> t2 >> t3; | 464 | stream >> t1 >> t2 >> t3; |
408 | m_screensaver-> setIntervals( t1, t2, t3 ); | 465 | m_screensaver-> setIntervals( t1, t2, t3 ); |
409 | } | 466 | } |
467 | else if ( msg == "setScreenSaverIntervalsAC(int,int,int)" ) { | ||
468 | int t1, t2, t3; | ||
469 | stream >> t1 >> t2 >> t3; | ||
470 | m_screensaver-> setIntervalsAC( t1, t2, t3 ); | ||
471 | } | ||
410 | else if ( msg == "setBacklight(int)" ) { | 472 | else if ( msg == "setBacklight(int)" ) { |
411 | int bright; | 473 | int bright; |
412 | stream >> bright; | 474 | stream >> bright; |
413 | m_screensaver-> setBacklight( bright ); | 475 | m_screensaver-> setBacklight( bright ); |
414 | } | 476 | } |
415 | else if ( msg == "setScreenSaverMode(int)" ) { | 477 | else if ( msg == "setScreenSaverMode(int)" ) { |
416 | int mode; | 478 | int mode; |
417 | stream >> mode; | 479 | stream >> mode; |
418 | m_screensaver-> setMode ( mode ); | 480 | m_screensaver-> setMode ( mode ); |
419 | } | 481 | } |
482 | else if ( msg == "reloadPowerWarnSettings()" ) { | ||
483 | reloadPowerWarnSettings(); | ||
484 | } | ||
420 | else if ( msg == "setDisplayState(int)" ) { | 485 | else if ( msg == "setDisplayState(int)" ) { |
421 | int state; | 486 | int state; |
422 | stream >> state; | 487 | stream >> state; |
423 | m_screensaver-> setDisplayState ( state != 0 ); | 488 | m_screensaver-> setDisplayState ( state != 0 ); |
424 | } | 489 | } |
425 | else if ( msg == "suspend()" ) { | 490 | else if ( msg == "suspend()" ) { |
426 | emit power(); | 491 | emit power(); |
427 | } | 492 | } |
428 | } | 493 | } |
429 | 494 | ||
495 | void DesktopApplication::reloadPowerWarnSettings() { | ||
496 | Config cfg( "apm" ); | ||
497 | cfg.setGroup( "Warnings" ); | ||
498 | |||
499 | m_timer->changeInterval( cfg.readNumEntry( "checkinterval", 10000 ) ); | ||
500 | m_powerVeryLow = cfg.readNumEntry( "powerverylow", 10 ); | ||
501 | m_powerCritical = cfg.readNumEntry( "powervcritical", 5 ); | ||
502 | } | ||
503 | |||
504 | |||
430 | enum MemState { Unknown, VeryLow, Low, Normal } memstate = Unknown; | 505 | enum MemState { Unknown, VeryLow, Low, Normal } memstate = Unknown; |
431 | 506 | ||
432 | #ifdef Q_WS_QWS | 507 | #ifdef Q_WS_QWS |
433 | bool DesktopApplication::qwsEventFilter( QWSEvent *e ) | 508 | bool DesktopApplication::qwsEventFilter( QWSEvent *e ) |
434 | { | 509 | { |
435 | qpedesktop->checkMemory(); | 510 | qpedesktop->checkMemory(); |
436 | 511 | ||
437 | if ( e->type == QWSEvent::Key ) { | 512 | if ( e->type == QWSEvent::Key ) { |
438 | QWSKeyEvent * ke = ( QWSKeyEvent * ) e; | 513 | QWSKeyEvent * ke = ( QWSKeyEvent * ) e; |
439 | if ( !loggedin && ke->simpleData.keycode != Key_F34 ) | 514 | if ( !loggedin && ke->simpleData.keycode != Key_F34 ) |
440 | return TRUE; | 515 | return TRUE; |
441 | bool press = ke->simpleData.is_press; | 516 | bool press = ke->simpleData.is_press; |
442 | bool autoRepeat = ke->simpleData.is_auto_repeat; | 517 | bool autoRepeat = ke->simpleData.is_auto_repeat; |
443 | 518 | ||
444 | /* | 519 | /* |
445 | app that registers key/message to be sent back to the app, when it doesn't have focus, | 520 | app that registers key/message to be sent back to the app, when it doesn't have focus, |
446 | when user presses key, unless keyboard has been requested from app. | 521 | when user presses key, unless keyboard has been requested from app. |
447 | will not send multiple repeats if user holds key | 522 | will not send multiple repeats if user holds key |
448 | i.e. one shot | 523 | i.e. one shot |
449 | */ | 524 | */ |
450 | if ( !keyRegisterList.isEmpty() && ke->simpleData.keycode !=0 && press) { | 525 | if ( !keyRegisterList.isEmpty() && ke->simpleData.keycode !=0 && press) { |
451 | // qDebug("<<<<<<<<<<<<<keycode %d", ke->simpleData.keycode); | 526 | // qDebug("<<<<<<<<<<<<<keycode %d", ke->simpleData.keycode); |
452 | KeyRegisterList::Iterator it; | 527 | KeyRegisterList::Iterator it; |
453 | for ( it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) { | 528 | for ( it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) { |
454 | if ( ( *it ).getKeyCode() == ke->simpleData.keycode && !autoRepeat && !keyboardGrabbed() ) { | 529 | if ( ( *it ).getKeyCode() == ke->simpleData.keycode && !autoRepeat && !keyboardGrabbed() ) { |
455 | if ( press ) | 530 | if ( press ) |
456 | qDebug( "press" ); | 531 | qDebug( "press" ); |
457 | else | 532 | else |
458 | qDebug( "release" ); | 533 | qDebug( "release" ); |
459 | QCopEnvelope( ( *it ).getChannel().utf8(), ( *it ).getMessage().utf8() ); | 534 | QCopEnvelope( ( *it ).getChannel().utf8(), ( *it ).getMessage().utf8() ); |
460 | } | 535 | } |
461 | } | 536 | } |
462 | } | 537 | } |
463 | 538 | ||
464 | if ( !keyboardGrabbed() ) { | 539 | if ( !keyboardGrabbed() ) { |
465 | if ( ke->simpleData.keycode == Key_F9 ) { | 540 | if ( ke->simpleData.keycode == Key_F9 ) { |
466 | if ( press ) | 541 | if ( press ) |
467 | emit datebook(); | 542 | emit datebook(); |
468 | return TRUE; | 543 | return TRUE; |
469 | } | 544 | } |
470 | if ( ke->simpleData.keycode == Key_F10 ) { | 545 | if ( ke->simpleData.keycode == Key_F10 ) { |
471 | if ( !press && cardSendTimer ) { | 546 | if ( !press && cardSendTimer ) { |
472 | emit contacts(); | 547 | emit contacts(); |
473 | delete cardSendTimer; | 548 | delete cardSendTimer; |
474 | } | 549 | } |
475 | else if ( press ) { | 550 | else if ( press ) { |
476 | cardSendTimer = new QTimer(); | 551 | cardSendTimer = new QTimer(); |
477 | cardSendTimer->start( 2000, TRUE ); | 552 | cardSendTimer->start( 2000, TRUE ); |
478 | connect( cardSendTimer, SIGNAL( timeout() ), this, SLOT( sendCard() ) ); | 553 | connect( cardSendTimer, SIGNAL( timeout() ), this, SLOT( sendCard() ) ); |
479 | } | 554 | } |
480 | return TRUE; | 555 | return TRUE; |
481 | } | 556 | } |
482 | // menu key now opens application menu/toolbar | 557 | |
483 | // if ( ke->simpleData.keycode == Key_F11 ) { | 558 | // if ( ke->simpleData.keycode == Key_F11 ) { |
484 | // if ( press ) emit menu(); | 559 | // if ( press ) emit menu(); |
485 | // return TRUE; | 560 | // return TRUE; |
486 | // } | 561 | // } |
487 | 562 | ||
488 | if ( ke->simpleData.keycode == Key_F12 ) { | 563 | if ( ke->simpleData.keycode == Key_F12 ) { |
489 | while ( activePopupWidget() ) | 564 | while ( activePopupWidget() ) |
490 | activePopupWidget() ->close(); | 565 | activePopupWidget() ->close(); |
491 | if ( press ) | 566 | if ( press ) |
492 | emit launch(); | 567 | emit launch(); |
493 | return TRUE; | 568 | return TRUE; |
494 | } | 569 | } |
495 | if ( ke->simpleData.keycode == Key_F13 ) { | 570 | if ( ke->simpleData.keycode == Key_F13 ) { |
496 | if ( press ) | 571 | if ( press ) |
497 | emit email(); | 572 | emit email(); |
498 | return TRUE; | 573 | return TRUE; |
499 | } | 574 | } |
500 | } | 575 | } |
501 | 576 | ||
502 | if ( ke->simpleData.keycode == Key_F34 ) { | 577 | if ( ke->simpleData.keycode == Key_F34 ) { |
503 | if ( press ) | 578 | if ( press ) |
504 | emit power(); | 579 | emit power(); |
505 | return TRUE; | 580 | return TRUE; |
506 | } | 581 | } |
507 | // This was used for the iPAQ PowerButton | 582 | // This was used for the iPAQ PowerButton |
508 | // See main.cpp for new KeyboardFilter | 583 | // See main.cpp for new KeyboardFilter |
509 | // | 584 | // |
510 | // if ( ke->simpleData.keycode == Key_SysReq ) { | 585 | // if ( ke->simpleData.keycode == Key_SysReq ) { |
511 | // if ( press ) emit power(); | 586 | // if ( press ) emit power(); |
512 | // return TRUE; | 587 | // return TRUE; |
513 | // } | 588 | // } |
514 | if ( ke->simpleData.keycode == Key_F35 ) { | 589 | if ( ke->simpleData.keycode == Key_F35 ) { |
515 | if ( press ) | 590 | if ( press ) |
516 | emit backlight(); | 591 | emit backlight(); |
517 | return TRUE; | 592 | return TRUE; |
518 | } | 593 | } |
519 | if ( ke->simpleData.keycode == Key_F32 ) { | 594 | if ( ke->simpleData.keycode == Key_F32 ) { |
@@ -534,71 +609,73 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) | |||
534 | if ( press ) | 609 | if ( press ) |
535 | emit capsLockStateToggle(); | 610 | emit capsLockStateToggle(); |
536 | } | 611 | } |
537 | if ( ( press && !autoRepeat ) || ( !press && autoRepeat ) ) | 612 | if ( ( press && !autoRepeat ) || ( !press && autoRepeat ) ) |
538 | qpedesktop->keyClick(); | 613 | qpedesktop->keyClick(); |
539 | } | 614 | } |
540 | else { | 615 | else { |
541 | if ( e->type == QWSEvent::Mouse ) { | 616 | if ( e->type == QWSEvent::Mouse ) { |
542 | QWSMouseEvent * me = ( QWSMouseEvent * ) e; | 617 | QWSMouseEvent * me = ( QWSMouseEvent * ) e; |
543 | static bool up = TRUE; | 618 | static bool up = TRUE; |
544 | if ( me->simpleData.state & LeftButton ) { | 619 | if ( me->simpleData.state & LeftButton ) { |
545 | if ( up ) { | 620 | if ( up ) { |
546 | up = FALSE; | 621 | up = FALSE; |
547 | qpedesktop->screenClick(); | 622 | qpedesktop->screenClick(); |
548 | } | 623 | } |
549 | } | 624 | } |
550 | else { | 625 | else { |
551 | up = TRUE; | 626 | up = TRUE; |
552 | } | 627 | } |
553 | } | 628 | } |
554 | } | 629 | } |
555 | 630 | ||
556 | return QPEApplication::qwsEventFilter( e ); | 631 | return QPEApplication::qwsEventFilter( e ); |
557 | } | 632 | } |
558 | #endif | 633 | #endif |
559 | 634 | ||
560 | void DesktopApplication::psTimeout() | 635 | void DesktopApplication::psTimeout() |
561 | { | 636 | { |
562 | qpedesktop->checkMemory(); // in case no events are being generated | 637 | qpedesktop->checkMemory(); // in case no events are being generated |
563 | 638 | ||
564 | *ps = PowerStatusManager::readStatus(); | 639 | *ps = PowerStatusManager::readStatus(); |
565 | 640 | ||
566 | if ( ( ps->batteryStatus() == PowerStatus::VeryLow ) ) { | 641 | // if ( ( ps->batteryStatus() == PowerStatus::VeryLow ) ) { |
567 | pa->alert( tr( "Battery is running very low." ), 6 ); | 642 | if ( ( ps->batteryPercentRemaining() == m_powerVeryLow ) ) { |
643 | pa->alert( tr( "Battery is running very low." ), 6 ); | ||
568 | } | 644 | } |
569 | 645 | ||
570 | if ( ps->batteryStatus() == PowerStatus::Critical ) { | 646 | // if ( ps->batteryStatus() == PowerStatus::Critical ) { |
571 | pa->alert( tr( "Battery level is critical!\n" | 647 | if ( ps->batteryPercentRemaining() == m_powerCritical ) { |
572 | "Keep power off until power restored!" ), 1 ); | 648 | pa->alert( tr( "Battery level is critical!\n" |
649 | "Keep power off until power restored!" ), 1 ); | ||
573 | } | 650 | } |
574 | 651 | ||
575 | if ( ps->backupBatteryStatus() == PowerStatus::VeryLow ) { | 652 | if ( ps->backupBatteryStatus() == PowerStatus::VeryLow ) { |
576 | pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 3 ); | 653 | pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 3 ); |
577 | } | 654 | } |
578 | } | 655 | } |
579 | 656 | ||
580 | 657 | ||
581 | void DesktopApplication::sendCard() | 658 | void DesktopApplication::sendCard() |
582 | { | 659 | { |
583 | delete cardSendTimer; | 660 | delete cardSendTimer; |
584 | cardSendTimer = 0; | 661 | cardSendTimer = 0; |
585 | QString card = getenv( "HOME" ); | 662 | QString card = getenv( "HOME" ); |
586 | card += "/Applications/addressbook/businesscard.vcf"; | 663 | card += "/Applications/addressbook/businesscard.vcf"; |
587 | 664 | ||
588 | if ( QFile::exists( card ) ) { | 665 | if ( QFile::exists( card ) ) { |
589 | QCopEnvelope e( "QPE/Obex", "send(QString,QString,QString)" ); | 666 | QCopEnvelope e( "QPE/Obex", "send(QString,QString,QString)" ); |
590 | QString mimetype = "text/x-vCard"; | 667 | QString mimetype = "text/x-vCard"; |
591 | e << tr( "business card" ) << card << mimetype; | 668 | e << tr( "business card" ) << card << mimetype; |
592 | } | 669 | } |
593 | } | 670 | } |
594 | 671 | ||
595 | #if defined(QPE_HAVE_MEMALERTER) | 672 | #if defined(QPE_HAVE_MEMALERTER) |
596 | QPE_MEMALERTER_IMPL | 673 | QPE_MEMALERTER_IMPL |
597 | #endif | 674 | #endif |
598 | 675 | ||
599 | //=========================================================================== | 676 | //=========================================================================== |
600 | 677 | ||
601 | Desktop::Desktop() : | 678 | Desktop::Desktop() : |
602 | QWidget( 0, 0, WStyle_Tool | WStyle_Customize ), | 679 | QWidget( 0, 0, WStyle_Tool | WStyle_Customize ), |
603 | qcopBridge( 0 ), | 680 | qcopBridge( 0 ), |
604 | transferServer( 0 ), | 681 | transferServer( 0 ), |
diff --git a/core/launcher/desktop.h b/core/launcher/desktop.h index 04c2f61..15d8ef7 100644 --- a/core/launcher/desktop.h +++ b/core/launcher/desktop.h | |||
@@ -51,69 +51,74 @@ public: | |||
51 | signals: | 51 | signals: |
52 | void menu(); | 52 | void menu(); |
53 | void home(); | 53 | void home(); |
54 | void datebook(); | 54 | void datebook(); |
55 | void contacts(); | 55 | void contacts(); |
56 | void launch(); | 56 | void launch(); |
57 | void email(); | 57 | void email(); |
58 | void backlight(); | 58 | void backlight(); |
59 | void power(); | 59 | void power(); |
60 | void symbol(); | 60 | void symbol(); |
61 | void numLockStateToggle(); | 61 | void numLockStateToggle(); |
62 | void capsLockStateToggle(); | 62 | void capsLockStateToggle(); |
63 | void prepareForRestart(); | 63 | void prepareForRestart(); |
64 | 64 | ||
65 | protected: | 65 | protected: |
66 | #ifdef Q_WS_QWS | 66 | #ifdef Q_WS_QWS |
67 | 67 | ||
68 | bool qwsEventFilter( QWSEvent * ); | 68 | bool qwsEventFilter( QWSEvent * ); |
69 | #endif | 69 | #endif |
70 | 70 | ||
71 | void shutdown(); | 71 | void shutdown(); |
72 | void restart(); | 72 | void restart(); |
73 | 73 | ||
74 | public slots: | 74 | public slots: |
75 | virtual void desktopMessage ( const QCString &msg, const QByteArray &data ); | 75 | virtual void desktopMessage ( const QCString &msg, const QByteArray &data ); |
76 | virtual void systemMessage ( const QCString &msg, const QByteArray &data ); | 76 | virtual void systemMessage ( const QCString &msg, const QByteArray &data ); |
77 | 77 | ||
78 | protected slots: | 78 | protected slots: |
79 | void shutdown( ShutdownImpl::Type ); | 79 | void shutdown( ShutdownImpl::Type ); |
80 | void psTimeout(); | 80 | void psTimeout(); |
81 | void sendCard(); | 81 | void sendCard(); |
82 | private: | 82 | private: |
83 | DesktopPowerAlerter *pa; | 83 | void reloadPowerWarnSettings(); |
84 | PowerStatus *ps; | 84 | DesktopPowerAlerter *pa; |
85 | QTimer *cardSendTimer; | 85 | PowerStatus *ps; |
86 | QCopChannel *channel; | 86 | QTimer *cardSendTimer; |
87 | QPEScreenSaver *m_screensaver; | 87 | QCopChannel *channel; |
88 | QPEScreenSaver *m_screensaver; | ||
89 | QTimer * m_timer; | ||
90 | int m_powerVeryLow; | ||
91 | int m_powerCritical; | ||
92 | |||
88 | }; | 93 | }; |
89 | 94 | ||
90 | 95 | ||
91 | class Desktop : public QWidget | 96 | class Desktop : public QWidget |
92 | { | 97 | { |
93 | Q_OBJECT | 98 | Q_OBJECT |
94 | public: | 99 | public: |
95 | Desktop(); | 100 | Desktop(); |
96 | ~Desktop(); | 101 | ~Desktop(); |
97 | 102 | ||
98 | static bool screenLocked(); | 103 | static bool screenLocked(); |
99 | 104 | ||
100 | void show(); | 105 | void show(); |
101 | void checkMemory(); | 106 | void checkMemory(); |
102 | 107 | ||
103 | void keyClick(); | 108 | void keyClick(); |
104 | void screenClick(); | 109 | void screenClick(); |
105 | static void soundAlarm(); | 110 | static void soundAlarm(); |
106 | 111 | ||
107 | public slots: | 112 | public slots: |
108 | void raiseDatebook(); | 113 | void raiseDatebook(); |
109 | void raiseContacts(); | 114 | void raiseContacts(); |
110 | void raiseMenu(); | 115 | void raiseMenu(); |
111 | void raiseLauncher(); | 116 | void raiseLauncher(); |
112 | void raiseEmail(); | 117 | void raiseEmail(); |
113 | void execAutoStart(); | 118 | void execAutoStart(); |
114 | void togglePower(); | 119 | void togglePower(); |
115 | void toggleLight(); | 120 | void toggleLight(); |
116 | void toggleNumLockState(); | 121 | void toggleNumLockState(); |
117 | void toggleCapsLockState(); | 122 | void toggleCapsLockState(); |
118 | void toggleSymbolInput(); | 123 | void toggleSymbolInput(); |
119 | void terminateServers(); | 124 | void terminateServers(); |