summaryrefslogtreecommitdiff
path: root/core/launcher/desktop.cpp
Unidiff
Diffstat (limited to 'core/launcher/desktop.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/desktop.cpp1070
1 files changed, 503 insertions, 567 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp
index 6c67056..fa9736f 100644
--- a/core/launcher/desktop.cpp
+++ b/core/launcher/desktop.cpp
@@ -29,7 +29,7 @@
29#include "irserver.h" 29#include "irserver.h"
30#include "packageslave.h" 30#include "packageslave.h"
31#include "screensaver.h" 31#include "screensaver.h"
32 32
33#include <qpe/applnk.h> 33#include <qpe/applnk.h>
34#include <qpe/mimetype.h> 34#include <qpe/mimetype.h>
35#include <qpe/password.h> 35#include <qpe/password.h>
@@ -58,33 +58,34 @@
58#include <unistd.h> 58#include <unistd.h>
59#include <fcntl.h> 59#include <fcntl.h>
60 60
61
61using namespace Opie; 62using namespace Opie;
62 63
63class QCopKeyRegister 64class QCopKeyRegister
64{ 65{
65public: 66public:
66 QCopKeyRegister() : keyCode( 0 ) 67 QCopKeyRegister() : keyCode( 0 )
67 { } 68 { }
68 QCopKeyRegister( int k, const QString &c, const QString &m ) 69 QCopKeyRegister( int k, const QCString &c, const QCString &m )
69 : keyCode( k ), channel( c ), message( m ) 70 : keyCode( k ), channel( c ), message( m )
70 { } 71 { }
71 72
72 int getKeyCode() const 73 int getKeyCode() const
73 { 74 {
74 return keyCode; 75 return keyCode;
75 } 76 }
76 QString getChannel() const 77 QCString getChannel() const
77 { 78 {
78 return channel; 79 return channel;
79 } 80 }
80 QString getMessage() const 81 QCString getMessage() const
81 { 82 {
82 return message; 83 return message;
83 } 84 }
84 85
85private: 86private:
86 int keyCode; 87 int keyCode;
87 QString channel, message; 88 QCString channel, message;
88}; 89};
89 90
90typedef QValueList<QCopKeyRegister> KeyRegisterList; 91typedef QValueList<QCopKeyRegister> KeyRegisterList;
@@ -94,17 +95,17 @@ static Desktop* qpedesktop = 0;
94static int loggedin = 0; 95static int loggedin = 0;
95static void login( bool at_poweron ) 96static void login( bool at_poweron )
96{ 97{
97 if ( !loggedin ) { 98 if ( !loggedin ) {
98 Global::terminateBuiltin( "calibrate" ); 99 Global::terminateBuiltin( "calibrate" );
99 Password::authenticate( at_poweron ); 100 Password::authenticate( at_poweron );
100 loggedin = 1; 101 loggedin = 1;
101 QCopEnvelope e( "QPE/Desktop", "unlocked()" ); 102 QCopEnvelope e( "QPE/Desktop", "unlocked()" );
102 } 103 }
103} 104}
104 105
105bool Desktop::screenLocked() 106bool Desktop::screenLocked()
106{ 107{
107 return loggedin == 0; 108 return loggedin == 0;
108} 109}
109 110
110/* 111/*
@@ -114,73 +115,73 @@ bool Desktop::screenLocked()
114class DesktopPowerAlerter : public QMessageBox 115class DesktopPowerAlerter : public QMessageBox
115{ 116{
116public: 117public:
117 DesktopPowerAlerter( QWidget *parent, const char *name = 0 ) 118 DesktopPowerAlerter( QWidget *parent, const char *name = 0 )
118 : QMessageBox( tr( "Battery Status" ), "Low Battery", 119 : QMessageBox( tr( "Battery Status" ), "Low Battery",
119 QMessageBox::Critical, 120 QMessageBox::Critical,
120 QMessageBox::Ok | QMessageBox::Default, 121 QMessageBox::Ok | QMessageBox::Default,
121 QMessageBox::NoButton, QMessageBox::NoButton, 122 QMessageBox::NoButton, QMessageBox::NoButton,
122 parent, name, FALSE ) 123 parent, name, FALSE )
123 { 124 {
124 currentPriority = INT_MAX; 125 currentPriority = INT_MAX;
125 alertCount = 0; 126 alertCount = 0;
126 } 127 }
127 128
128 void alert( const QString &text, int priority ); 129 void alert( const QString &text, int priority );
129 void hideEvent( QHideEvent * ); 130 void hideEvent( QHideEvent * );
130private: 131private:
131 int currentPriority; 132 int currentPriority;
132 int alertCount; 133 int alertCount;
133}; 134};
134 135
135void DesktopPowerAlerter::alert( const QString &text, int priority ) 136void DesktopPowerAlerter::alert( const QString &text, int priority )
136{ 137{
137 alertCount++; 138 alertCount++;
138 if ( alertCount < priority ) 139 if ( alertCount < priority )
139 return ; 140 return ;
140 if ( priority > currentPriority ) 141 if ( priority > currentPriority )
141 return ; 142 return ;
142 currentPriority = priority; 143 currentPriority = priority;
143 setText( text ); 144 setText( text );
144 show(); 145 show();
145} 146}
146 147
147 148
148void DesktopPowerAlerter::hideEvent( QHideEvent *e ) 149void DesktopPowerAlerter::hideEvent( QHideEvent *e )
149{ 150{
150 QMessageBox::hideEvent( e ); 151 QMessageBox::hideEvent( e );
151 alertCount = 0; 152 alertCount = 0;
152 currentPriority = INT_MAX; 153 currentPriority = INT_MAX;
153} 154}
154 155
155 156
156void DesktopApplication::switchLCD ( bool on ) 157void DesktopApplication::switchLCD ( bool on )
157{ 158{
158 if ( qApp ) { 159 if ( qApp ) {
159 DesktopApplication *dapp = (DesktopApplication *) qApp; 160 DesktopApplication *dapp = (DesktopApplication *) qApp;
160 161
161 if ( dapp-> m_screensaver ) { 162 if ( dapp-> m_screensaver ) {
162 if ( on ) { 163 if ( on ) {
163 dapp-> m_screensaver-> setDisplayState ( true ); 164 dapp-> m_screensaver-> setDisplayState ( true );
164 dapp-> m_screensaver-> setBacklight ( -3 ); 165 dapp-> m_screensaver-> setBacklight ( -3 );
165 } 166 }
166 else { 167 else {
167 dapp-> m_screensaver-> setDisplayState ( false ); 168 dapp-> m_screensaver-> setDisplayState ( false );
168 } 169 }
169 } 170 }
170 } 171 }
171} 172}
172 173
173 174
174DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) 175DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType )
175 : QPEApplication( argc, argv, appType ) 176 : QPEApplication( argc, argv, appType )
176{ 177{
177 178
178 Config cfg( "apm" ); 179 Config cfg( "apm" );
179 cfg.setGroup( "Warnings" ); 180 cfg.setGroup( "Warnings" );
180 //cfg.readNumEntry( "checkinterval", 10000 ) 181 //cfg.readNumEntry( "checkinterval", 10000 )
181 m_powerVeryLow = cfg.readNumEntry( "powerverylow", 10 ); 182 m_powerVeryLow = cfg.readNumEntry( "powerverylow", 10 );
182 m_powerCritical = cfg.readNumEntry( "powercritical", 5 ); 183 m_powerCritical = cfg.readNumEntry( "powercritical", 5 );
183 184
184 m_ps = new PowerStatus; 185 m_ps = new PowerStatus;
185 m_ps_last = new PowerStatus; 186 m_ps_last = new PowerStatus;
186 pa = new DesktopPowerAlerter( 0 ); 187 pa = new DesktopPowerAlerter( 0 );
@@ -188,25 +189,36 @@ DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType )
188 m_timer = new QTimer( this ); 189 m_timer = new QTimer( this );
189 connect( m_timer, SIGNAL( timeout() ), this, SLOT( apmTimeout() ) ); 190 connect( m_timer, SIGNAL( timeout() ), this, SLOT( apmTimeout() ) );
190 m_timer->start( 5000 ); 191 m_timer->start( 5000 );
191
192 channel = new QCopChannel( "QPE/Desktop", this );
193 connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ),
194 this, SLOT( desktopMessage( const QCString&, const QByteArray& ) ) );
195 192
193 m_last_button = 0;
194 m_button_timer = new QTimer ( );
195 connect ( m_button_timer, SIGNAL( timeout ( )), this, SLOT( sendHeldAction ( )));
196
196 channel = new QCopChannel( "QPE/System", this ); 197 channel = new QCopChannel( "QPE/System", this );
197 connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), 198 connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ),
198 this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) ); 199 this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) );
199 200
201 channel = new QCopChannel( "QPE/Launcher", this );
202 connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ),
203 this, SLOT( launcherMessage( const QCString&, const QByteArray& ) ) );
204
200 m_screensaver = new OpieScreenSaver ( ); 205 m_screensaver = new OpieScreenSaver ( );
201 m_screensaver-> setInterval ( -1 ); 206 m_screensaver-> setInterval ( -1 );
202 QWSServer::setScreenSaver( m_screensaver ); 207 QWSServer::setScreenSaver( m_screensaver );
208
209 rereadVolumes();
210 connect( qApp, SIGNAL( volumeChanged( bool ) ), this, SLOT( rereadVolumes() ) );
203 211
204 apmTimeout ( ); 212 apmTimeout ( );
213
214 grabKeyboard ( );
205} 215}
206 216
207 217
208DesktopApplication::~DesktopApplication() 218DesktopApplication::~DesktopApplication()
209{ 219{
220 ungrabKeyboard ( );
221
210 delete m_ps; 222 delete m_ps;
211 delete m_ps_last; 223 delete m_ps_last;
212 delete pa; 224 delete pa;
@@ -216,7 +228,7 @@ void DesktopApplication::apmTimeout()
216{ 228{
217 qpedesktop->checkMemory(); // in case no events are being generated 229 qpedesktop->checkMemory(); // in case no events are being generated
218 230
219 *m_ps_last = *m_ps; 231 *m_ps_last = *m_ps;
220 *m_ps = PowerStatusManager::readStatus(); 232 *m_ps = PowerStatusManager::readStatus();
221 233
222 if ( m_ps-> acStatus ( ) != m_ps_last-> acStatus ( )) 234 if ( m_ps-> acStatus ( ) != m_ps_last-> acStatus ( ))
@@ -226,223 +238,231 @@ void DesktopApplication::apmTimeout()
226 int bat = m_ps-> batteryPercentRemaining ( ); 238 int bat = m_ps-> batteryPercentRemaining ( );
227 239
228 if ( bat < m_ps_last-> batteryPercentRemaining ( )) { 240 if ( bat < m_ps_last-> batteryPercentRemaining ( )) {
229 if ( bat <= m_powerCritical ) 241 if ( bat <= m_powerCritical )
230 pa->alert( tr( "Battery level is critical!\nKeep power off until power restored!" ), 1 ); 242 pa->alert( tr( "Battery level is critical!\nKeep power off until power restored!" ), 1 );
231 else if ( bat <= m_powerVeryLow ) 243 else if ( bat <= m_powerVeryLow )
232 pa->alert( tr( "Battery is running very low." ), 2 ); 244 pa->alert( tr( "Battery is running very low." ), 2 );
233 } 245 }
234 if ( m_ps-> backupBatteryStatus ( ) == PowerStatus::VeryLow ) 246 if ( m_ps-> backupBatteryStatus ( ) == PowerStatus::VeryLow )
235 pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 2 ); 247 pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 2 );
236 } 248 }
237} 249}
238 250
239void DesktopApplication::desktopMessage( const QCString &msg, const QByteArray &data ) 251
252void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data )
240{ 253{
241 QDataStream stream( data, IO_ReadOnly ); 254 QDataStream stream ( data, IO_ReadOnly );
242 if ( msg == "keyRegister(int key, QString channel, QString message)" ) {
243 int k;
244 QString c, m;
245 stream >> k;
246 stream >> c;
247 stream >> m;
248 255
249 qWarning( "KeyRegisterReceived: %i, %s, %s", k, ( const char* ) c, ( const char * ) m ); 256 if ( msg == "setScreenSaverInterval(int)" ) {
250 keyRegisterList.append( QCopKeyRegister( k, c, m ) ); 257 int time;
251 } 258 stream >> time;
259 m_screensaver-> setInterval( time );
260 }
261 else if ( msg == "setScreenSaverIntervals(int,int,int)" ) {
262 int t1, t2, t3;
263 stream >> t1 >> t2 >> t3;
264 m_screensaver-> setIntervals( t1, t2, t3 );
265 }
266 else if ( msg == "setBacklight(int)" ) {
267 int bright;
268 stream >> bright;
269 m_screensaver-> setBacklight( bright );
270 }
271 else if ( msg == "setScreenSaverMode(int)" ) {
272 int mode;
273 stream >> mode;
274 m_screensaver-> setMode ( mode );
275 }
276 else if ( msg == "reloadPowerWarnSettings()" ) {
277 reloadPowerWarnSettings();
278 }
279 else if ( msg == "setDisplayState(int)" ) {
280 int state;
281 stream >> state;
282 m_screensaver-> setDisplayState ( state != 0 );
283 }
284 else if ( msg == "suspend()" ) {
285 emit power();
286 }
287 else if ( msg == "sendBusinessCard()" ) {
288 QString card = ::getenv ( "HOME" );
289 card += "/Applications/addressbook/businesscard.vcf";
290
291 if ( QFile::exists( card ) ) {
292 QCopEnvelope e ( "QPE/Obex", "send(QString,QString,QString)" );
293 QString mimetype = "text/x-vCard";
294 e << tr( "business card" ) << card << mimetype;
295 }
296 }
252} 297}
253 298
254 299void DesktopApplication::reloadPowerWarnSettings()
255void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data )
256{ 300{
257 QDataStream stream ( data, IO_ReadOnly ); 301 Config cfg( "apm" );
258 302 cfg.setGroup( "Warnings" );
259 if ( msg == "setScreenSaverInterval(int)" ) { 303
260 int time; 304 // m_timer->changeInterval( cfg.readNumEntry( "checkinterval", 10000 ) );
261 stream >> time; 305 m_powerVeryLow = cfg.readNumEntry( "powerverylow", 10 );
262 m_screensaver-> setInterval( time ); 306 m_powerCritical = cfg.readNumEntry( "powervcritical", 5 );
263 }
264 else if ( msg == "setScreenSaverIntervals(int,int,int)" ) {
265 int t1, t2, t3;
266 stream >> t1 >> t2 >> t3;
267 m_screensaver-> setIntervals( t1, t2, t3 );
268 }
269 else if ( msg == "setBacklight(int)" ) {
270 int bright;
271 stream >> bright;
272 m_screensaver-> setBacklight( bright );
273 }
274 else if ( msg == "setScreenSaverMode(int)" ) {
275 int mode;
276 stream >> mode;
277 m_screensaver-> setMode ( mode );
278 }
279 else if ( msg == "reloadPowerWarnSettings()" ) {
280 reloadPowerWarnSettings();
281 }
282 else if ( msg == "setDisplayState(int)" ) {
283 int state;
284 stream >> state;
285 m_screensaver-> setDisplayState ( state != 0 );
286 }
287 else if ( msg == "suspend()" ) {
288 emit power();
289 }
290}
291
292void DesktopApplication::reloadPowerWarnSettings() {
293 Config cfg( "apm" );
294 cfg.setGroup( "Warnings" );
295
296 // m_timer->changeInterval( cfg.readNumEntry( "checkinterval", 10000 ) );
297 m_powerVeryLow = cfg.readNumEntry( "powerverylow", 10 );
298 m_powerCritical = cfg.readNumEntry( "powervcritical", 5 );
299} 307}
300 308
301 309
302enum MemState { Unknown, VeryLow, Low, Normal } memstate = Unknown; 310enum MemState { Unknown, VeryLow, Low, Normal } memstate = Unknown;
303 311
304#ifdef Q_WS_QWS 312
305bool DesktopApplication::qwsEventFilter( QWSEvent *e ) 313void DesktopApplication::launcherMessage( const QCString & msg, const QByteArray & data )
314{
315 QDataStream stream ( data, IO_ReadOnly );
316
317 if ( msg == "deviceButton(int,int,int)" ) {
318 int keycode, press, autoRepeat;
319 stream >> keycode >> press >> autoRepeat;
320
321 const ODeviceButton *db = ODevice::inst ( )-> buttonForKeycode ( keycode );
322
323 if ( db )
324 checkButtonAction ( db, keycode, press, autoRepeat );
325 }
326 else if ( msg == "keyRegister(int,QCString,QCString)" ) {
327 int k;
328 QCString c, m;
329 stream >> k >> c >> m;
330
331 keyRegisterList.append ( QCopKeyRegister ( k, c, m ));
332 }
333}
334
335void DesktopApplication::sendHeldAction ( )
306{ 336{
307 qpedesktop->checkMemory(); 337 if ( m_last_button ) {
308 338 m_last_button-> heldAction ( ). send ( );
309 if ( e->type == QWSEvent::Key ) { 339 m_last_button = 0;
310 QWSKeyEvent * ke = ( QWSKeyEvent * ) e; 340 }
311 if ( !loggedin && ke->simpleData.keycode != Key_F34 )
312 return TRUE;
313 bool press = ke->simpleData.is_press;
314 bool autoRepeat = ke->simpleData.is_auto_repeat;
315
316 /*
317 app that registers key/message to be sent back to the app, when it doesn't have focus,
318 when user presses key, unless keyboard has been requested from app.
319 will not send multiple repeats if user holds key
320 i.e. one shot
321 */
322 if ( !keyRegisterList.isEmpty() && ke->simpleData.keycode !=0 && press) {
323// qDebug("<<<<<<<<<<<<<keycode %d", ke->simpleData.keycode);
324 KeyRegisterList::Iterator it;
325 for ( it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) {
326 if ( ( *it ).getKeyCode() == ke->simpleData.keycode && !autoRepeat && !keyboardGrabbed() ) {
327 if ( press )
328 qDebug( "press" );
329 else
330 qDebug( "release" );
331 QCopEnvelope( ( *it ).getChannel().utf8(), ( *it ).getMessage().utf8() );
332 }
333 }
334 }
335
336 if ( !keyboardGrabbed() ) {
337 if ( ke->simpleData.keycode == Key_F9 ) {
338 if ( press )
339 emit datebook();
340 return TRUE;
341 }
342 if ( ke->simpleData.keycode == Key_F10 ) {
343 if ( !press && cardSendTimer ) {
344 emit contacts();
345 delete cardSendTimer;
346 }
347 else if ( press ) {
348 cardSendTimer = new QTimer();
349 cardSendTimer->start( 2000, TRUE );
350 connect( cardSendTimer, SIGNAL( timeout() ), this, SLOT( sendCard() ) );
351 }
352 return TRUE;
353 }
354
355 if ( ke->simpleData.keycode == Key_F11 ) {
356 if ( press ) emit menu();
357 return TRUE;
358 }
359
360 if ( ke->simpleData.keycode == Key_F12 ) {
361 while ( activePopupWidget() )
362 activePopupWidget() ->close();
363 if ( press )
364 emit launch();
365 return TRUE;
366 }
367 if ( ke->simpleData.keycode == Key_F13 ) {
368 if ( press )
369 emit email();
370 return TRUE;
371 }
372 }
373
374 if ( ke->simpleData.keycode == Key_F34 ) {
375 if ( press )
376 emit power();
377 return TRUE;
378 }
379 // This was used for the iPAQ PowerButton
380 // See main.cpp for new KeyboardFilter
381 //
382 // if ( ke->simpleData.keycode == Key_SysReq ) {
383 // if ( press ) emit power();
384 // return TRUE;
385 // }
386 if ( ke->simpleData.keycode == Key_F35 ) {
387 if ( press )
388 emit backlight();
389 return TRUE;
390 }
391 if ( ke->simpleData.keycode == Key_F32 ) {
392 if ( press )
393 QCopEnvelope e( "QPE/Desktop", "startSync()" );
394 return TRUE;
395 }
396 if ( ke->simpleData.keycode == Key_F31 && !ke->simpleData.modifiers ) {
397 if ( press )
398 emit symbol();
399 return TRUE;
400 }
401 if ( ke->simpleData.keycode == Key_NumLock ) {
402 if ( press )
403 emit numLockStateToggle();
404 }
405 if ( ke->simpleData.keycode == Key_CapsLock ) {
406 if ( press )
407 emit capsLockStateToggle();
408 }
409 if ( ( press && !autoRepeat ) || ( !press && autoRepeat ) )
410 qpedesktop->keyClick();
411 }
412 else {
413 if ( e->type == QWSEvent::Mouse ) {
414 QWSMouseEvent * me = ( QWSMouseEvent * ) e;
415 static bool up = TRUE;
416 if ( me->simpleData.state & LeftButton ) {
417 if ( up ) {
418 up = FALSE;
419 qpedesktop->screenClick();
420 }
421 }
422 else {
423 up = TRUE;
424 }
425 }
426 }
427
428 return QPEApplication::qwsEventFilter( e );
429} 341}
430#endif
431 342
432 343
433void DesktopApplication::sendCard() 344
345void DesktopApplication::checkButtonAction ( const ODeviceButton *db, int keycode, bool press, bool autoRepeat )
346 {
347 if ( db ) {
348 if ( !press && !autoRepeat && m_button_timer-> isActive ( )) {
349 m_button_timer-> stop ( );
350 if ( !db-> pressedAction ( ). channel ( ). isEmpty ( )) {
351 db-> pressedAction ( ). send ( );
352 }
353 }
354 else if ( press && !autoRepeat ) {
355 m_button_timer-> stop ( );
356
357 if ( !db-> heldAction ( ). channel ( ). isEmpty ( )) {
358 m_last_button = db;
359 m_button_timer-> start ( ODevice::inst ( )-> buttonHoldTime ( ), true );
360 }
361 }
362 }
363}
364
365bool DesktopApplication::eventFilter ( QObject *o, QEvent *e )
434{ 366{
435 delete cardSendTimer; 367 if ( e-> type ( ) == QEvent::KeyPress || e-> type ( ) == QEvent::KeyRelease ) {
436 cardSendTimer = 0; 368 QKeyEvent *ke = (QKeyEvent *) e;
437 QString card = getenv( "HOME" ); 369
438 card += "/Applications/addressbook/businesscard.vcf"; 370 const ODeviceButton *db = ODevice::inst ( )-> buttonForKeycode ( ke-> key ( ));
371
372 if ( db ) {
373 checkButtonAction ( db, ke-> key ( ), e-> type ( ) == QEvent::KeyPress, ke-> isAutoRepeat ( ));
374 return true;
375 }
376 }
377 return QPEApplication::eventFilter ( o, e );
378}
379
380#ifdef Q_WS_QWS
381
382bool DesktopApplication::qwsEventFilter( QWSEvent *e )
383{
384 qpedesktop->checkMemory();
385
386 if ( e->type == QWSEvent::Key ) {
387 QWSKeyEvent * ke = (QWSKeyEvent *) e;
388 ushort keycode = ke-> simpleData. keycode;
389
390 if ( !loggedin && keycode != Key_F34 )
391 return true;
392
393 bool press = ke-> simpleData. is_press;
394 bool autoRepeat = ke-> simpleData. is_auto_repeat;
395
396 if ( !keyboardGrabbed ( )) {
397 // app that registers key/message to be sent back to the app, when it doesn't have focus,
398 // when user presses key, unless keyboard has been requested from app.
399 // will not send multiple repeats if user holds key
400 // i.e. one shot
401
402 if ( keycode != 0 && press && !autoRepeat ) {
403 for ( KeyRegisterList::Iterator it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) {
404 if (( *it ). getKeyCode ( ) == keycode ) {
405 QCopEnvelope (( *it ). getChannel ( ), ( *it ). getMessage ( ));
406 return true;
407 }
408 }
409 }
410 }
411
412 if ( keycode == HardKey_Suspend ) {
413 if ( press )
414 emit power ( );
415 return true;
416 }
417 else if ( keycode == HardKey_Backlight ) {
418 if ( press )
419 emit backlight ( );
420 return true;
421 }
422 else if ( keycode == Key_F32 ) {
423 if ( press )
424 QCopEnvelope e( "QPE/Desktop", "startSync()" );
425 return true;
426 }
427 else if ( keycode == Key_F31 && !ke-> simpleData. modifiers ) { // Symbol Key -> show Unicode IM
428 if ( press )
429 emit symbol ( );
430 return true;
431 }
432 else if ( keycode == Key_NumLock ) {
433 if ( press )
434 emit numLockStateToggle ( );
435 }
436 else if ( keycode == Key_CapsLock ) {
437 if ( press )
438 emit capsLockStateToggle();
439 }
440 if (( press && !autoRepeat ) || ( !press && autoRepeat )) {
441 if ( m_keyclick_sound )
442 ODevice::inst ( )-> keySound ( );
443 }
444 }
445 else if ( e-> type == QWSEvent::Mouse ) {
446 QWSMouseEvent * me = ( QWSMouseEvent * ) e;
447 static bool up = true;
448
449 if ( me-> simpleData. state & LeftButton ) {
450 if ( up ) {
451 up = false;
452 if ( m_screentap_sound )
453 ODevice::inst ( ) -> touchSound ( );
454 }
455 }
456 else {
457 up = true;
458 }
459 }
439 460
440 if ( QFile::exists( card ) ) { 461 return QPEApplication::qwsEventFilter ( e );
441 QCopEnvelope e( "QPE/Obex", "send(QString,QString,QString)" );
442 QString mimetype = "text/x-vCard";
443 e << tr( "business card" ) << card << mimetype;
444 }
445} 462}
463#endif
464
465
446 466
447#if defined(QPE_HAVE_MEMALERTER) 467#if defined(QPE_HAVE_MEMALERTER)
448QPE_MEMALERTER_IMPL 468QPE_MEMALERTER_IMPL
@@ -451,251 +471,172 @@ QPE_MEMALERTER_IMPL
451//=========================================================================== 471//===========================================================================
452 472
453Desktop::Desktop() : 473Desktop::Desktop() :
454 QWidget( 0, 0, WStyle_Tool | WStyle_Customize ), 474 QWidget( 0, 0, WStyle_Tool | WStyle_Customize ),
455 qcopBridge( 0 ), 475 qcopBridge( 0 ),
456 transferServer( 0 ), 476 transferServer( 0 ),
457 packageSlave( 0 ) 477 packageSlave( 0 )
458{ 478{
459 qpedesktop = this; 479 qpedesktop = this;
460 480
461 // bg = new Info( this ); 481 // bg = new Info( this );
462 tb = new TaskBar; 482 tb = new TaskBar;
463 483
464 launcher = new Launcher( 0, 0, WStyle_Customize | QWidget::WGroupLeader ); 484 launcher = new Launcher( 0, 0, WStyle_Customize | QWidget::WGroupLeader );
465 485
466 connect( launcher, SIGNAL( busy() ), tb, SLOT( startWait() ) ); 486 connect( launcher, SIGNAL( busy() ), tb, SLOT( startWait() ) );
467 connect( launcher, SIGNAL( notBusy( const QString& ) ), tb, SLOT( stopWait( const QString& ) ) ); 487 connect( launcher, SIGNAL( notBusy( const QString& ) ), tb, SLOT( stopWait( const QString& ) ) );
468 488
469 int displayw = qApp->desktop() ->width(); 489 int displayw = qApp->desktop() ->width();
470 int displayh = qApp->desktop() ->height(); 490 int displayh = qApp->desktop() ->height();
471 491
472 492
473 QSize sz = tb->sizeHint(); 493 QSize sz = tb->sizeHint();
474 494
475 setGeometry( 0, displayh - sz.height(), displayw, sz.height() ); 495 setGeometry( 0, displayh - sz.height(), displayw, sz.height() );
476 tb->setGeometry( 0, displayh - sz.height(), displayw, sz.height() ); 496 tb->setGeometry( 0, displayh - sz.height(), displayw, sz.height() );
477 497
478 tb->show(); 498 tb->show();
479 launcher->showMaximized(); 499 launcher->showMaximized();
480 launcher->show(); 500 launcher->show();
481 launcher->raise(); 501 launcher->raise();
482#if defined(QPE_HAVE_MEMALERTER) 502#if defined(QPE_HAVE_MEMALERTER)
483 503
484 initMemalerter(); 504 initMemalerter();
485#endif 505#endif
486 // start services 506 // start services
487 startTransferServer(); 507 startTransferServer();
488 ( void ) new IrServer( this ); 508 ( void ) new IrServer( this );
489 rereadVolumes();
490 509
491 packageSlave = new PackageSlave( this ); 510 packageSlave = new PackageSlave( this );
492 connect( qApp, SIGNAL( volumeChanged( bool ) ), this, SLOT( rereadVolumes() ) );
493 511
494 qApp->installEventFilter( this ); 512 qApp->installEventFilter( this );
495 513
496 qApp-> setMainWidget ( launcher ); 514 qApp-> setMainWidget ( launcher );
497} 515}
498 516
499void Desktop::show() 517void Desktop::show()
500{ 518{
501 login( TRUE ); 519 login( TRUE );
502 QWidget::show(); 520 QWidget::show();
503} 521}
504 522
505Desktop::~Desktop() 523Desktop::~Desktop()
506{ 524{
507 delete launcher; 525 delete launcher;
508 delete tb; 526 delete tb;
509 delete qcopBridge; 527 delete qcopBridge;
510 delete transferServer; 528 delete transferServer;
511} 529}
512 530
513bool Desktop::recoverMemory() 531bool Desktop::recoverMemory()
514{ 532{
515 return tb->recoverMemory(); 533 return tb->recoverMemory();
516} 534}
517 535
518void Desktop::checkMemory() 536void Desktop::checkMemory()
519{ 537{
520#if defined(QPE_HAVE_MEMALERTER) 538#if defined(QPE_HAVE_MEMALERTER)
521 static bool ignoreNormal = FALSE; 539 static bool ignoreNormal = FALSE;
522 static bool existingMessage = FALSE; 540 static bool existingMessage = FALSE;
523 541
524 if ( existingMessage ) 542 if ( existingMessage )
525 return ; // don't show a second message while still on first 543 return ; // don't show a second message while still on first
526 544
527 existingMessage = TRUE; 545 existingMessage = TRUE;
528 switch ( memstate ) { 546 switch ( memstate ) {
529 case Unknown: 547 case Unknown:
530 break; 548 break;
531 case Low: 549 case Low:
532 memstate = Unknown; 550 memstate = Unknown;
533 if ( recoverMemory() ) 551 if ( recoverMemory() )
534 ignoreNormal = TRUE; 552 ignoreNormal = TRUE;
535 else 553 else
536 QMessageBox::warning( 0 , "Memory Status", 554 QMessageBox::warning( 0 , "Memory Status",
537 "The memory smacks of shortage. \n" 555 "The memory smacks of shortage. \n"
538 "Please save data. " ); 556 "Please save data. " );
539 break; 557 break;
540 case Normal: 558 case Normal:
541 memstate = Unknown; 559 memstate = Unknown;
542 if ( ignoreNormal ) 560 if ( ignoreNormal )
543 ignoreNormal = FALSE; 561 ignoreNormal = FALSE;
544// else 562 // else
545// QMessageBox::information ( 0 , "Memory Status", 563 // QMessageBox::information ( 0 , "Memory Status",
546// "There is enough memory again." ); 564 // "There is enough memory again." );
547 break; 565 break;
548 case VeryLow: 566 case VeryLow:
549 memstate = Unknown; 567 memstate = Unknown;
550 QMessageBox::critical( 0 , "Memory Status", 568 QMessageBox::critical( 0 , "Memory Status",
551 "The memory is very low. \n" 569 "The memory is very low. \n"
552 "Please end this application \n" 570 "Please end this application \n"
553 "immediately." ); 571 "immediately." );
554 recoverMemory(); 572 recoverMemory();
555 } 573 }
556 existingMessage = FALSE; 574 existingMessage = FALSE;
557#endif 575#endif
558} 576}
559 577
560static bool isVisibleWindow( int wid ) 578static bool isVisibleWindow( int wid )
561{ 579{
562#ifdef QWS 580#ifdef QWS
563 const QList<QWSWindow> &list = qwsServer->clientWindows(); 581 const QList<QWSWindow> &list = qwsServer->clientWindows();
564 QWSWindow* w; 582 QWSWindow* w;
565 for ( QListIterator<QWSWindow> it( list ); ( w = it.current() ); ++it ) { 583 for ( QListIterator<QWSWindow> it( list ); ( w = it.current() ); ++it ) {
566 if ( w->winId() == wid ) 584 if ( w->winId() == wid )
567 return !w->isFullyObscured(); 585 return !w->isFullyObscured();
568 } 586 }
569#endif 587#endif
570 return FALSE; 588 return FALSE;
571} 589}
572 590
573static bool hasVisibleWindow( const QString& clientname ) 591static bool hasVisibleWindow( const QString& clientname )
574{ 592{
575#ifdef QWS 593#ifdef QWS
576 const QList<QWSWindow> &list = qwsServer->clientWindows(); 594 const QList<QWSWindow> &list = qwsServer->clientWindows();
577 QWSWindow* w; 595 QWSWindow* w;
578 for ( QListIterator<QWSWindow> it( list ); ( w = it.current() ); ++it ) { 596 for ( QListIterator<QWSWindow> it( list ); ( w = it.current() ); ++it ) {
579 if ( w->client() ->identity() == clientname && !w->isFullyObscured() ) 597 if ( w->client() ->identity() == clientname && !w->isFullyObscured() )
580 return TRUE; 598 return TRUE;
581 } 599 }
582#endif 600#endif
583 return FALSE; 601 return FALSE;
584} 602}
585 603
586void Desktop::raiseLauncher()
587{
588 Config cfg( "qpe" ); //F12 'Home'
589 cfg.setGroup( "AppsKey" );
590 QString tempItem;
591 tempItem = cfg.readEntry( "Middle", "Home" );
592 if ( tempItem == "Home" || tempItem.isEmpty() ) {
593 home ( );
594 }
595 else {
596 QCopEnvelope e( "QPE/System", "execute(QString)" );
597 e << tempItem;
598 }
599}
600
601void Desktop::home ( )
602{
603 if ( isVisibleWindow( launcher->winId() ) )
604 launcher->nextView();
605 else
606 launcher->raise();
607}
608 604
609void Desktop::executeOrModify( const QString& appLnkFile ) 605void Desktop::executeOrModify( const QString& appLnkFile )
610{ 606{
611 AppLnk lnk( MimeType::appsFolderName() + "/" + appLnkFile ); 607 AppLnk lnk( MimeType::appsFolderName() + "/" + appLnkFile );
612 if ( lnk.isValid() ) { 608 if ( lnk.isValid() ) {
613 QCString app = lnk.exec().utf8(); 609 QCString app = lnk.exec().utf8();
614 Global::terminateBuiltin( "calibrate" ); 610 Global::terminateBuiltin( "calibrate" );
615 if ( QCopChannel::isRegistered( "QPE/Application/" + app ) ) { 611 if ( QCopChannel::isRegistered( "QPE/Application/" + app ) ) {
616 // MRUList::addTask( &lnk ); 612 // MRUList::addTask( &lnk );
617 if ( hasVisibleWindow( app ) ) 613 if ( hasVisibleWindow( app ) )
618 QCopChannel::send( "QPE/Application/" + app, "nextView()" ); 614 QCopChannel::send( "QPE/Application/" + app, "nextView()" );
619 else 615 else
620 QCopChannel::send( "QPE/Application/" + app, "raise()" ); 616 QCopChannel::send( "QPE/Application/" + app, "raise()" );
621 } 617 }
622 else { 618 else {
623 lnk.execute(); 619 lnk.execute();
624 } 620 }
625 } 621 }
626}
627
628void Desktop::raiseDatebook()
629{
630 Config cfg( "qpe" ); //F9 'Activity'
631 cfg.setGroup( "AppsKey" );
632 QString tempItem;
633 tempItem = cfg.readEntry( "LeftEnd" , "Calendar" );
634 if ( tempItem == "Calendar" || tempItem.isEmpty() ) {
635 tempItem = "datebook";
636 }
637 QCopEnvelope e( "QPE/System", "execute(QString)" );
638 e << tempItem;
639}
640
641void Desktop::raiseContacts()
642{
643 Config cfg( "qpe" ); //F10, 'Contacts'
644 cfg.setGroup( "AppsKey" );
645 QString tempItem;
646 tempItem = cfg.readEntry( "Left2nd", "Address Book" );
647 if ( tempItem == "Address Book" || tempItem.isEmpty() ) {
648 tempItem = "addressbook";
649 }
650 QCopEnvelope e( "QPE/System", "execute(QString)" );
651 e << tempItem;
652}
653
654void Desktop::raiseMenu()
655{
656 Config cfg( "qpe" ); //F11, 'Menu
657 cfg.setGroup( "AppsKey" );
658 QString tempItem;
659 tempItem = cfg.readEntry( "Right2nd" , "Popup Menu" );
660 if ( tempItem == "Popup Menu" || tempItem.isEmpty() ) {
661 Global::terminateBuiltin( "calibrate" );
662 tb->startMenu() ->launch();
663 }
664 else {
665 QCopEnvelope e( "QPE/System", "execute(QString)" );
666 e << tempItem;
667 }
668}
669
670void Desktop::raiseEmail()
671{
672 Config cfg( "qpe" ); //F13, 'Mail' // only in zaurus, on ipaq mail key is F11
673 cfg.setGroup( "AppsKey" );
674 QString tempItem;
675 tempItem = cfg.readEntry( "RightEnd", "Mail" );
676 if ( tempItem == "Mail" || tempItem == "qtmail" || tempItem.isEmpty() ) {
677 tempItem = "mail";
678 }
679 QCopEnvelope e( "QPE/System", "execute(QString)" );
680 e << tempItem;
681} 622}
682 623
683// autoStarts apps on resume and start 624// autoStarts apps on resume and start
684void Desktop::execAutoStart() 625void Desktop::execAutoStart()
685{ 626{
686 QString appName; 627 QString appName;
687 int delay; 628 int delay;
688 QDateTime now = QDateTime::currentDateTime(); 629 QDateTime now = QDateTime::currentDateTime();
689 Config cfg( "autostart" ); 630 Config cfg( "autostart" );
690 cfg.setGroup( "AutoStart" ); 631 cfg.setGroup( "AutoStart" );
691 appName = cfg.readEntry( "Apps", "" ); 632 appName = cfg.readEntry( "Apps", "" );
692 delay = ( cfg.readEntry( "Delay", "0" ) ).toInt(); 633 delay = ( cfg.readEntry( "Delay", "0" ) ).toInt();
693 // If the time between suspend and resume was longer then the 634 // If the time between suspend and resume was longer then the
694 // value saved as delay, start the app 635 // value saved as delay, start the app
695 if ( suspendTime.secsTo( now ) >= ( delay * 60 ) && !appName.isEmpty() ) { 636 if ( suspendTime.secsTo( now ) >= ( delay * 60 ) && !appName.isEmpty() ) {
696 QCopEnvelope e( "QPE/System", "execute(QString)" ); 637 QCopEnvelope e( "QPE/System", "execute(QString)" );
697 e << QString( appName ); 638 e << QString( appName );
698 } 639 }
699} 640}
700 641
701#if defined(QPE_HAVE_TOGGLELIGHT) 642#if defined(QPE_HAVE_TOGGLELIGHT)
@@ -713,193 +654,188 @@ void Desktop::execAutoStart()
713 654
714void Desktop::togglePower() 655void Desktop::togglePower()
715{ 656{
716 static bool excllock = false; 657 static bool excllock = false;
717 658
718 qDebug ( "togglePower (locked == %d)", excllock ? 1 : 0 ); 659 qDebug ( "togglePower (locked == %d)", excllock ? 1 : 0 );
719 660
720 if ( excllock ) 661 if ( excllock )
721 return; 662 return ;
722 663
723 excllock = true; 664 excllock = true;
724 665
725 bool wasloggedin = loggedin; 666 bool wasloggedin = loggedin;
726 loggedin = 0; 667 loggedin = 0;
727 suspendTime = QDateTime::currentDateTime(); 668 suspendTime = QDateTime::currentDateTime();
728 669
729#ifdef QWS 670#ifdef QWS
730 if ( Password::needToAuthenticate ( true ) && qt_screen ) { 671
731 // Should use a big black window instead. 672 if ( Password::needToAuthenticate ( true ) && qt_screen ) {
732 // But this would not show up fast enough 673 // Should use a big black window instead.
733 QGfx *g = qt_screen-> screenGfx ( ); 674 // But this would not show up fast enough
734 g-> fillRect ( 0, 0, qt_screen-> width ( ), qt_screen-> height ( )); 675 QGfx *g = qt_screen-> screenGfx ( );
735 delete g; 676 g-> fillRect ( 0, 0, qt_screen-> width ( ), qt_screen-> height ( ));
736 } 677 delete g;
678 }
737#endif 679#endif
738 680
739 ODevice::inst ( )-> suspend ( ); 681 ODevice::inst ( )-> suspend ( );
740 682
741 DesktopApplication::switchLCD ( true ); // force LCD on without slow qcop call 683 DesktopApplication::switchLCD ( true ); // force LCD on without slow qcop call
742 QWSServer::screenSaverActivate ( false ); 684 QWSServer::screenSaverActivate ( false );
743 685
744 { 686 {
745 QCopEnvelope( "QPE/Card", "mtabChanged()" ); // might have changed while asleep 687 QCopEnvelope( "QPE/Card", "mtabChanged()" ); // might have changed while asleep
746 } 688 }
747 689
748 if ( wasloggedin ) 690 if ( wasloggedin )
749 login ( true ); 691 login ( true );
750 692
751 execAutoStart(); 693 execAutoStart();
752 //qcopBridge->closeOpenConnections(); 694 //qcopBridge->closeOpenConnections();
753 695
754 excllock = false; 696 excllock = false;
755} 697}
756 698
757void Desktop::toggleLight() 699void Desktop::toggleLight()
758{ 700{
759 QCopEnvelope e( "QPE/System", "setBacklight(int)" ); 701 QCopEnvelope e( "QPE/System", "setBacklight(int)" );
760 e << -2; // toggle 702 e << -2; // toggle
761} 703}
762 704
763void Desktop::toggleSymbolInput() 705void Desktop::toggleSymbolInput()
764{ 706{
765 tb->toggleSymbolInput(); 707 tb->toggleSymbolInput();
766} 708}
767 709
768void Desktop::toggleNumLockState() 710void Desktop::toggleNumLockState()
769{ 711{
770 tb->toggleNumLockState(); 712 tb->toggleNumLockState();
771} 713}
772 714
773void Desktop::toggleCapsLockState() 715void Desktop::toggleCapsLockState()
774{ 716{
775 tb->toggleCapsLockState(); 717 tb->toggleCapsLockState();
776} 718}
777 719
778void Desktop::styleChange( QStyle &s ) 720void Desktop::styleChange( QStyle &s )
779{ 721{
780 QWidget::styleChange( s ); 722 QWidget::styleChange( s );
781 int displayw = qApp->desktop() ->width(); 723 int displayw = qApp->desktop() ->width();
782 int displayh = qApp->desktop() ->height(); 724 int displayh = qApp->desktop() ->height();
783 725
784 QSize sz = tb->sizeHint(); 726 QSize sz = tb->sizeHint();
785 727
786 tb->setGeometry( 0, displayh - sz.height(), displayw, sz.height() ); 728 tb->setGeometry( 0, displayh - sz.height(), displayw, sz.height() );
787} 729}
788 730
789void DesktopApplication::shutdown() 731void DesktopApplication::shutdown()
790{ 732{
791 if ( type() != GuiServer ) 733 if ( type() != GuiServer )
792 return ; 734 return ;
793 ShutdownImpl *sd = new ShutdownImpl( 0, 0, WDestructiveClose ); 735 ShutdownImpl *sd = new ShutdownImpl( 0, 0, WDestructiveClose );
794 connect( sd, SIGNAL( shutdown( ShutdownImpl::Type ) ), 736 connect( sd, SIGNAL( shutdown( ShutdownImpl::Type ) ),
795 this, SLOT( shutdown( ShutdownImpl::Type ) ) ); 737 this, SLOT( shutdown( ShutdownImpl::Type ) ) );
796 sd->showMaximized(); 738 sd->showMaximized();
797} 739}
798 740
799void DesktopApplication::shutdown( ShutdownImpl::Type t ) 741void DesktopApplication::shutdown( ShutdownImpl::Type t )
800{ 742{
801 switch ( t ) { 743 switch ( t ) {
802 case ShutdownImpl::ShutdownSystem: 744 case ShutdownImpl::ShutdownSystem:
803 execlp( "shutdown", "shutdown", "-h", "now", ( void* ) 0 ); 745 execlp( "shutdown", "shutdown", "-h", "now", ( void* ) 0 );
804 break; 746 break;
805 case ShutdownImpl::RebootSystem: 747 case ShutdownImpl::RebootSystem:
806 execlp( "shutdown", "shutdown", "-r", "now", ( void* ) 0 ); 748 execlp( "shutdown", "shutdown", "-r", "now", ( void* ) 0 );
807 break; 749 break;
808 case ShutdownImpl::RestartDesktop: 750 case ShutdownImpl::RestartDesktop:
809 restart(); 751 restart();
810 break; 752 break;
811 case ShutdownImpl::TerminateDesktop: 753 case ShutdownImpl::TerminateDesktop:
812 prepareForTermination( FALSE ); 754 prepareForTermination( FALSE );
813 755
814 // This is a workaround for a Qt bug 756 // This is a workaround for a Qt bug
815 // clipboard applet has to stop its poll timer, or Qt/E 757 // clipboard applet has to stop its poll timer, or Qt/E
816 // will hang on quit() right before it emits aboutToQuit() 758 // will hang on quit() right before it emits aboutToQuit()
817 emit aboutToQuit ( ); 759 emit aboutToQuit ( );
818 760
819 quit(); 761 quit();
820 break; 762 break;
821 } 763 }
822} 764}
823 765
824void DesktopApplication::restart() 766void DesktopApplication::restart()
825{ 767{
826 prepareForTermination( TRUE ); 768 prepareForTermination( TRUE );
827 769
828#ifdef Q_WS_QWS 770#ifdef Q_WS_QWS
829 771
830 for ( int fd = 3; fd < 100; fd++ ) 772 for ( int fd = 3; fd < 100; fd++ )
831 close( fd ); 773 close( fd );
832#if defined(QT_DEMO_SINGLE_FLOPPY) 774#if defined(QT_DEMO_SINGLE_FLOPPY)
833 775
834 execl( "/sbin/init", "qpe", 0 ); 776 execl( "/sbin/init", "qpe", 0 );
835#elif defined(QT_QWS_CASSIOPEIA) 777#elif defined(QT_QWS_CASSIOPEIA)
836 778
837 execl( "/bin/sh", "sh", 0 ); 779 execl( "/bin/sh", "sh", 0 );
838#else 780#else
839 781
840 execl( ( qpeDir() + "/bin/qpe" ).latin1(), "qpe", 0 ); 782 execl( ( qpeDir() + "/bin/qpe" ).latin1(), "qpe", 0 );
841#endif 783#endif
842 784
843 exit( 1 ); 785 exit( 1 );
844#endif 786#endif
845} 787}
846 788
847void Desktop::startTransferServer() 789void Desktop::startTransferServer()
848{ 790{
849 // start qcop bridge server 791 // start qcop bridge server
850 qcopBridge = new QCopBridge( 4243 ); 792 qcopBridge = new QCopBridge( 4243 );
851 if ( !qcopBridge->ok() ) { 793 if ( !qcopBridge->ok() ) {
852 delete qcopBridge; 794 delete qcopBridge;
853 qcopBridge = 0; 795 qcopBridge = 0;
854 } 796 }
855 // start transfer server 797 // start transfer server
856 transferServer = new TransferServer( 4242 ); 798 transferServer = new TransferServer( 4242 );
857 if ( !transferServer->ok() ) { 799 if ( !transferServer->ok() ) {
858 delete transferServer; 800 delete transferServer;
859 transferServer = 0; 801 transferServer = 0;
860 } 802 }
861 if ( !transferServer || !qcopBridge ) 803 if ( !transferServer || !qcopBridge )
862 startTimer( 2000 ); 804 startTimer( 2000 );
863} 805}
864 806
865void Desktop::timerEvent( QTimerEvent *e ) 807void Desktop::timerEvent( QTimerEvent *e )
866{ 808{
867 killTimer( e->timerId() ); 809 killTimer( e->timerId() );
868 startTransferServer(); 810 startTransferServer();
869} 811}
870 812
871void Desktop::terminateServers() 813void Desktop::terminateServers()
872{ 814{
873 delete transferServer; 815 delete transferServer;
874 delete qcopBridge; 816 delete qcopBridge;
875 transferServer = 0; 817 transferServer = 0;
876 qcopBridge = 0; 818 qcopBridge = 0;
877} 819}
878 820
879void Desktop::rereadVolumes() 821void DesktopApplication::rereadVolumes()
880{ 822{
881 Config cfg( "qpe" ); 823 Config cfg( "qpe" );
882 cfg.setGroup( "Volume" ); 824 cfg. setGroup ( "Volume" );
883 touchclick = cfg.readBoolEntry( "TouchSound" ); 825
884 keyclick = cfg.readBoolEntry( "KeySound" ); 826 m_screentap_sound = cfg. readBoolEntry ( "TouchSound" );
885 alarmsound = cfg.readBoolEntry( "AlarmSound" ); 827 m_keyclick_sound = cfg. readBoolEntry ( "KeySound" );
886} 828 m_alarm_sound = cfg. readBoolEntry ( "AlarmSound" );
887
888void Desktop::keyClick()
889{
890 if ( keyclick )
891 ODevice::inst ( ) -> keySound ( );
892} 829}
893 830
894void Desktop::screenClick() 831void DesktopApplication::soundAlarm()
895{ 832{
896 if ( touchclick ) 833 if ( me ( )-> m_alarm_sound )
897 ODevice::inst ( ) -> touchSound ( ); 834 ODevice::inst ( )-> alarmSound ( );
898} 835}
899 836
900void Desktop::soundAlarm() 837DesktopApplication *DesktopApplication::me ( )
901{ 838{
902 if ( qpedesktop-> alarmsound ) 839 return (DesktopApplication *) qApp;
903 ODevice::inst ( ) -> alarmSound ( );
904} 840}
905 841