summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/desktop.cpp2
-rw-r--r--core/launcher/main.cpp2
-rw-r--r--core/launcher/taskbar.cpp4
-rw-r--r--library/power.cpp2
-rw-r--r--library/qpeapplication.cpp10
-rw-r--r--library/storage.cpp2
6 files changed, 11 insertions, 11 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp
index 6def126..067a167 100644
--- a/core/launcher/desktop.cpp
+++ b/core/launcher/desktop.cpp
@@ -1,878 +1,878 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include <syslog.h> 21#include <syslog.h>
22 22
23#include "desktop.h" 23#include "desktop.h"
24#include "info.h" 24#include "info.h"
25#include "launcher.h" 25#include "launcher.h"
26#include "qcopbridge.h" 26#include "qcopbridge.h"
27#include "shutdownimpl.h" 27#include "shutdownimpl.h"
28#include "startmenu.h" 28#include "startmenu.h"
29#include "taskbar.h" 29#include "taskbar.h"
30#include "transferserver.h" 30#include "transferserver.h"
31#include "irserver.h" 31#include "irserver.h"
32#include "packageslave.h" 32#include "packageslave.h"
33#include "screensaver.h" 33#include "screensaver.h"
34 34
35#include <qpe/applnk.h> 35#include <qpe/applnk.h>
36#include <qpe/mimetype.h> 36#include <qpe/mimetype.h>
37#include <qpe/password.h> 37#include <qpe/password.h>
38#include <qpe/config.h> 38#include <qpe/config.h>
39#include <qpe/power.h> 39#include <qpe/power.h>
40#include <qpe/timeconversion.h> 40#include <qpe/timeconversion.h>
41#include <qpe/qcopenvelope_qws.h> 41#include <qpe/qcopenvelope_qws.h>
42#include <qpe/network.h> 42#include <qpe/network.h>
43#include <qpe/global.h> 43#include <qpe/global.h>
44 44
45#if defined( QT_QWS_SL5XXX ) || defined( QT_QWS_IPAQ ) 45#if defined( QT_QWS_SL5XXX ) || defined( QT_QWS_IPAQ ) || defined(QT_QWS_RAMSES)
46#include <qpe/custom.h> 46#include <qpe/custom.h>
47#endif 47#endif
48 48
49#include <opie/odevice.h> 49#include <opie/odevice.h>
50 50
51#include <qgfx_qws.h> 51#include <qgfx_qws.h>
52#include <qmainwindow.h> 52#include <qmainwindow.h>
53#include <qmessagebox.h> 53#include <qmessagebox.h>
54#include <qtimer.h> 54#include <qtimer.h>
55#include <qwindowsystem_qws.h> 55#include <qwindowsystem_qws.h>
56 56
57#include <qvaluelist.h> 57#include <qvaluelist.h>
58 58
59#include <stdlib.h> 59#include <stdlib.h>
60#include <unistd.h> 60#include <unistd.h>
61#include <fcntl.h> 61#include <fcntl.h>
62 62
63 63
64using namespace Opie; 64using namespace Opie;
65 65
66class QCopKeyRegister 66class QCopKeyRegister
67{ 67{
68public: 68public:
69 QCopKeyRegister() : keyCode( 0 ) 69 QCopKeyRegister() : keyCode( 0 )
70 { } 70 { }
71 QCopKeyRegister( int k, const QCString &c, const QCString &m ) 71 QCopKeyRegister( int k, const QCString &c, const QCString &m )
72 : keyCode( k ), channel( c ), message( m ) 72 : keyCode( k ), channel( c ), message( m )
73 { } 73 { }
74 74
75 int getKeyCode() const 75 int getKeyCode() const
76 { 76 {
77 return keyCode; 77 return keyCode;
78 } 78 }
79 QCString getChannel() const 79 QCString getChannel() const
80 { 80 {
81 return channel; 81 return channel;
82 } 82 }
83 QCString getMessage() const 83 QCString getMessage() const
84 { 84 {
85 return message; 85 return message;
86 } 86 }
87 87
88private: 88private:
89 int keyCode; 89 int keyCode;
90 QCString channel, message; 90 QCString channel, message;
91}; 91};
92 92
93typedef QValueList<QCopKeyRegister> KeyRegisterList; 93typedef QValueList<QCopKeyRegister> KeyRegisterList;
94KeyRegisterList keyRegisterList; 94KeyRegisterList keyRegisterList;
95 95
96static Desktop* qpedesktop = 0; 96static Desktop* qpedesktop = 0;
97static int loggedin = 0; 97static int loggedin = 0;
98static void login( bool at_poweron ) 98static void login( bool at_poweron )
99{ 99{
100 if ( !loggedin ) { 100 if ( !loggedin ) {
101 Global::terminateBuiltin( "calibrate" ); 101 Global::terminateBuiltin( "calibrate" );
102 Password::authenticate( at_poweron ); 102 Password::authenticate( at_poweron );
103 loggedin = 1; 103 loggedin = 1;
104 QCopEnvelope e( "QPE/Desktop", "unlocked()" ); 104 QCopEnvelope e( "QPE/Desktop", "unlocked()" );
105 } 105 }
106} 106}
107 107
108bool Desktop::screenLocked() 108bool Desktop::screenLocked()
109{ 109{
110 return loggedin == 0; 110 return loggedin == 0;
111} 111}
112 112
113/* 113/*
114 Priority is number of alerts that are needed to pop up 114 Priority is number of alerts that are needed to pop up
115 alert. 115 alert.
116 */ 116 */
117class DesktopPowerAlerter : public QMessageBox 117class DesktopPowerAlerter : public QMessageBox
118{ 118{
119public: 119public:
120 DesktopPowerAlerter( QWidget *parent, const char *name = 0 ) 120 DesktopPowerAlerter( QWidget *parent, const char *name = 0 )
121 : QMessageBox( tr( "Battery Status" ), "Low Battery", 121 : QMessageBox( tr( "Battery Status" ), "Low Battery",
122 QMessageBox::Critical, 122 QMessageBox::Critical,
123 QMessageBox::Ok | QMessageBox::Default, 123 QMessageBox::Ok | QMessageBox::Default,
124 QMessageBox::NoButton, QMessageBox::NoButton, 124 QMessageBox::NoButton, QMessageBox::NoButton,
125 parent, name, FALSE ) 125 parent, name, FALSE )
126 { 126 {
127 currentPriority = INT_MAX; 127 currentPriority = INT_MAX;
128 alertCount = 0; 128 alertCount = 0;
129 } 129 }
130 130
131 void alert( const QString &text, int priority ); 131 void alert( const QString &text, int priority );
132 void hideEvent( QHideEvent * ); 132 void hideEvent( QHideEvent * );
133private: 133private:
134 int currentPriority; 134 int currentPriority;
135 int alertCount; 135 int alertCount;
136}; 136};
137 137
138void DesktopPowerAlerter::alert( const QString &text, int priority ) 138void DesktopPowerAlerter::alert( const QString &text, int priority )
139{ 139{
140 alertCount++; 140 alertCount++;
141 if ( alertCount < priority ) 141 if ( alertCount < priority )
142 return ; 142 return ;
143 if ( priority > currentPriority ) 143 if ( priority > currentPriority )
144 return ; 144 return ;
145 currentPriority = priority; 145 currentPriority = priority;
146 setText( text ); 146 setText( text );
147 show(); 147 show();
148} 148}
149 149
150 150
151void DesktopPowerAlerter::hideEvent( QHideEvent *e ) 151void DesktopPowerAlerter::hideEvent( QHideEvent *e )
152{ 152{
153 QMessageBox::hideEvent( e ); 153 QMessageBox::hideEvent( e );
154 alertCount = 0; 154 alertCount = 0;
155 currentPriority = INT_MAX; 155 currentPriority = INT_MAX;
156} 156}
157 157
158 158
159void DesktopApplication::switchLCD ( bool on ) 159void DesktopApplication::switchLCD ( bool on )
160{ 160{
161 if ( qApp ) { 161 if ( qApp ) {
162 DesktopApplication *dapp = (DesktopApplication *) qApp; 162 DesktopApplication *dapp = (DesktopApplication *) qApp;
163 163
164 if ( dapp-> m_screensaver ) { 164 if ( dapp-> m_screensaver ) {
165 if ( on ) { 165 if ( on ) {
166 dapp-> m_screensaver-> setDisplayState ( true ); 166 dapp-> m_screensaver-> setDisplayState ( true );
167 dapp-> m_screensaver-> setBacklight ( -3 ); 167 dapp-> m_screensaver-> setBacklight ( -3 );
168 } 168 }
169 else { 169 else {
170 dapp-> m_screensaver-> setDisplayState ( false ); 170 dapp-> m_screensaver-> setDisplayState ( false );
171 } 171 }
172 } 172 }
173 } 173 }
174} 174}
175 175
176 176
177DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) 177DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType )
178 : QPEApplication( argc, argv, appType ) 178 : QPEApplication( argc, argv, appType )
179{ 179{
180 m_ps = new PowerStatus; 180 m_ps = new PowerStatus;
181 m_ps_last = new PowerStatus; 181 m_ps_last = new PowerStatus;
182 pa = new DesktopPowerAlerter( 0 ); 182 pa = new DesktopPowerAlerter( 0 );
183 183
184 m_apm_timer = new QTimer ( this ); 184 m_apm_timer = new QTimer ( this );
185 connect ( m_apm_timer, SIGNAL( timeout ( )), this, SLOT( apmTimeout ( ))); 185 connect ( m_apm_timer, SIGNAL( timeout ( )), this, SLOT( apmTimeout ( )));
186 reloadPowerWarnSettings ( ); 186 reloadPowerWarnSettings ( );
187 187
188 m_last_button = 0; 188 m_last_button = 0;
189 m_button_timer = new QTimer ( ); 189 m_button_timer = new QTimer ( );
190 connect ( m_button_timer, SIGNAL( timeout ( )), this, SLOT( sendHeldAction ( ))); 190 connect ( m_button_timer, SIGNAL( timeout ( )), this, SLOT( sendHeldAction ( )));
191 191
192 channel = new QCopChannel( "QPE/System", this ); 192 channel = new QCopChannel( "QPE/System", this );
193 connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), 193 connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ),
194 this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) ); 194 this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) );
195 195
196 channel = new QCopChannel( "QPE/Launcher", this ); 196 channel = new QCopChannel( "QPE/Launcher", this );
197 connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ), 197 connect( channel, SIGNAL( received( const QCString&, const QByteArray& ) ),
198 this, SLOT( launcherMessage( const QCString&, const QByteArray& ) ) ); 198 this, SLOT( launcherMessage( const QCString&, const QByteArray& ) ) );
199 199
200 m_screensaver = new OpieScreenSaver ( ); 200 m_screensaver = new OpieScreenSaver ( );
201 m_screensaver-> setInterval ( -1 ); 201 m_screensaver-> setInterval ( -1 );
202 QWSServer::setScreenSaver( m_screensaver ); 202 QWSServer::setScreenSaver( m_screensaver );
203 203
204 rereadVolumes(); 204 rereadVolumes();
205 connect( qApp, SIGNAL( volumeChanged( bool ) ), this, SLOT( rereadVolumes() ) ); 205 connect( qApp, SIGNAL( volumeChanged( bool ) ), this, SLOT( rereadVolumes() ) );
206 206
207 apmTimeout ( ); 207 apmTimeout ( );
208 208
209 grabKeyboard ( ); 209 grabKeyboard ( );
210} 210}
211 211
212 212
213DesktopApplication::~DesktopApplication() 213DesktopApplication::~DesktopApplication()
214{ 214{
215 ungrabKeyboard ( ); 215 ungrabKeyboard ( );
216 216
217 delete m_ps; 217 delete m_ps;
218 delete m_ps_last; 218 delete m_ps_last;
219 delete pa; 219 delete pa;
220} 220}
221 221
222void DesktopApplication::apmTimeout() 222void DesktopApplication::apmTimeout()
223{ 223{
224 qpedesktop-> checkMemory ( ); // in case no events are being generated 224 qpedesktop-> checkMemory ( ); // in case no events are being generated
225 225
226 *m_ps_last = *m_ps; 226 *m_ps_last = *m_ps;
227 *m_ps = PowerStatusManager::readStatus(); 227 *m_ps = PowerStatusManager::readStatus();
228 228
229 if ( m_ps-> acStatus ( ) != m_ps_last-> acStatus ( )) 229 if ( m_ps-> acStatus ( ) != m_ps_last-> acStatus ( ))
230 m_screensaver-> powerStatusChanged ( *m_ps ); 230 m_screensaver-> powerStatusChanged ( *m_ps );
231 231
232 if ( m_ps-> acStatus ( ) != PowerStatus::Online ) { 232 if ( m_ps-> acStatus ( ) != PowerStatus::Online ) {
233 int bat = m_ps-> batteryPercentRemaining ( ); 233 int bat = m_ps-> batteryPercentRemaining ( );
234 234
235 if ( bat < m_ps_last-> batteryPercentRemaining ( )) { 235 if ( bat < m_ps_last-> batteryPercentRemaining ( )) {
236 if ( bat <= m_powerCritical ) 236 if ( bat <= m_powerCritical )
237 pa->alert( tr( "Battery level is critical!\nKeep power off until power restored!" ), 1 ); 237 pa->alert( tr( "Battery level is critical!\nKeep power off until power restored!" ), 1 );
238 else if ( bat <= m_powerVeryLow ) 238 else if ( bat <= m_powerVeryLow )
239 pa->alert( tr( "Battery is running very low." ), 2 ); 239 pa->alert( tr( "Battery is running very low." ), 2 );
240 } 240 }
241 if ( m_ps-> backupBatteryStatus ( ) == PowerStatus::VeryLow ) 241 if ( m_ps-> backupBatteryStatus ( ) == PowerStatus::VeryLow )
242 pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 2 ); 242 pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 2 );
243 } 243 }
244} 244}
245 245
246 246
247void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data ) 247void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data )
248{ 248{
249 QDataStream stream ( data, IO_ReadOnly ); 249 QDataStream stream ( data, IO_ReadOnly );
250 250
251 if ( msg == "setScreenSaverInterval(int)" ) { 251 if ( msg == "setScreenSaverInterval(int)" ) {
252 int time; 252 int time;
253 stream >> time; 253 stream >> time;
254 m_screensaver-> setInterval( time ); 254 m_screensaver-> setInterval( time );
255 } 255 }
256 else if ( msg == "setScreenSaverIntervals(int,int,int)" ) { 256 else if ( msg == "setScreenSaverIntervals(int,int,int)" ) {
257 int t1, t2, t3; 257 int t1, t2, t3;
258 stream >> t1 >> t2 >> t3; 258 stream >> t1 >> t2 >> t3;
259 m_screensaver-> setIntervals( t1, t2, t3 ); 259 m_screensaver-> setIntervals( t1, t2, t3 );
260 } 260 }
261 else if ( msg == "setBacklight(int)" ) { 261 else if ( msg == "setBacklight(int)" ) {
262 int bright; 262 int bright;
263 stream >> bright; 263 stream >> bright;
264 m_screensaver-> setBacklight( bright ); 264 m_screensaver-> setBacklight( bright );
265 } 265 }
266 else if ( msg == "setScreenSaverMode(int)" ) { 266 else if ( msg == "setScreenSaverMode(int)" ) {
267 int mode; 267 int mode;
268 stream >> mode; 268 stream >> mode;
269 m_screensaver-> setMode ( mode ); 269 m_screensaver-> setMode ( mode );
270 } 270 }
271 else if ( msg == "reloadPowerWarnSettings()" ) { 271 else if ( msg == "reloadPowerWarnSettings()" ) {
272 reloadPowerWarnSettings(); 272 reloadPowerWarnSettings();
273 } 273 }
274 else if ( msg == "setDisplayState(int)" ) { 274 else if ( msg == "setDisplayState(int)" ) {
275 int state; 275 int state;
276 stream >> state; 276 stream >> state;
277 m_screensaver-> setDisplayState ( state != 0 ); 277 m_screensaver-> setDisplayState ( state != 0 );
278 } 278 }
279 else if ( msg == "suspend()" ) { 279 else if ( msg == "suspend()" ) {
280 emit power(); 280 emit power();
281 } 281 }
282 else if ( msg == "sendBusinessCard()" ) { 282 else if ( msg == "sendBusinessCard()" ) {
283 QString card = ::getenv ( "HOME" ); 283 QString card = ::getenv ( "HOME" );
284 card += "/Applications/addressbook/businesscard.vcf"; 284 card += "/Applications/addressbook/businesscard.vcf";
285 285
286 if ( QFile::exists( card ) ) { 286 if ( QFile::exists( card ) ) {
287 QCopEnvelope e ( "QPE/Obex", "send(QString,QString,QString)" ); 287 QCopEnvelope e ( "QPE/Obex", "send(QString,QString,QString)" );
288 QString mimetype = "text/x-vCard"; 288 QString mimetype = "text/x-vCard";
289 e << tr( "business card" ) << card << mimetype; 289 e << tr( "business card" ) << card << mimetype;
290 } 290 }
291 } 291 }
292} 292}
293 293
294void DesktopApplication::reloadPowerWarnSettings ( ) 294void DesktopApplication::reloadPowerWarnSettings ( )
295{ 295{
296 Config cfg ( "apm" ); 296 Config cfg ( "apm" );
297 cfg. setGroup ( "Warnings" ); 297 cfg. setGroup ( "Warnings" );
298 298
299 int iv = cfg. readNumEntry ( "checkinterval", 10000 ); 299 int iv = cfg. readNumEntry ( "checkinterval", 10000 );
300 300
301 m_apm_timer-> stop ( ); 301 m_apm_timer-> stop ( );
302 if ( iv ) 302 if ( iv )
303 m_apm_timer-> start ( iv ); 303 m_apm_timer-> start ( iv );
304 304
305 m_powerVeryLow = cfg. readNumEntry ( "powerverylow", 10 ); 305 m_powerVeryLow = cfg. readNumEntry ( "powerverylow", 10 );
306 m_powerCritical = cfg. readNumEntry ( "powervcritical", 5 ); 306 m_powerCritical = cfg. readNumEntry ( "powervcritical", 5 );
307} 307}
308 308
309 309
310enum MemState { Unknown, VeryLow, Low, Normal } memstate = Unknown; 310enum MemState { Unknown, VeryLow, Low, Normal } memstate = Unknown;
311 311
312 312
313void DesktopApplication::launcherMessage( const QCString & msg, const QByteArray & data ) 313void DesktopApplication::launcherMessage( const QCString & msg, const QByteArray & data )
314{ 314{
315 QDataStream stream ( data, IO_ReadOnly ); 315 QDataStream stream ( data, IO_ReadOnly );
316 316
317 if ( msg == "deviceButton(int,int,int)" ) { 317 if ( msg == "deviceButton(int,int,int)" ) {
318 int keycode, press, autoRepeat; 318 int keycode, press, autoRepeat;
319 stream >> keycode >> press >> autoRepeat; 319 stream >> keycode >> press >> autoRepeat;
320 320
321 const ODeviceButton *db = ODevice::inst ( )-> buttonForKeycode ( keycode ); 321 const ODeviceButton *db = ODevice::inst ( )-> buttonForKeycode ( keycode );
322 322
323 if ( db ) 323 if ( db )
324 checkButtonAction ( db, keycode, press, autoRepeat ); 324 checkButtonAction ( db, keycode, press, autoRepeat );
325 } 325 }
326 else if ( msg == "keyRegister(int,QCString,QCString)" ) { 326 else if ( msg == "keyRegister(int,QCString,QCString)" ) {
327 int k; 327 int k;
328 QCString c, m; 328 QCString c, m;
329 stream >> k >> c >> m; 329 stream >> k >> c >> m;
330 330
331 keyRegisterList.append ( QCopKeyRegister ( k, c, m )); 331 keyRegisterList.append ( QCopKeyRegister ( k, c, m ));
332 } 332 }
333} 333}
334 334
335void DesktopApplication::sendHeldAction ( ) 335void DesktopApplication::sendHeldAction ( )
336{ 336{
337 if ( m_last_button ) { 337 if ( m_last_button ) {
338 m_last_button-> heldAction ( ). send ( ); 338 m_last_button-> heldAction ( ). send ( );
339 m_last_button = 0; 339 m_last_button = 0;
340 } 340 }
341} 341}
342 342
343 343
344 344
345bool DesktopApplication::checkButtonAction ( const ODeviceButton *db, int /*keycode*/, bool press, bool autoRepeat ) 345bool DesktopApplication::checkButtonAction ( const ODeviceButton *db, int /*keycode*/, bool press, bool autoRepeat )
346 { 346 {
347 if ( db ) { 347 if ( db ) {
348 if ( !press && !autoRepeat && m_button_timer-> isActive ( )) { 348 if ( !press && !autoRepeat && m_button_timer-> isActive ( )) {
349 m_button_timer-> stop ( ); 349 m_button_timer-> stop ( );
350 350
351 if (!db-> pressedAction ( ). channel ( ) .isEmpty()) 351 if (!db-> pressedAction ( ). channel ( ) .isEmpty())
352 { 352 {
353 353
354 if ( db-> pressedAction ( ). channel ( )!="ignore") { 354 if ( db-> pressedAction ( ). channel ( )!="ignore") {
355 355
356 db-> pressedAction ( ). send ( ); 356 db-> pressedAction ( ). send ( );
357 } 357 }
358 else 358 else
359 return false; 359 return false;
360 } 360 }
361 } 361 }
362 else if ( press && !autoRepeat ) { 362 else if ( press && !autoRepeat ) {
363 m_button_timer-> stop ( ); 363 m_button_timer-> stop ( );
364 if (!db-> pressedAction ( ). channel ( ) .isEmpty()) 364 if (!db-> pressedAction ( ). channel ( ) .isEmpty())
365 { 365 {
366 366
367 if ( db-> heldAction ( ). channel ( )!="ignore") { 367 if ( db-> heldAction ( ). channel ( )!="ignore") {
368 m_last_button = db; 368 m_last_button = db;
369 m_button_timer-> start ( ODevice::inst ( )-> buttonHoldTime ( ), true ); 369 m_button_timer-> start ( ODevice::inst ( )-> buttonHoldTime ( ), true );
370 } 370 }
371 else return false; 371 else return false;
372 } 372 }
373 } 373 }
374 } 374 }
375 return true; 375 return true;
376} 376}
377 377
378bool DesktopApplication::eventFilter ( QObject *o, QEvent *e ) 378bool DesktopApplication::eventFilter ( QObject *o, QEvent *e )
379{ 379{
380 380
381 if ( e-> type ( ) == QEvent::KeyPress || e-> type ( ) == QEvent::KeyRelease ) { 381 if ( e-> type ( ) == QEvent::KeyPress || e-> type ( ) == QEvent::KeyRelease ) {
382 QKeyEvent *ke = (QKeyEvent *) e; 382 QKeyEvent *ke = (QKeyEvent *) e;
383 383
384 const ODeviceButton *db = ODevice::inst ( )-> buttonForKeycode ( ke-> key ( )); 384 const ODeviceButton *db = ODevice::inst ( )-> buttonForKeycode ( ke-> key ( ));
385 385
386 if ( db ) { 386 if ( db ) {
387 if (checkButtonAction ( db, ke-> key ( ), e-> type ( ) == QEvent::KeyPress, ke-> isAutoRepeat ( ))) 387 if (checkButtonAction ( db, ke-> key ( ), e-> type ( ) == QEvent::KeyPress, ke-> isAutoRepeat ( )))
388 return true; //checkButtonAction retrune false if events should be routed through 388 return true; //checkButtonAction retrune false if events should be routed through
389 } 389 }
390 } 390 }
391 return QPEApplication::eventFilter ( o, e ); 391 return QPEApplication::eventFilter ( o, e );
392} 392}
393 393
394#ifdef Q_WS_QWS 394#ifdef Q_WS_QWS
395 395
396bool DesktopApplication::qwsEventFilter( QWSEvent *e ) 396bool DesktopApplication::qwsEventFilter( QWSEvent *e )
397{ 397{
398 qpedesktop->checkMemory(); 398 qpedesktop->checkMemory();
399 399
400 if ( e->type == QWSEvent::Key ) { 400 if ( e->type == QWSEvent::Key ) {
401 QWSKeyEvent * ke = (QWSKeyEvent *) e; 401 QWSKeyEvent * ke = (QWSKeyEvent *) e;
402 ushort keycode = ke-> simpleData. keycode; 402 ushort keycode = ke-> simpleData. keycode;
403 403
404 if ( !loggedin && keycode != Key_F34 ) 404 if ( !loggedin && keycode != Key_F34 )
405 return true; 405 return true;
406 406
407 bool press = ke-> simpleData. is_press; 407 bool press = ke-> simpleData. is_press;
408 bool autoRepeat = ke-> simpleData. is_auto_repeat; 408 bool autoRepeat = ke-> simpleData. is_auto_repeat;
409 409
410 if ( !keyboardGrabbed ( )) { 410 if ( !keyboardGrabbed ( )) {
411 // app that registers key/message to be sent back to the app, when it doesn't have focus, 411 // app that registers key/message to be sent back to the app, when it doesn't have focus,
412 // when user presses key, unless keyboard has been requested from app. 412 // when user presses key, unless keyboard has been requested from app.
413 // will not send multiple repeats if user holds key 413 // will not send multiple repeats if user holds key
414 // i.e. one shot 414 // i.e. one shot
415 415
416 if ( keycode != 0 && press && !autoRepeat ) { 416 if ( keycode != 0 && press && !autoRepeat ) {
417 for ( KeyRegisterList::Iterator it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) { 417 for ( KeyRegisterList::Iterator it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) {
418 if (( *it ). getKeyCode ( ) == keycode ) { 418 if (( *it ). getKeyCode ( ) == keycode ) {
419 QCopEnvelope (( *it ). getChannel ( ), ( *it ). getMessage ( )); 419 QCopEnvelope (( *it ). getChannel ( ), ( *it ). getMessage ( ));
420 return true; 420 return true;
421 } 421 }
422 } 422 }
423 } 423 }
424 } 424 }
425 425
426 if ( keycode == HardKey_Suspend ) { 426 if ( keycode == HardKey_Suspend ) {
427 if ( press ) 427 if ( press )
428 emit power ( ); 428 emit power ( );
429 return true; 429 return true;
430 } 430 }
431 else if ( keycode == HardKey_Backlight ) { 431 else if ( keycode == HardKey_Backlight ) {
432 if ( press ) 432 if ( press )
433 emit backlight ( ); 433 emit backlight ( );
434 return true; 434 return true;
435 } 435 }
436 else if ( keycode == Key_F32 ) { 436 else if ( keycode == Key_F32 ) {
437 if ( press ) 437 if ( press )
438 QCopEnvelope e( "QPE/Desktop", "startSync()" ); 438 QCopEnvelope e( "QPE/Desktop", "startSync()" );
439 return true; 439 return true;
440 } 440 }
441 else if ( keycode == Key_F31 && !ke-> simpleData. modifiers ) { // Symbol Key -> show Unicode IM 441 else if ( keycode == Key_F31 && !ke-> simpleData. modifiers ) { // Symbol Key -> show Unicode IM
442 if ( press ) 442 if ( press )
443 emit symbol ( ); 443 emit symbol ( );
444 return true; 444 return true;
445 } 445 }
446 else if ( keycode == Key_NumLock ) { 446 else if ( keycode == Key_NumLock ) {
447 if ( press ) 447 if ( press )
448 emit numLockStateToggle ( ); 448 emit numLockStateToggle ( );
449 } 449 }
450 else if ( keycode == Key_CapsLock ) { 450 else if ( keycode == Key_CapsLock ) {
451 if ( press ) 451 if ( press )
452 emit capsLockStateToggle(); 452 emit capsLockStateToggle();
453 } 453 }
454 if (( press && !autoRepeat ) || ( !press && autoRepeat )) { 454 if (( press && !autoRepeat ) || ( !press && autoRepeat )) {
455 if ( m_keyclick_sound ) 455 if ( m_keyclick_sound )
456 ODevice::inst ( )-> keySound ( ); 456 ODevice::inst ( )-> keySound ( );
457 } 457 }
458 } 458 }
459 else if ( e-> type == QWSEvent::Mouse ) { 459 else if ( e-> type == QWSEvent::Mouse ) {
460 QWSMouseEvent * me = ( QWSMouseEvent * ) e; 460 QWSMouseEvent * me = ( QWSMouseEvent * ) e;
461 static bool up = true; 461 static bool up = true;
462 462
463 if ( me-> simpleData. state & LeftButton ) { 463 if ( me-> simpleData. state & LeftButton ) {
464 if ( up ) { 464 if ( up ) {
465 up = false; 465 up = false;
466 if ( m_screentap_sound ) 466 if ( m_screentap_sound )
467 ODevice::inst ( ) -> touchSound ( ); 467 ODevice::inst ( ) -> touchSound ( );
468 } 468 }
469 } 469 }
470 else { 470 else {
471 up = true; 471 up = true;
472 } 472 }
473 } 473 }
474 474
475 return QPEApplication::qwsEventFilter ( e ); 475 return QPEApplication::qwsEventFilter ( e );
476} 476}
477#endif 477#endif
478 478
479 479
480 480
481#if defined(QPE_HAVE_MEMALERTER) 481#if defined(QPE_HAVE_MEMALERTER)
482QPE_MEMALERTER_IMPL 482QPE_MEMALERTER_IMPL
483#endif 483#endif
484 484
485//=========================================================================== 485//===========================================================================
486 486
487Desktop::Desktop() : 487Desktop::Desktop() :
488 QWidget( 0, 0, WStyle_Tool | WStyle_Customize ), 488 QWidget( 0, 0, WStyle_Tool | WStyle_Customize ),
489 qcopBridge( 0 ), 489 qcopBridge( 0 ),
490 transferServer( 0 ), 490 transferServer( 0 ),
491 packageSlave( 0 ) 491 packageSlave( 0 )
492{ 492{
493 qpedesktop = this; 493 qpedesktop = this;
494 494
495 // bg = new Info( this ); 495 // bg = new Info( this );
496 tb = new TaskBar; 496 tb = new TaskBar;
497 497
498 launcher = new Launcher( 0, 0, WStyle_Customize | QWidget::WGroupLeader ); 498 launcher = new Launcher( 0, 0, WStyle_Customize | QWidget::WGroupLeader );
499 499
500 connect( launcher, SIGNAL( busy() ), tb, SLOT( startWait() ) ); 500 connect( launcher, SIGNAL( busy() ), tb, SLOT( startWait() ) );
501 connect( launcher, SIGNAL( notBusy( const QString& ) ), tb, SLOT( stopWait( const QString& ) ) ); 501 connect( launcher, SIGNAL( notBusy( const QString& ) ), tb, SLOT( stopWait( const QString& ) ) );
502 502
503 int displayw = qApp->desktop() ->width(); 503 int displayw = qApp->desktop() ->width();
504 int displayh = qApp->desktop() ->height(); 504 int displayh = qApp->desktop() ->height();
505 505
506 506
507 QSize sz = tb->sizeHint(); 507 QSize sz = tb->sizeHint();
508 508
509 setGeometry( 0, displayh - sz.height(), displayw, sz.height() ); 509 setGeometry( 0, displayh - sz.height(), displayw, sz.height() );
510 layout(); 510 layout();
511 511
512 tb->show(); 512 tb->show();
513 launcher->showMaximized(); 513 launcher->showMaximized();
514 launcher->show(); 514 launcher->show();
515 launcher->raise(); 515 launcher->raise();
516#if defined(QPE_HAVE_MEMALERTER) 516#if defined(QPE_HAVE_MEMALERTER)
517 517
518 initMemalerter(); 518 initMemalerter();
519#endif 519#endif
520 // start services 520 // start services
521 startTransferServer(); 521 startTransferServer();
522 ( void ) new IrServer( this ); 522 ( void ) new IrServer( this );
523 523
524 packageSlave = new PackageSlave( this ); 524 packageSlave = new PackageSlave( this );
525 525
526 qApp->installEventFilter( this ); 526 qApp->installEventFilter( this );
527 qApp->desktop()->installEventFilter( this ); 527 qApp->desktop()->installEventFilter( this );
528 528
529 qApp-> setMainWidget ( launcher ); 529 qApp-> setMainWidget ( launcher );
530} 530}
531 531
532void Desktop::show() 532void Desktop::show()
533{ 533{
534 login( TRUE ); 534 login( TRUE );
535 QWidget::show(); 535 QWidget::show();
536} 536}
537 537
538Desktop::~Desktop() 538Desktop::~Desktop()
539{ 539{
540 delete launcher; 540 delete launcher;
541 delete tb; 541 delete tb;
542 delete qcopBridge; 542 delete qcopBridge;
543 delete transferServer; 543 delete transferServer;
544} 544}
545 545
546bool Desktop::recoverMemory() 546bool Desktop::recoverMemory()
547{ 547{
548 return tb->recoverMemory(); 548 return tb->recoverMemory();
549} 549}
550 550
551void Desktop::checkMemory() 551void Desktop::checkMemory()
552{ 552{
553#if defined(QPE_HAVE_MEMALERTER) 553#if defined(QPE_HAVE_MEMALERTER)
554 static bool ignoreNormal = FALSE; 554 static bool ignoreNormal = FALSE;
555 static bool existingMessage = FALSE; 555 static bool existingMessage = FALSE;
556 556
557 if ( existingMessage ) 557 if ( existingMessage )
558 return ; // don't show a second message while still on first 558 return ; // don't show a second message while still on first
559 559
560 existingMessage = TRUE; 560 existingMessage = TRUE;
561 switch ( memstate ) { 561 switch ( memstate ) {
562 case Unknown: 562 case Unknown:
563 break; 563 break;
564 case Low: 564 case Low:
565 memstate = Unknown; 565 memstate = Unknown;
566 if ( recoverMemory() ) 566 if ( recoverMemory() )
567 ignoreNormal = TRUE; 567 ignoreNormal = TRUE;
568 else 568 else
569 QMessageBox::warning( 0 , "Memory Status", 569 QMessageBox::warning( 0 , "Memory Status",
570 "The memory smacks of shortage. \n" 570 "The memory smacks of shortage. \n"
571 "Please save data. " ); 571 "Please save data. " );
572 break; 572 break;
573 case Normal: 573 case Normal:
574 memstate = Unknown; 574 memstate = Unknown;
575 if ( ignoreNormal ) 575 if ( ignoreNormal )
576 ignoreNormal = FALSE; 576 ignoreNormal = FALSE;
577 // else 577 // else
578 // QMessageBox::information ( 0 , "Memory Status", 578 // QMessageBox::information ( 0 , "Memory Status",
579 // "There is enough memory again." ); 579 // "There is enough memory again." );
580 break; 580 break;
581 case VeryLow: 581 case VeryLow:
582 memstate = Unknown; 582 memstate = Unknown;
583 QMessageBox::critical( 0 , "Memory Status", 583 QMessageBox::critical( 0 , "Memory Status",
584 "The memory is very low. \n" 584 "The memory is very low. \n"
585 "Please end this application \n" 585 "Please end this application \n"
586 "immediately." ); 586 "immediately." );
587 recoverMemory(); 587 recoverMemory();
588 } 588 }
589 existingMessage = FALSE; 589 existingMessage = FALSE;
590#endif 590#endif
591} 591}
592 592
593static bool isVisibleWindow( int wid ) 593static bool isVisibleWindow( int wid )
594{ 594{
595#ifdef QWS 595#ifdef QWS
596 const QList<QWSWindow> &list = qwsServer->clientWindows(); 596 const QList<QWSWindow> &list = qwsServer->clientWindows();
597 QWSWindow* w; 597 QWSWindow* w;
598 for ( QListIterator<QWSWindow> it( list ); ( w = it.current() ); ++it ) { 598 for ( QListIterator<QWSWindow> it( list ); ( w = it.current() ); ++it ) {
599 if ( w->winId() == wid ) 599 if ( w->winId() == wid )
600 return !w->isFullyObscured(); 600 return !w->isFullyObscured();
601 } 601 }
602#endif 602#endif
603 return FALSE; 603 return FALSE;
604} 604}
605 605
606static bool hasVisibleWindow( const QString& clientname ) 606static bool hasVisibleWindow( const QString& clientname )
607{ 607{
608#ifdef QWS 608#ifdef QWS
609 const QList<QWSWindow> &list = qwsServer->clientWindows(); 609 const QList<QWSWindow> &list = qwsServer->clientWindows();
610 QWSWindow* w; 610 QWSWindow* w;
611 for ( QListIterator<QWSWindow> it( list ); ( w = it.current() ); ++it ) { 611 for ( QListIterator<QWSWindow> it( list ); ( w = it.current() ); ++it ) {
612 if ( w->client() ->identity() == clientname && !w->isFullyObscured() ) 612 if ( w->client() ->identity() == clientname && !w->isFullyObscured() )
613 return TRUE; 613 return TRUE;
614 } 614 }
615#endif 615#endif
616 return FALSE; 616 return FALSE;
617} 617}
618 618
619 619
620void Desktop::executeOrModify( const QString& appLnkFile ) 620void Desktop::executeOrModify( const QString& appLnkFile )
621{ 621{
622 AppLnk lnk( MimeType::appsFolderName() + "/" + appLnkFile ); 622 AppLnk lnk( MimeType::appsFolderName() + "/" + appLnkFile );
623 if ( lnk.isValid() ) { 623 if ( lnk.isValid() ) {
624 QCString app = lnk.exec().utf8(); 624 QCString app = lnk.exec().utf8();
625 Global::terminateBuiltin( "calibrate" ); 625 Global::terminateBuiltin( "calibrate" );
626 if ( QCopChannel::isRegistered( "QPE/Application/" + app ) ) { 626 if ( QCopChannel::isRegistered( "QPE/Application/" + app ) ) {
627 // MRUList::addTask( &lnk ); 627 // MRUList::addTask( &lnk );
628 if ( hasVisibleWindow( app ) ) 628 if ( hasVisibleWindow( app ) )
629 QCopChannel::send( "QPE/Application/" + app, "nextView()" ); 629 QCopChannel::send( "QPE/Application/" + app, "nextView()" );
630 else 630 else
631 QCopChannel::send( "QPE/Application/" + app, "raise()" ); 631 QCopChannel::send( "QPE/Application/" + app, "raise()" );
632 } 632 }
633 else { 633 else {
634 lnk.execute(); 634 lnk.execute();
635 } 635 }
636 } 636 }
637} 637}
638 638
639// autoStarts apps on resume and start 639// autoStarts apps on resume and start
640void Desktop::execAutoStart() 640void Desktop::execAutoStart()
641{ 641{
642 QString appName; 642 QString appName;
643 int delay; 643 int delay;
644 QDateTime now = QDateTime::currentDateTime(); 644 QDateTime now = QDateTime::currentDateTime();
645 Config cfg( "autostart" ); 645 Config cfg( "autostart" );
646 cfg.setGroup( "AutoStart" ); 646 cfg.setGroup( "AutoStart" );
647 appName = cfg.readEntry( "Apps", "" ); 647 appName = cfg.readEntry( "Apps", "" );
648 delay = ( cfg.readEntry( "Delay", "0" ) ).toInt(); 648 delay = ( cfg.readEntry( "Delay", "0" ) ).toInt();
649 // If the time between suspend and resume was longer then the 649 // If the time between suspend and resume was longer then the
650 // value saved as delay, start the app 650 // value saved as delay, start the app
651 if ( suspendTime.secsTo( now ) >= ( delay * 60 ) && !appName.isEmpty() ) { 651 if ( suspendTime.secsTo( now ) >= ( delay * 60 ) && !appName.isEmpty() ) {
652 QCopEnvelope e( "QPE/System", "execute(QString)" ); 652 QCopEnvelope e( "QPE/System", "execute(QString)" );
653 e << QString( appName ); 653 e << QString( appName );
654 } 654 }
655} 655}
656 656
657#if defined(QPE_HAVE_TOGGLELIGHT) 657#if defined(QPE_HAVE_TOGGLELIGHT)
658#include <qpe/config.h> 658#include <qpe/config.h>
659 659
660#include <sys/ioctl.h> 660#include <sys/ioctl.h>
661#include <sys/types.h> 661#include <sys/types.h>
662#include <fcntl.h> 662#include <fcntl.h>
663#include <unistd.h> 663#include <unistd.h>
664#include <errno.h> 664#include <errno.h>
665#include <linux/ioctl.h> 665#include <linux/ioctl.h>
666#include <time.h> 666#include <time.h>
667#endif 667#endif
668 668
669 669
670void Desktop::togglePower() 670void Desktop::togglePower()
671{ 671{
672 static bool excllock = false; 672 static bool excllock = false;
673 673
674 if ( excllock ) 674 if ( excllock )
675 return ; 675 return ;
676 676
677 excllock = true; 677 excllock = true;
678 678
679 bool wasloggedin = loggedin; 679 bool wasloggedin = loggedin;
680 loggedin = 0; 680 loggedin = 0;
681 suspendTime = QDateTime::currentDateTime(); 681 suspendTime = QDateTime::currentDateTime();
682 682
683#ifdef QWS 683#ifdef QWS
684 684
685 if ( Password::needToAuthenticate ( true ) && qt_screen ) { 685 if ( Password::needToAuthenticate ( true ) && qt_screen ) {
686 // Should use a big black window instead. 686 // Should use a big black window instead.
687 // But this would not show up fast enough 687 // But this would not show up fast enough
688 QGfx *g = qt_screen-> screenGfx ( ); 688 QGfx *g = qt_screen-> screenGfx ( );
689 g-> fillRect ( 0, 0, qt_screen-> width ( ), qt_screen-> height ( )); 689 g-> fillRect ( 0, 0, qt_screen-> width ( ), qt_screen-> height ( ));
690 delete g; 690 delete g;
691 } 691 }
692#endif 692#endif
693 693
694 ODevice::inst ( )-> suspend ( ); 694 ODevice::inst ( )-> suspend ( );
695 695
696 DesktopApplication::switchLCD ( true ); // force LCD on without slow qcop call 696 DesktopApplication::switchLCD ( true ); // force LCD on without slow qcop call
697 QWSServer::screenSaverActivate ( false ); 697 QWSServer::screenSaverActivate ( false );
698 698
699 { 699 {
700 QCopEnvelope( "QPE/Card", "mtabChanged()" ); // might have changed while asleep 700 QCopEnvelope( "QPE/Card", "mtabChanged()" ); // might have changed while asleep
701 } 701 }
702 702
703 if ( wasloggedin ) 703 if ( wasloggedin )
704 login ( true ); 704 login ( true );
705 705
706 execAutoStart(); 706 execAutoStart();
707 //qcopBridge->closeOpenConnections(); 707 //qcopBridge->closeOpenConnections();
708 708
709 excllock = false; 709 excllock = false;
710} 710}
711 711
712void Desktop::toggleLight() 712void Desktop::toggleLight()
713{ 713{
714 QCopEnvelope e( "QPE/System", "setBacklight(int)" ); 714 QCopEnvelope e( "QPE/System", "setBacklight(int)" );
715 e << -2; // toggle 715 e << -2; // toggle
716} 716}
717 717
718void Desktop::toggleSymbolInput() 718void Desktop::toggleSymbolInput()
719{ 719{
720 tb->toggleSymbolInput(); 720 tb->toggleSymbolInput();
721} 721}
722 722
723void Desktop::toggleNumLockState() 723void Desktop::toggleNumLockState()
724{ 724{
725 tb->toggleNumLockState(); 725 tb->toggleNumLockState();
726} 726}
727 727
728void Desktop::toggleCapsLockState() 728void Desktop::toggleCapsLockState()
729{ 729{
730 tb->toggleCapsLockState(); 730 tb->toggleCapsLockState();
731} 731}
732 732
733void Desktop::styleChange( QStyle &s ) 733void Desktop::styleChange( QStyle &s )
734{ 734{
735 QWidget::styleChange( s ); 735 QWidget::styleChange( s );
736 layout(); 736 layout();
737} 737}
738 738
739void DesktopApplication::shutdown() 739void DesktopApplication::shutdown()
740{ 740{
741 if ( type() != GuiServer ) 741 if ( type() != GuiServer )
742 return ; 742 return ;
743 ShutdownImpl *sd = new ShutdownImpl( 0, 0, WDestructiveClose ); 743 ShutdownImpl *sd = new ShutdownImpl( 0, 0, WDestructiveClose );
744 connect( sd, SIGNAL( shutdown( ShutdownImpl::Type ) ), 744 connect( sd, SIGNAL( shutdown( ShutdownImpl::Type ) ),
745 this, SLOT( shutdown( ShutdownImpl::Type ) ) ); 745 this, SLOT( shutdown( ShutdownImpl::Type ) ) );
746 sd->showMaximized(); 746 sd->showMaximized();
747} 747}
748 748
749void DesktopApplication::shutdown( ShutdownImpl::Type t ) 749void DesktopApplication::shutdown( ShutdownImpl::Type t )
750{ 750{
751 char *opt = 0; 751 char *opt = 0;
752 752
753 switch ( t ) { 753 switch ( t ) {
754 case ShutdownImpl::ShutdownSystem: 754 case ShutdownImpl::ShutdownSystem:
755 opt = "-h"; 755 opt = "-h";
756 // fall through 756 // fall through
757 case ShutdownImpl::RebootSystem: 757 case ShutdownImpl::RebootSystem:
758 if ( opt == 0 ) 758 if ( opt == 0 )
759 opt = "-r"; 759 opt = "-r";
760 760
761 if ( execl( "/sbin/shutdown", "shutdown", opt, "now", ( void* ) 0) < 0 ) 761 if ( execl( "/sbin/shutdown", "shutdown", opt, "now", ( void* ) 0) < 0 )
762 perror("shutdown"); 762 perror("shutdown");
763 // ::syslog ( LOG_ERR, "Erroring execing shutdown\n" ); 763 // ::syslog ( LOG_ERR, "Erroring execing shutdown\n" );
764 764
765 break; 765 break;
766 case ShutdownImpl::RestartDesktop: 766 case ShutdownImpl::RestartDesktop:
767 restart(); 767 restart();
768 break; 768 break;
769 case ShutdownImpl::TerminateDesktop: 769 case ShutdownImpl::TerminateDesktop:
770 prepareForTermination( FALSE ); 770 prepareForTermination( FALSE );
771 771
772 // This is a workaround for a Qt bug 772 // This is a workaround for a Qt bug
773 // clipboard applet has to stop its poll timer, or Qt/E 773 // clipboard applet has to stop its poll timer, or Qt/E
774 // will hang on quit() right before it emits aboutToQuit() 774 // will hang on quit() right before it emits aboutToQuit()
775 emit aboutToQuit ( ); 775 emit aboutToQuit ( );
776 776
777 quit(); 777 quit();
778 break; 778 break;
779 } 779 }
780} 780}
781 781
782void DesktopApplication::restart() 782void DesktopApplication::restart()
783{ 783{
784 prepareForTermination( TRUE ); 784 prepareForTermination( TRUE );
785 785
786#ifdef Q_WS_QWS 786#ifdef Q_WS_QWS
787 787
788 for ( int fd = 3; fd < 100; fd++ ) 788 for ( int fd = 3; fd < 100; fd++ )
789 close( fd ); 789 close( fd );
790#if defined(QT_DEMO_SINGLE_FLOPPY) 790#if defined(QT_DEMO_SINGLE_FLOPPY)
791 791
792 execl( "/sbin/init", "qpe", 0 ); 792 execl( "/sbin/init", "qpe", 0 );
793#elif defined(QT_QWS_CASSIOPEIA) 793#elif defined(QT_QWS_CASSIOPEIA)
794 794
795 execl( "/bin/sh", "sh", 0 ); 795 execl( "/bin/sh", "sh", 0 );
796#else 796#else
797 797
798 execl( ( qpeDir() + "/bin/qpe" ).latin1(), "qpe", 0 ); 798 execl( ( qpeDir() + "/bin/qpe" ).latin1(), "qpe", 0 );
799#endif 799#endif
800 800
801 exit( 1 ); 801 exit( 1 );
802#endif 802#endif
803} 803}
804 804
805void Desktop::layout() 805void Desktop::layout()
806{ 806{
807 int displayw = qApp->desktop() ->width(); 807 int displayw = qApp->desktop() ->width();
808 int displayh = qApp->desktop() ->height(); 808 int displayh = qApp->desktop() ->height();
809 809
810 QSize sz = tb->sizeHint(); 810 QSize sz = tb->sizeHint();
811 811
812 tb->setGeometry( 0, displayh - sz.height(), displayw, sz.height() ); 812 tb->setGeometry( 0, displayh - sz.height(), displayw, sz.height() );
813 tb->calcMaxWindowRect(); 813 tb->calcMaxWindowRect();
814} 814}
815 815
816void Desktop::startTransferServer() 816void Desktop::startTransferServer()
817{ 817{
818 // start qcop bridge server 818 // start qcop bridge server
819 qcopBridge = new QCopBridge( 4243 ); 819 qcopBridge = new QCopBridge( 4243 );
820 if ( !qcopBridge->ok() ) { 820 if ( !qcopBridge->ok() ) {
821 delete qcopBridge; 821 delete qcopBridge;
822 qcopBridge = 0; 822 qcopBridge = 0;
823 } 823 }
824 // start transfer server 824 // start transfer server
825 transferServer = new TransferServer( 4242 ); 825 transferServer = new TransferServer( 4242 );
826 if ( !transferServer->ok() ) { 826 if ( !transferServer->ok() ) {
827 delete transferServer; 827 delete transferServer;
828 transferServer = 0; 828 transferServer = 0;
829 } 829 }
830 if ( !transferServer || !qcopBridge ) 830 if ( !transferServer || !qcopBridge )
831 startTimer( 2000 ); 831 startTimer( 2000 );
832} 832}
833 833
834void Desktop::timerEvent( QTimerEvent *e ) 834void Desktop::timerEvent( QTimerEvent *e )
835{ 835{
836 killTimer( e->timerId() ); 836 killTimer( e->timerId() );
837 startTransferServer(); 837 startTransferServer();
838} 838}
839 839
840bool Desktop::eventFilter( QObject *o, QEvent *ev ) 840bool Desktop::eventFilter( QObject *o, QEvent *ev )
841{ 841{
842 if ( o != qApp->desktop() || ev->type() != QEvent::Resize ) 842 if ( o != qApp->desktop() || ev->type() != QEvent::Resize )
843 return QWidget::eventFilter( o, ev ); 843 return QWidget::eventFilter( o, ev );
844 844
845 layout(); 845 layout();
846 846
847 return QWidget::eventFilter( o, ev ); 847 return QWidget::eventFilter( o, ev );
848} 848}
849 849
850void Desktop::terminateServers() 850void Desktop::terminateServers()
851{ 851{
852 delete transferServer; 852 delete transferServer;
853 delete qcopBridge; 853 delete qcopBridge;
854 transferServer = 0; 854 transferServer = 0;
855 qcopBridge = 0; 855 qcopBridge = 0;
856} 856}
857 857
858void DesktopApplication::rereadVolumes() 858void DesktopApplication::rereadVolumes()
859{ 859{
860 Config cfg( "qpe" ); 860 Config cfg( "qpe" );
861 cfg. setGroup ( "Volume" ); 861 cfg. setGroup ( "Volume" );
862 862
863 m_screentap_sound = cfg. readBoolEntry ( "TouchSound" ); 863 m_screentap_sound = cfg. readBoolEntry ( "TouchSound" );
864 m_keyclick_sound = cfg. readBoolEntry ( "KeySound" ); 864 m_keyclick_sound = cfg. readBoolEntry ( "KeySound" );
865 m_alarm_sound = cfg. readBoolEntry ( "AlarmSound" ); 865 m_alarm_sound = cfg. readBoolEntry ( "AlarmSound" );
866} 866}
867 867
868void DesktopApplication::soundAlarm() 868void DesktopApplication::soundAlarm()
869{ 869{
870 if ( me ( )-> m_alarm_sound ) 870 if ( me ( )-> m_alarm_sound )
871 ODevice::inst ( )-> alarmSound ( ); 871 ODevice::inst ( )-> alarmSound ( );
872} 872}
873 873
874DesktopApplication *DesktopApplication::me ( ) 874DesktopApplication *DesktopApplication::me ( )
875{ 875{
876 return (DesktopApplication *) qApp; 876 return (DesktopApplication *) qApp;
877} 877}
878 878
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp
index 20a1ecd..69a7fea 100644
--- a/core/launcher/main.cpp
+++ b/core/launcher/main.cpp
@@ -1,191 +1,191 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "desktop.h" 21#include "desktop.h"
22#include "taskbar.h" 22#include "taskbar.h"
23#include "stabmon.h" 23#include "stabmon.h"
24 24
25#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
26#include <qpe/network.h> 26#include <qpe/network.h>
27#include <qpe/config.h> 27#include <qpe/config.h>
28#if defined( QT_QWS_SL5XXX ) || defined( QT_QWS_IPAQ ) 28#if defined( QT_QWS_SL5XXX ) || defined( QT_QWS_IPAQ ) || defined (QT_QWS_RAMSES)
29#include <qpe/custom.h> 29#include <qpe/custom.h>
30#endif 30#endif
31 31
32#include <opie/odevice.h> 32#include <opie/odevice.h>
33 33
34#include <qmessagebox.h> 34#include <qmessagebox.h>
35#include <qfile.h> 35#include <qfile.h>
36#include <qimage.h> 36#include <qimage.h>
37#include <qwindowsystem_qws.h> 37#include <qwindowsystem_qws.h>
38#include <qwsmouse_qws.h> 38#include <qwsmouse_qws.h>
39#include <qpe/qcopenvelope_qws.h> 39#include <qpe/qcopenvelope_qws.h>
40#include <qpe/alarmserver.h> 40#include <qpe/alarmserver.h>
41 41
42#include <stdlib.h> 42#include <stdlib.h>
43#include <stdio.h> 43#include <stdio.h>
44#include <signal.h> 44#include <signal.h>
45#include <unistd.h> 45#include <unistd.h>
46 46
47#include "../calibrate/calibrate.h" 47#include "../calibrate/calibrate.h"
48 48
49using namespace Opie; 49using namespace Opie;
50 50
51void initEnvironment() 51void initEnvironment()
52{ 52{
53 int rot; 53 int rot;
54 Config config("locale"); 54 Config config("locale");
55 55
56 config.setGroup( "Location" ); 56 config.setGroup( "Location" );
57 QString tz = config.readEntry( "Timezone", getenv("TZ") ); 57 QString tz = config.readEntry( "Timezone", getenv("TZ") );
58 58
59 // if not timezone set, pick New York 59 // if not timezone set, pick New York
60 if (tz.isNull()) 60 if (tz.isNull())
61 tz = "America/New_York"; 61 tz = "America/New_York";
62 62
63 setenv( "TZ", tz, 1 ); 63 setenv( "TZ", tz, 1 );
64 config.writeEntry( "Timezone", tz); 64 config.writeEntry( "Timezone", tz);
65 65
66 config.setGroup( "Language" ); 66 config.setGroup( "Language" );
67 QString lang = config.readEntry( "Language", getenv("LANG") ); 67 QString lang = config.readEntry( "Language", getenv("LANG") );
68 if ( !lang.isNull() ) 68 if ( !lang.isNull() )
69 setenv( "LANG", lang, 1 ); 69 setenv( "LANG", lang, 1 );
70 70
71#if !defined(QT_QWS_CASSIOPEIA) && !defined(QT_QWS_IPAQ) && !defined(QT_QWS_SL5XXX) 71#if !defined(QT_QWS_CASSIOPEIA) && !defined(QT_QWS_IPAQ) && !defined(QT_QWS_SL5XXX)
72 setenv( "QWS_SIZE", "240x320", 0 ); 72 setenv( "QWS_SIZE", "240x320", 0 );
73#endif 73#endif
74 74
75 QString env(getenv("QWS_DISPLAY")); 75 QString env(getenv("QWS_DISPLAY"));
76 if (env.contains("Transformed")) { 76 if (env.contains("Transformed")) {
77 // transformed driver default rotation is controlled by the hardware. 77 // transformed driver default rotation is controlled by the hardware.
78 Config config("qpe"); 78 Config config("qpe");
79 config.setGroup( "Rotation" ); 79 config.setGroup( "Rotation" );
80 if ( ( rot = config.readNumEntry( "Rot", -1 ) ) == -1 ) 80 if ( ( rot = config.readNumEntry( "Rot", -1 ) ) == -1 )
81 rot = ODevice::inst ( )-> rotation ( ) * 90; 81 rot = ODevice::inst ( )-> rotation ( ) * 90;
82 82
83 setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(rot), 1); 83 setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(rot), 1);
84 QPEApplication::defaultRotation ( ); /* to ensure deforient matches reality */ 84 QPEApplication::defaultRotation ( ); /* to ensure deforient matches reality */
85 } 85 }
86} 86}
87 87
88 88
89int initApplication( int argc, char ** argv ) 89int initApplication( int argc, char ** argv )
90{ 90{
91 initEnvironment(); 91 initEnvironment();
92 92
93 //Don't flicker at startup: 93 //Don't flicker at startup:
94 QWSServer::setDesktopBackground( QImage() ); 94 QWSServer::setDesktopBackground( QImage() );
95 95
96 DesktopApplication a( argc, argv, QApplication::GuiServer ); 96 DesktopApplication a( argc, argv, QApplication::GuiServer );
97 97
98 ODevice::inst ( )-> setSoftSuspend ( true ); 98 ODevice::inst ( )-> setSoftSuspend ( true );
99 99
100 { // init backlight 100 { // init backlight
101 QCopEnvelope e("QPE/System", "setBacklight(int)" ); 101 QCopEnvelope e("QPE/System", "setBacklight(int)" );
102 e << -3; // Forced on 102 e << -3; // Forced on
103 } 103 }
104 104
105 AlarmServer::initialize(); 105 AlarmServer::initialize();
106 106
107 Desktop *d = new Desktop(); 107 Desktop *d = new Desktop();
108 108
109 QObject::connect( &a, SIGNAL(power()), d, SLOT(togglePower()) ); 109 QObject::connect( &a, SIGNAL(power()), d, SLOT(togglePower()) );
110 QObject::connect( &a, SIGNAL(backlight()), d, SLOT(toggleLight()) ); 110 QObject::connect( &a, SIGNAL(backlight()), d, SLOT(toggleLight()) );
111 QObject::connect( &a, SIGNAL(symbol()), d, SLOT(toggleSymbolInput()) ); 111 QObject::connect( &a, SIGNAL(symbol()), d, SLOT(toggleSymbolInput()) );
112 QObject::connect( &a, SIGNAL(numLockStateToggle()), d, SLOT(toggleNumLockState()) ); 112 QObject::connect( &a, SIGNAL(numLockStateToggle()), d, SLOT(toggleNumLockState()) );
113 QObject::connect( &a, SIGNAL(capsLockStateToggle()), d, SLOT(toggleCapsLockState()) ); 113 QObject::connect( &a, SIGNAL(capsLockStateToggle()), d, SLOT(toggleCapsLockState()) );
114 QObject::connect( &a, SIGNAL(prepareForRestart()), d, SLOT(terminateServers()) ); 114 QObject::connect( &a, SIGNAL(prepareForRestart()), d, SLOT(terminateServers()) );
115 115
116 (void)new SysFileMonitor(d); 116 (void)new SysFileMonitor(d);
117 Network::createServer(d); 117 Network::createServer(d);
118 118
119 if ( QWSServer::mouseHandler() ->inherits("QCalibratedMouseHandler") ) { 119 if ( QWSServer::mouseHandler() ->inherits("QCalibratedMouseHandler") ) {
120 if ( !QFile::exists( "/etc/pointercal" ) ) { 120 if ( !QFile::exists( "/etc/pointercal" ) ) {
121 // Make sure calibration widget starts on top. 121 // Make sure calibration widget starts on top.
122 Calibrate *cal = new Calibrate; 122 Calibrate *cal = new Calibrate;
123 cal->exec(); 123 cal->exec();
124 delete cal; 124 delete cal;
125 } 125 }
126 } 126 }
127 127
128 d->show(); 128 d->show();
129 129
130 if ( QDate::currentDate ( ). year ( ) < 2000 ) { 130 if ( QDate::currentDate ( ). year ( ) < 2000 ) {
131 if ( QMessageBox::information ( 0, DesktopApplication::tr( "Information" ), DesktopApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ). arg( TimeString::dateString ( QDate::currentDate ( ))), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) { 131 if ( QMessageBox::information ( 0, DesktopApplication::tr( "Information" ), DesktopApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ). arg( TimeString::dateString ( QDate::currentDate ( ))), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) {
132 QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" ); 132 QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" );
133 e << QString ( ); 133 e << QString ( );
134 } 134 }
135 } 135 }
136 136
137 int rv = a.exec(); 137 int rv = a.exec();
138 138
139 delete d; 139 delete d;
140 140
141 ODevice::inst ( )-> setSoftSuspend ( false ); 141 ODevice::inst ( )-> setSoftSuspend ( false );
142 142
143 return rv; 143 return rv;
144} 144}
145 145
146static const char *pidfile_path = "/var/run/opie.pid"; 146static const char *pidfile_path = "/var/run/opie.pid";
147 147
148void create_pidfile ( ) 148void create_pidfile ( )
149{ 149{
150 FILE *f; 150 FILE *f;
151 151
152 if (( f = ::fopen ( pidfile_path, "w" ))) { 152 if (( f = ::fopen ( pidfile_path, "w" ))) {
153 ::fprintf ( f, "%d", getpid ( )); 153 ::fprintf ( f, "%d", getpid ( ));
154 ::fclose ( f ); 154 ::fclose ( f );
155 } 155 }
156} 156}
157 157
158void remove_pidfile ( ) 158void remove_pidfile ( )
159{ 159{
160 ::unlink ( pidfile_path ); 160 ::unlink ( pidfile_path );
161} 161}
162 162
163void handle_sigterm ( int /* sig */ ) 163void handle_sigterm ( int /* sig */ )
164{ 164{
165 if ( qApp ) 165 if ( qApp )
166 qApp-> quit ( ); 166 qApp-> quit ( );
167} 167}
168 168
169int main( int argc, char ** argv ) 169int main( int argc, char ** argv )
170{ 170{
171 ::signal ( SIGCHLD, SIG_IGN ); 171 ::signal ( SIGCHLD, SIG_IGN );
172 172
173 ::signal ( SIGTERM, handle_sigterm ); 173 ::signal ( SIGTERM, handle_sigterm );
174 ::signal ( SIGINT, handle_sigterm ); 174 ::signal ( SIGINT, handle_sigterm );
175 175
176 ::setsid ( ); 176 ::setsid ( );
177 ::setpgid ( 0, 0 ); 177 ::setpgid ( 0, 0 );
178 178
179 ::atexit ( remove_pidfile ); 179 ::atexit ( remove_pidfile );
180 create_pidfile ( ); 180 create_pidfile ( );
181 181
182 int retVal = initApplication ( argc, argv ); 182 int retVal = initApplication ( argc, argv );
183 183
184 // Kill them. Kill them all. 184 // Kill them. Kill them all.
185 ::kill ( 0, SIGTERM ); 185 ::kill ( 0, SIGTERM );
186 ::sleep ( 1 ); 186 ::sleep ( 1 );
187 ::kill ( 0, SIGKILL ); 187 ::kill ( 0, SIGKILL );
188 188
189 return retVal; 189 return retVal;
190} 190}
191 191
diff --git a/core/launcher/taskbar.cpp b/core/launcher/taskbar.cpp
index feeba79..e8a81c3 100644
--- a/core/launcher/taskbar.cpp
+++ b/core/launcher/taskbar.cpp
@@ -1,315 +1,315 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19*********************************************************************/ 19*********************************************************************/
20 20
21#include "startmenu.h" 21#include "startmenu.h"
22#include "inputmethods.h" 22#include "inputmethods.h"
23#include "runningappbar.h" 23#include "runningappbar.h"
24#include "systray.h" 24#include "systray.h"
25#include "calibrate.h" 25#include "calibrate.h"
26#include "wait.h" 26#include "wait.h"
27#include "appicons.h" 27#include "appicons.h"
28 28
29#include "taskbar.h" 29#include "taskbar.h"
30#include "desktop.h" 30#include "desktop.h"
31 31
32#include <qpe/qpeapplication.h> 32#include <qpe/qpeapplication.h>
33#include <qpe/qcopenvelope_qws.h> 33#include <qpe/qcopenvelope_qws.h>
34#include <qpe/global.h> 34#include <qpe/global.h>
35 35
36#if defined( QT_QWS_SL5XXX ) || defined( QT_QWS_IPAQ ) 36#if defined( QT_QWS_SL5XXX ) || defined( QT_QWS_IPAQ ) || defined( QT_QWS_RAMSES)
37#include <qpe/custom.h> 37#include <qpe/custom.h>
38#endif 38#endif
39 39
40#include <opie/odevice.h> 40#include <opie/odevice.h>
41 41
42#include <qlabel.h> 42#include <qlabel.h>
43#include <qlayout.h> 43#include <qlayout.h>
44#include <qtimer.h> 44#include <qtimer.h>
45#include <qwindowsystem_qws.h> 45#include <qwindowsystem_qws.h>
46#include <qwidgetstack.h> 46#include <qwidgetstack.h>
47 47
48#if defined( Q_WS_QWS ) 48#if defined( Q_WS_QWS )
49#include <qwsdisplay_qws.h> 49#include <qwsdisplay_qws.h>
50#include <qgfx_qws.h> 50#include <qgfx_qws.h>
51#endif 51#endif
52 52
53 53
54using namespace Opie; 54using namespace Opie;
55 55
56static Global::Command builtins[] = { 56static Global::Command builtins[] = {
57 57
58#if defined(QT_QWS_IPAQ) || defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_SL5XXX) 58#if defined(QT_QWS_IPAQ) || defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_RAMSES)
59 { "calibrate", TaskBar::calibrate, 1, 0 }, 59 { "calibrate", TaskBar::calibrate, 1, 0 },
60#endif 60#endif
61#if !defined(QT_QWS_CASSIOPEIA) 61#if !defined(QT_QWS_CASSIOPEIA)
62 { "shutdown", Global::shutdown, 1, 0 }, 62 { "shutdown", Global::shutdown, 1, 0 },
63// { "run", run, 1, 0 }, 63// { "run", run, 1, 0 },
64#endif 64#endif
65 65
66 { 0, TaskBar::calibrate, 0, 0 }, 66 { 0, TaskBar::calibrate, 0, 0 },
67}; 67};
68 68
69static bool initNumLock() 69static bool initNumLock()
70{ 70{
71#ifdef QPE_INITIAL_NUMLOCK_STATE 71#ifdef QPE_INITIAL_NUMLOCK_STATE
72 QPE_INITIAL_NUMLOCK_STATE 72 QPE_INITIAL_NUMLOCK_STATE
73#endif 73#endif
74 return FALSE; 74 return FALSE;
75} 75}
76 76
77class LockKeyState : public QWidget 77class LockKeyState : public QWidget
78{ 78{
79public: 79public:
80 LockKeyState( QWidget *parent ) : 80 LockKeyState( QWidget *parent ) :
81 QWidget(parent), 81 QWidget(parent),
82 nl(initNumLock()), cl(FALSE) 82 nl(initNumLock()), cl(FALSE)
83 { 83 {
84 nl_pm = Resource::loadPixmap("numlock"); 84 nl_pm = Resource::loadPixmap("numlock");
85 cl_pm = Resource::loadPixmap("capslock"); 85 cl_pm = Resource::loadPixmap("capslock");
86 } 86 }
87 QSize sizeHint() const 87 QSize sizeHint() const
88 { 88 {
89 return QSize(nl_pm.width()+2,nl_pm.width()+nl_pm.height()+1); 89 return QSize(nl_pm.width()+2,nl_pm.width()+nl_pm.height()+1);
90 } 90 }
91 void toggleNumLockState() 91 void toggleNumLockState()
92 { 92 {
93 nl = !nl; repaint(); 93 nl = !nl; repaint();
94 } 94 }
95 void toggleCapsLockState() 95 void toggleCapsLockState()
96 { 96 {
97 cl = !cl; repaint(); 97 cl = !cl; repaint();
98 } 98 }
99 void paintEvent( QPaintEvent * ) 99 void paintEvent( QPaintEvent * )
100 { 100 {
101 int y = (height()-sizeHint().height())/2; 101 int y = (height()-sizeHint().height())/2;
102 QPainter p(this); 102 QPainter p(this);
103 if ( nl ) 103 if ( nl )
104 p.drawPixmap(1,y,nl_pm); 104 p.drawPixmap(1,y,nl_pm);
105 if ( cl ) 105 if ( cl )
106 p.drawPixmap(1,y+nl_pm.height()+1,cl_pm); 106 p.drawPixmap(1,y+nl_pm.height()+1,cl_pm);
107 } 107 }
108private: 108private:
109 QPixmap nl_pm, cl_pm; 109 QPixmap nl_pm, cl_pm;
110 bool nl, cl; 110 bool nl, cl;
111}; 111};
112 112
113TaskBar::~TaskBar() 113TaskBar::~TaskBar()
114{ 114{
115} 115}
116 116
117 117
118TaskBar::TaskBar() : QHBox(0, 0, WStyle_Customize | WStyle_Tool | WStyle_StaysOnTop | WGroupLeader) 118TaskBar::TaskBar() : QHBox(0, 0, WStyle_Customize | WStyle_Tool | WStyle_StaysOnTop | WGroupLeader)
119{ 119{
120 Global::setBuiltinCommands(builtins); 120 Global::setBuiltinCommands(builtins);
121 121
122 sm = new StartMenu( this ); 122 sm = new StartMenu( this );
123 123
124 inputMethods = new InputMethods( this ); 124 inputMethods = new InputMethods( this );
125 connect( inputMethods, SIGNAL(inputToggled(bool)), 125 connect( inputMethods, SIGNAL(inputToggled(bool)),
126 this, SLOT(calcMaxWindowRect()) ); 126 this, SLOT(calcMaxWindowRect()) );
127 127
128 stack = new QWidgetStack( this ); 128 stack = new QWidgetStack( this );
129 stack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); 129 stack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) );
130 label = new QLabel(stack); 130 label = new QLabel(stack);
131 131
132 runningAppBar = new RunningAppBar(stack); 132 runningAppBar = new RunningAppBar(stack);
133 stack->raiseWidget(runningAppBar); 133 stack->raiseWidget(runningAppBar);
134 134
135 waitIcon = new Wait( this ); 135 waitIcon = new Wait( this );
136 (void) new AppIcons( this ); 136 (void) new AppIcons( this );
137 137
138 sysTray = new SysTray( this ); 138 sysTray = new SysTray( this );
139 139
140 // ## make customizable in some way? 140 // ## make customizable in some way?
141 lockState = new LockKeyState( this ); 141 lockState = new LockKeyState( this );
142 142
143#if defined(Q_WS_QWS) 143#if defined(Q_WS_QWS)
144#if !defined(QT_NO_COP) 144#if !defined(QT_NO_COP)
145 QCopChannel *channel = new QCopChannel( "QPE/TaskBar", this ); 145 QCopChannel *channel = new QCopChannel( "QPE/TaskBar", this );
146 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), 146 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
147 this, SLOT(receive(const QCString&, const QByteArray&)) ); 147 this, SLOT(receive(const QCString&, const QByteArray&)) );
148#endif 148#endif
149#endif 149#endif
150 waitTimer = new QTimer( this ); 150 waitTimer = new QTimer( this );
151 connect( waitTimer, SIGNAL( timeout() ), this, SLOT( stopWait() ) ); 151 connect( waitTimer, SIGNAL( timeout() ), this, SLOT( stopWait() ) );
152 clearer = new QTimer( this ); 152 clearer = new QTimer( this );
153 QObject::connect(clearer, SIGNAL(timeout()), SLOT(clearStatusBar())); 153 QObject::connect(clearer, SIGNAL(timeout()), SLOT(clearStatusBar()));
154 QObject::connect(clearer, SIGNAL(timeout()), sysTray, SLOT(show())); 154 QObject::connect(clearer, SIGNAL(timeout()), sysTray, SLOT(show()));
155} 155}
156 156
157void TaskBar::setStatusMessage( const QString &text ) 157void TaskBar::setStatusMessage( const QString &text )
158{ 158{
159 if ( !text.isEmpty() ) { 159 if ( !text.isEmpty() ) {
160 label->setText( text ); 160 label->setText( text );
161 stack->raiseWidget( label ); 161 stack->raiseWidget( label );
162 if ( sysTray && ( label->fontMetrics().width( text ) > label->width() ) ) 162 if ( sysTray && ( label->fontMetrics().width( text ) > label->width() ) )
163 sysTray->hide(); 163 sysTray->hide();
164 clearer->start( 3000, TRUE ); 164 clearer->start( 3000, TRUE );
165 } else { 165 } else {
166 clearStatusBar(); 166 clearStatusBar();
167 } 167 }
168} 168}
169 169
170void TaskBar::clearStatusBar() 170void TaskBar::clearStatusBar()
171{ 171{
172 label->clear(); 172 label->clear();
173 stack->raiseWidget(runningAppBar); 173 stack->raiseWidget(runningAppBar);
174 // stack->raiseWidget( mru ); 174 // stack->raiseWidget( mru );
175} 175}
176 176
177void TaskBar::startWait() 177void TaskBar::startWait()
178{ 178{
179 waitIcon->setWaiting( true ); 179 waitIcon->setWaiting( true );
180 // a catchall stop after 10 seconds... 180 // a catchall stop after 10 seconds...
181 waitTimer->start( 10 * 1000, true ); 181 waitTimer->start( 10 * 1000, true );
182} 182}
183 183
184void TaskBar::stopWait(const QString& /*app*/) 184void TaskBar::stopWait(const QString& /*app*/)
185{ 185{
186 waitTimer->stop(); 186 waitTimer->stop();
187 //mru->addTask(sm->execToLink(app)); 187 //mru->addTask(sm->execToLink(app));
188 waitIcon->setWaiting( false ); 188 waitIcon->setWaiting( false );
189} 189}
190 190
191void TaskBar::stopWait() 191void TaskBar::stopWait()
192{ 192{
193 waitTimer->stop(); 193 waitTimer->stop();
194 194
195 waitIcon->setWaiting( false ); 195 waitIcon->setWaiting( false );
196} 196}
197 197
198void TaskBar::resizeEvent( QResizeEvent *e ) 198void TaskBar::resizeEvent( QResizeEvent *e )
199{ 199{
200 QHBox::resizeEvent( e ); 200 QHBox::resizeEvent( e );
201 calcMaxWindowRect(); 201 calcMaxWindowRect();
202} 202}
203 203
204void TaskBar::styleChange( QStyle &s ) 204void TaskBar::styleChange( QStyle &s )
205{ 205{
206 QHBox::styleChange( s ); 206 QHBox::styleChange( s );
207 calcMaxWindowRect(); 207 calcMaxWindowRect();
208} 208}
209 209
210void TaskBar::calcMaxWindowRect() 210void TaskBar::calcMaxWindowRect()
211{ 211{
212#ifdef Q_WS_QWS 212#ifdef Q_WS_QWS
213 QRect wr; 213 QRect wr;
214 int displayWidth = qApp->desktop()->width(); 214 int displayWidth = qApp->desktop()->width();
215 QRect ir = inputMethods->inputRect(); 215 QRect ir = inputMethods->inputRect();
216 if ( ir.isValid() ) { 216 if ( ir.isValid() ) {
217 wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 ); 217 wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 );
218 } else { 218 } else {
219 wr.setCoords( 0, 0, displayWidth-1, y()-1 ); 219 wr.setCoords( 0, 0, displayWidth-1, y()-1 );
220 } 220 }
221 221
222#if QT_VERSION < 300 222#if QT_VERSION < 300
223 QWSServer::setMaxWindowRect( qt_screen->mapToDevice(wr, 223 QWSServer::setMaxWindowRect( qt_screen->mapToDevice(wr,
224 QSize(qt_screen->width(),qt_screen->height())) 224 QSize(qt_screen->width(),qt_screen->height()))
225 ); 225 );
226#else 226#else
227 QWSServer::setMaxWindowRect( wr ); 227 QWSServer::setMaxWindowRect( wr );
228#endif 228#endif
229#endif 229#endif
230} 230}
231 231
232void TaskBar::receive( const QCString &msg, const QByteArray &data ) 232void TaskBar::receive( const QCString &msg, const QByteArray &data )
233{ 233{
234 QDataStream stream( data, IO_ReadOnly ); 234 QDataStream stream( data, IO_ReadOnly );
235 if ( msg == "message(QString)" ) { 235 if ( msg == "message(QString)" ) {
236 QString text; 236 QString text;
237 stream >> text; 237 stream >> text;
238 setStatusMessage( text ); 238 setStatusMessage( text );
239 } else if ( msg == "hideInputMethod()" ) { 239 } else if ( msg == "hideInputMethod()" ) {
240 inputMethods->hideInputMethod(); 240 inputMethods->hideInputMethod();
241 } else if ( msg == "showInputMethod()" ) { 241 } else if ( msg == "showInputMethod()" ) {
242 inputMethods->showInputMethod(); 242 inputMethods->showInputMethod();
243 } else if ( msg == "reloadInputMethods()" ) { 243 } else if ( msg == "reloadInputMethods()" ) {
244 inputMethods->loadInputMethods(); 244 inputMethods->loadInputMethods();
245 } else if ( msg == "toggleInputMethod()" ) { 245 } else if ( msg == "toggleInputMethod()" ) {
246 inputMethods->shown() ? inputMethods->hideInputMethod() : inputMethods->showInputMethod(); 246 inputMethods->shown() ? inputMethods->hideInputMethod() : inputMethods->showInputMethod();
247 } else if ( msg == "reloadApps()" ) { 247 } else if ( msg == "reloadApps()" ) {
248 sm->reloadApps(); 248 sm->reloadApps();
249 } else if ( msg == "reloadApplets()" ) { 249 } else if ( msg == "reloadApplets()" ) {
250 sysTray->clearApplets(); 250 sysTray->clearApplets();
251 sysTray->addApplets(); 251 sysTray->addApplets();
252 sm->reloadApplets(); 252 sm->reloadApplets();
253 } else if ( msg == "soundAlarm()" ) { 253 } else if ( msg == "soundAlarm()" ) {
254 DesktopApplication::soundAlarm ( ); 254 DesktopApplication::soundAlarm ( );
255 } 255 }
256 else if ( msg == "setLed(int,bool)" ) { 256 else if ( msg == "setLed(int,bool)" ) {
257 int led, status; 257 int led, status;
258 stream >> led >> status; 258 stream >> led >> status;
259 259
260 QValueList <OLed> ll = ODevice::inst ( )-> ledList ( ); 260 QValueList <OLed> ll = ODevice::inst ( )-> ledList ( );
261 if ( ll. count ( )){ 261 if ( ll. count ( )){
262 OLed l = ll. contains ( Led_Mail ) ? Led_Mail : ll [0]; 262 OLed l = ll. contains ( Led_Mail ) ? Led_Mail : ll [0];
263 bool canblink = ODevice::inst ( )-> ledStateList ( l ). contains ( Led_BlinkSlow ); 263 bool canblink = ODevice::inst ( )-> ledStateList ( l ). contains ( Led_BlinkSlow );
264 264
265 ODevice::inst ( )-> setLedState ( l, status ? ( canblink ? Led_BlinkSlow : Led_On ) : Led_Off ); 265 ODevice::inst ( )-> setLedState ( l, status ? ( canblink ? Led_BlinkSlow : Led_On ) : Led_Off );
266 } 266 }
267 } 267 }
268 else if ( msg == "toggleMenu()" ) { 268 else if ( msg == "toggleMenu()" ) {
269 if ( sm-> launchMenu-> isVisible ( )) 269 if ( sm-> launchMenu-> isVisible ( ))
270 sm-> launch ( ); 270 sm-> launch ( );
271 else { 271 else {
272 QCopEnvelope e ( "QPE/System", "toggleApplicationMenu()" ); 272 QCopEnvelope e ( "QPE/System", "toggleApplicationMenu()" );
273 } 273 }
274 } 274 }
275 else if ( msg == "toggleStartMenu()" ) { 275 else if ( msg == "toggleStartMenu()" ) {
276 sm-> launch ( ); 276 sm-> launch ( );
277 } 277 }
278} 278}
279 279
280QWidget *TaskBar::calibrate(bool) 280QWidget *TaskBar::calibrate(bool)
281{ 281{
282#ifdef Q_WS_QWS 282#ifdef Q_WS_QWS
283 Calibrate *c = new Calibrate; 283 Calibrate *c = new Calibrate;
284 c->show(); 284 c->show();
285 return c; 285 return c;
286#else 286#else
287 return 0; 287 return 0;
288#endif 288#endif
289} 289}
290 290
291void TaskBar::toggleNumLockState() 291void TaskBar::toggleNumLockState()
292{ 292{
293 if ( lockState ) lockState->toggleNumLockState(); 293 if ( lockState ) lockState->toggleNumLockState();
294} 294}
295 295
296void TaskBar::toggleCapsLockState() 296void TaskBar::toggleCapsLockState()
297{ 297{
298 if ( lockState ) lockState->toggleCapsLockState(); 298 if ( lockState ) lockState->toggleCapsLockState();
299} 299}
300 300
301void TaskBar::toggleSymbolInput() 301void TaskBar::toggleSymbolInput()
302{ 302{
303 if ( inputMethods->currentShown() == "Unicode" ) { 303 if ( inputMethods->currentShown() == "Unicode" ) {
304 inputMethods->hideInputMethod(); 304 inputMethods->hideInputMethod();
305 } else { 305 } else {
306 inputMethods->showInputMethod("Unicode"); 306 inputMethods->showInputMethod("Unicode");
307 } 307 }
308} 308}
309 309
310bool TaskBar::recoverMemory() 310bool TaskBar::recoverMemory()
311{ 311{
312 //mru->quitOldApps() is no longer supported 312 //mru->quitOldApps() is no longer supported
313 return true; 313 return true;
314} 314}
315 315
diff --git a/library/power.cpp b/library/power.cpp
index 5310b47..e7e5b24 100644
--- a/library/power.cpp
+++ b/library/power.cpp
@@ -1,171 +1,171 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "power.h" 21#include "power.h"
22 22
23#ifdef QT_QWS_SL5XXX 23#if defined(QT_QWS_SL5XXX) || defined(QT_QWS_RAMSES)
24#include "custom.h" 24#include "custom.h"
25#endif 25#endif
26 26
27#include <unistd.h> 27#include <unistd.h>
28#include <stdlib.h> 28#include <stdlib.h>
29#include <stdio.h> 29#include <stdio.h>
30#include <fcntl.h> 30#include <fcntl.h>
31#include <sys/ioctl.h> 31#include <sys/ioctl.h>
32 32
33#ifdef QT_QWS_IPAQ_NO_APM 33#ifdef QT_QWS_IPAQ_NO_APM
34#include <linux/h3600_ts.h> 34#include <linux/h3600_ts.h>
35#endif 35#endif
36 36
37PowerStatusManager *PowerStatusManager::powerManager = 0; 37PowerStatusManager *PowerStatusManager::powerManager = 0;
38PowerStatus *PowerStatusManager::ps = 0; 38PowerStatus *PowerStatusManager::ps = 0;
39 39
40static bool haveProcApm = false; 40static bool haveProcApm = false;
41 41
42PowerStatusManager::PowerStatusManager() 42PowerStatusManager::PowerStatusManager()
43{ 43{
44 powerManager = this; 44 powerManager = this;
45 ps = new PowerStatus; 45 ps = new PowerStatus;
46 FILE *f = fopen("/proc/apm", "r"); 46 FILE *f = fopen("/proc/apm", "r");
47 if ( f ) { 47 if ( f ) {
48 fclose(f); 48 fclose(f);
49 haveProcApm = TRUE; 49 haveProcApm = TRUE;
50 } 50 }
51} 51}
52 52
53const PowerStatus &PowerStatusManager::readStatus() 53const PowerStatus &PowerStatusManager::readStatus()
54{ 54{
55 if ( !powerManager ) 55 if ( !powerManager )
56 (void)new PowerStatusManager; 56 (void)new PowerStatusManager;
57 57
58 powerManager->getStatus(); 58 powerManager->getStatus();
59 59
60 return *ps; 60 return *ps;
61} 61}
62 62
63// Standard /proc/apm reader 63// Standard /proc/apm reader
64bool PowerStatusManager::getProcApmStatus( int &ac, int &bs, int &bf, int &pc, int &sec ) 64bool PowerStatusManager::getProcApmStatus( int &ac, int &bs, int &bf, int &pc, int &sec )
65{ 65{
66 bool ok = false; 66 bool ok = false;
67 67
68 ac = 0xff; 68 ac = 0xff;
69 bs = 0xff; 69 bs = 0xff;
70 bf = 0xff; 70 bf = 0xff;
71 pc = -1; 71 pc = -1;
72 sec = -1; 72 sec = -1;
73 73
74 FILE *f = fopen("/proc/apm", "r"); 74 FILE *f = fopen("/proc/apm", "r");
75 if ( f ) { 75 if ( f ) {
76 //I 1.13 1.2 0x02 0x00 0xff 0xff 49% 147 sec 76 //I 1.13 1.2 0x02 0x00 0xff 0xff 49% 147 sec
77 char u; 77 char u;
78 fscanf(f, "%*[^ ] %*d.%*d 0x%*x 0x%x 0x%x 0x%x %d%% %i %c", 78 fscanf(f, "%*[^ ] %*d.%*d 0x%*x 0x%x 0x%x 0x%x %d%% %i %c",
79 &ac, &bs, &bf, &pc, &sec, &u); 79 &ac, &bs, &bf, &pc, &sec, &u);
80 fclose(f); 80 fclose(f);
81 switch ( u ) { 81 switch ( u ) {
82 case 'm': sec *= 60; 82 case 'm': sec *= 60;
83 case 's': break; // ok 83 case 's': break; // ok
84 default: sec = -1; // unknown 84 default: sec = -1; // unknown
85 } 85 }
86 86
87 // extract data 87 // extract data
88 switch ( bs ) { 88 switch ( bs ) {
89 case 0x00: 89 case 0x00:
90 ps->bs = PowerStatus::High; 90 ps->bs = PowerStatus::High;
91 break; 91 break;
92 case 0x01: 92 case 0x01:
93 ps->bs = PowerStatus::Low; 93 ps->bs = PowerStatus::Low;
94 break; 94 break;
95 case 0x7f: 95 case 0x7f:
96 ps->bs = PowerStatus::VeryLow; 96 ps->bs = PowerStatus::VeryLow;
97 break; 97 break;
98 case 0x02: 98 case 0x02:
99 ps->bs = PowerStatus::Critical; 99 ps->bs = PowerStatus::Critical;
100 break; 100 break;
101 case 0x03: 101 case 0x03:
102 ps->bs = PowerStatus::Charging; 102 ps->bs = PowerStatus::Charging;
103 break; 103 break;
104 case 0x04: 104 case 0x04:
105 case 0xff: // 0xff is Unknown but we map to NotPresent 105 case 0xff: // 0xff is Unknown but we map to NotPresent
106 default: 106 default:
107 ps->bs = PowerStatus::NotPresent; 107 ps->bs = PowerStatus::NotPresent;
108 break; 108 break;
109 } 109 }
110 110
111 switch ( ac ) { 111 switch ( ac ) {
112 case 0x00: 112 case 0x00:
113 ps->ac = PowerStatus::Offline; 113 ps->ac = PowerStatus::Offline;
114 break; 114 break;
115 case 0x01: 115 case 0x01:
116 ps->ac = PowerStatus::Online; 116 ps->ac = PowerStatus::Online;
117 break; 117 break;
118 case 0x02: 118 case 0x02:
119 ps->ac = PowerStatus::Backup; 119 ps->ac = PowerStatus::Backup;
120 break; 120 break;
121 } 121 }
122 122
123 if ( pc > 100 ) pc = 100; 123 if ( pc > 100 ) pc = 100;
124 if ( pc < 0 ) pc = 0; 124 if ( pc < 0 ) pc = 0;
125 125
126 ps->percentRemain = pc; 126 ps->percentRemain = pc;
127 ps->secsRemain = sec; 127 ps->secsRemain = sec;
128 128
129 ok = true; 129 ok = true;
130 } 130 }
131 131
132 return ok; 132 return ok;
133} 133}
134 134
135void PowerStatusManager::getStatus() 135void PowerStatusManager::getStatus()
136{ 136{
137 bool usedApm = FALSE; 137 bool usedApm = FALSE;
138 138
139 ps->percentAccurate = TRUE; 139 ps->percentAccurate = TRUE;
140 140
141 // Some iPAQ kernel builds don't have APM. If this is not the case we 141 // Some iPAQ kernel builds don't have APM. If this is not the case we
142 // save ourselves an ioctl by testing if /proc/apm exists in the 142 // save ourselves an ioctl by testing if /proc/apm exists in the
143 // constructor and we use /proc/apm instead 143 // constructor and we use /proc/apm instead
144 int ac, bs, bf, pc, sec; 144 int ac, bs, bf, pc, sec;
145 if ( haveProcApm ) 145 if ( haveProcApm )
146 usedApm = getProcApmStatus( ac, bs, bf, pc, sec ); 146 usedApm = getProcApmStatus( ac, bs, bf, pc, sec );
147 147
148 if ( !usedApm ) { 148 if ( !usedApm ) {
149#ifdef QT_QWS_IPAQ_NO_APM 149#ifdef QT_QWS_IPAQ_NO_APM
150 int fd; 150 int fd;
151 int err; 151 int err;
152 struct bat_dev batt_info; 152 struct bat_dev batt_info;
153 153
154 memset(&batt_info, 0, sizeof(batt_info)); 154 memset(&batt_info, 0, sizeof(batt_info));
155 155
156 fd = ::open("/dev/ts",O_RDONLY); 156 fd = ::open("/dev/ts",O_RDONLY);
157 if( fd < 0 ) 157 if( fd < 0 )
158 return; 158 return;
159 159
160 ioctl(fd, GET_BATTERY_STATUS, &batt_info); 160 ioctl(fd, GET_BATTERY_STATUS, &batt_info);
161 ac_status = batt_info.ac_status; 161 ac_status = batt_info.ac_status;
162 ps->percentRemain = ( 425 * batt_info.batt1_voltage ) / 1000 - 298; // from h3600_ts.c 162 ps->percentRemain = ( 425 * batt_info.batt1_voltage ) / 1000 - 298; // from h3600_ts.c
163 ps->secsRemain = -1; // seconds is bogus on iPAQ 163 ps->secsRemain = -1; // seconds is bogus on iPAQ
164 ::close (fd); 164 ::close (fd);
165#else 165#else
166 ps->percentRemain = 100; 166 ps->percentRemain = 100;
167 ps->secsRemain = -1; 167 ps->secsRemain = -1;
168 ps->percentAccurate = FALSE; 168 ps->percentAccurate = FALSE;
169#endif 169#endif
170 } 170 }
171} 171}
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 22d222a..4bc08b3 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,1825 +1,1825 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19** $Id$ 19** $Id$
20** 20**
21**********************************************************************/ 21**********************************************************************/
22#define QTOPIA_INTERNAL_LANGLIST 22#define QTOPIA_INTERNAL_LANGLIST
23#include <stdlib.h> 23#include <stdlib.h>
24#include <unistd.h> 24#include <unistd.h>
25#include <linux/limits.h> // needed for some toolchains (PATH_MAX) 25#include <linux/limits.h> // needed for some toolchains (PATH_MAX)
26#include <qfile.h> 26#include <qfile.h>
27#ifdef Q_WS_QWS 27#ifdef Q_WS_QWS
28#ifndef QT_NO_COP 28#ifndef QT_NO_COP
29#if QT_VERSION <= 231 29#if QT_VERSION <= 231
30#define private public 30#define private public
31#define sendLocally processEvent 31#define sendLocally processEvent
32#include "qcopenvelope_qws.h" 32#include "qcopenvelope_qws.h"
33#undef private 33#undef private
34#else 34#else
35#include "qcopenvelope_qws.h" 35#include "qcopenvelope_qws.h"
36#endif 36#endif
37#endif 37#endif
38#include <qwindowsystem_qws.h> 38#include <qwindowsystem_qws.h>
39#endif 39#endif
40#include <qtextstream.h> 40#include <qtextstream.h>
41#include <qpalette.h> 41#include <qpalette.h>
42#include <qbuffer.h> 42#include <qbuffer.h>
43#include <qptrdict.h> 43#include <qptrdict.h>
44#include <qregexp.h> 44#include <qregexp.h>
45#include <qdir.h> 45#include <qdir.h>
46#include <qlabel.h> 46#include <qlabel.h>
47#include <qdialog.h> 47#include <qdialog.h>
48#include <qdragobject.h> 48#include <qdragobject.h>
49#include <qtextcodec.h> 49#include <qtextcodec.h>
50#include <qevent.h> 50#include <qevent.h>
51#include <qtooltip.h> 51#include <qtooltip.h>
52#include <qsignal.h> 52#include <qsignal.h>
53#include <qmainwindow.h> 53#include <qmainwindow.h>
54#include "qpeapplication.h" 54#include "qpeapplication.h"
55#include "qpestyle.h" 55#include "qpestyle.h"
56#include "styleinterface.h" 56#include "styleinterface.h"
57#if QT_VERSION >= 300 57#if QT_VERSION >= 300
58#include <qstylefactory.h> 58#include <qstylefactory.h>
59#else 59#else
60#include <qplatinumstyle.h> 60#include <qplatinumstyle.h>
61#include <qwindowsstyle.h> 61#include <qwindowsstyle.h>
62#include <qmotifstyle.h> 62#include <qmotifstyle.h>
63#include <qmotifplusstyle.h> 63#include <qmotifplusstyle.h>
64#include "lightstyle.h" 64#include "lightstyle.h"
65 65
66#include <qpe/qlibrary.h> 66#include <qpe/qlibrary.h>
67#endif 67#endif
68#include "global.h" 68#include "global.h"
69#include "resource.h" 69#include "resource.h"
70#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 70#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
71#include "qutfcodec.h" 71#include "qutfcodec.h"
72#endif 72#endif
73#include "config.h" 73#include "config.h"
74#include "network.h" 74#include "network.h"
75#ifdef QWS 75#ifdef QWS
76#include "fontmanager.h" 76#include "fontmanager.h"
77#endif 77#endif
78 78
79#include "alarmserver.h" 79#include "alarmserver.h"
80#include "applnk.h" 80#include "applnk.h"
81#include "qpemenubar.h" 81#include "qpemenubar.h"
82#include "textcodecinterface.h" 82#include "textcodecinterface.h"
83#include "imagecodecinterface.h" 83#include "imagecodecinterface.h"
84 84
85#include <unistd.h> 85#include <unistd.h>
86#include <sys/file.h> 86#include <sys/file.h>
87#include <sys/ioctl.h> 87#include <sys/ioctl.h>
88#include <sys/soundcard.h> 88#include <sys/soundcard.h>
89 89
90#include "qt_override_p.h" 90#include "qt_override_p.h"
91 91
92 92
93class QPEApplicationData 93class QPEApplicationData
94{ 94{
95public: 95public:
96 QPEApplicationData ( ) 96 QPEApplicationData ( )
97 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ), 97 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ),
98 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ), 98 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ),
99 keep_running( true ), qpe_main_widget( 0 ) 99 keep_running( true ), qpe_main_widget( 0 )
100 100
101 { 101 {
102 qcopq.setAutoDelete( TRUE ); 102 qcopq.setAutoDelete( TRUE );
103 } 103 }
104 104
105 int presstimer; 105 int presstimer;
106 QWidget* presswidget; 106 QWidget* presswidget;
107 QPoint presspos; 107 QPoint presspos;
108 108
109 bool rightpressed : 1; 109 bool rightpressed : 1;
110 bool kbgrabbed : 1; 110 bool kbgrabbed : 1;
111 bool notbusysent : 1; 111 bool notbusysent : 1;
112 bool preloaded : 1; 112 bool preloaded : 1;
113 bool forceshow : 1; 113 bool forceshow : 1;
114 bool nomaximize : 1; 114 bool nomaximize : 1;
115 bool keep_running : 1; 115 bool keep_running : 1;
116 116
117 QString appName; 117 QString appName;
118 struct QCopRec 118 struct QCopRec
119 { 119 {
120 QCopRec( const QCString &ch, const QCString &msg, 120 QCopRec( const QCString &ch, const QCString &msg,
121 const QByteArray &d ) : 121 const QByteArray &d ) :
122 channel( ch ), message( msg ), data( d ) 122 channel( ch ), message( msg ), data( d )
123 { } 123 { }
124 124
125 QCString channel; 125 QCString channel;
126 QCString message; 126 QCString message;
127 QByteArray data; 127 QByteArray data;
128 }; 128 };
129 QWidget* qpe_main_widget; 129 QWidget* qpe_main_widget;
130 QList<QCopRec> qcopq; 130 QList<QCopRec> qcopq;
131 131
132 void enqueueQCop( const QCString &ch, const QCString &msg, 132 void enqueueQCop( const QCString &ch, const QCString &msg,
133 const QByteArray &data ) 133 const QByteArray &data )
134 { 134 {
135 qcopq.append( new QCopRec( ch, msg, data ) ); 135 qcopq.append( new QCopRec( ch, msg, data ) );
136 } 136 }
137 void sendQCopQ() 137 void sendQCopQ()
138 { 138 {
139 QCopRec * r; 139 QCopRec * r;
140#ifndef QT_NO_COP 140#ifndef QT_NO_COP
141 141
142 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it ) 142 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it )
143 QCopChannel::sendLocally( r->channel, r->message, r->data ); 143 QCopChannel::sendLocally( r->channel, r->message, r->data );
144#endif 144#endif
145 145
146 qcopq.clear(); 146 qcopq.clear();
147 } 147 }
148 static void show_mx(QWidget* mw, bool nomaximize) 148 static void show_mx(QWidget* mw, bool nomaximize)
149 { 149 {
150 150
151 // ugly hack, remove that later after finding a sane solution 151 // ugly hack, remove that later after finding a sane solution
152 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays, 152 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays,
153 // so this is only useful if QT_QWS_SHARP is defined. E.g. SIMpad has 800x600 but has 153 // so this is only useful if QT_QWS_SHARP is defined. E.g. SIMpad has 800x600 but has
154 // a (physically) large enough display to use the small icons 154 // a (physically) large enough display to use the small icons
155 #ifdef QT_QWS_SHARP 155#ifdef QT_QWS_SHARP
156 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) { 156 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) {
157 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true ); 157 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true );
158 } 158 }
159 #endif 159#endif
160 160
161 if ( mw->layout() && mw->inherits("QDialog") ) { 161 if ( mw->layout() && mw->inherits("QDialog") ) {
162 QPEApplication::showDialog((QDialog*)mw, nomaximize); 162 QPEApplication::showDialog((QDialog*)mw, nomaximize);
163 } 163 }
164 else { 164 else {
165#ifdef Q_WS_QWS 165#ifdef Q_WS_QWS
166 if ( !nomaximize ) 166 if ( !nomaximize )
167 mw->showMaximized(); 167 mw->showMaximized();
168 else 168 else
169#endif 169#endif
170 170
171 mw->show(); 171 mw->show();
172 } 172 }
173 } 173 }
174 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) 174 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
175 { 175 {
176 /* 176 /*
177 // This works but disable it for now until it is safe to apply 177 // This works but disable it for now until it is safe to apply
178 // What is does is scan the .desktop files of all the apps for 178 // What is does is scan the .desktop files of all the apps for
179 // the applnk that has the corresponding argv[0] as this program 179 // the applnk that has the corresponding argv[0] as this program
180 // then it uses the name stored in the .desktop file as the caption 180 // then it uses the name stored in the .desktop file as the caption
181 // for the main widget. This saves duplicating translations for 181 // for the main widget. This saves duplicating translations for
182 // the app name in the program and in the .desktop files. 182 // the app name in the program and in the .desktop files.
183 183
184 AppLnkSet apps( appsPath ); 184 AppLnkSet apps( appsPath );
185 185
186 QList<AppLnk> appsList = apps.children(); 186 QList<AppLnk> appsList = apps.children();
187 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { 187 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
188 if ( (*it)->exec() == appName ) { 188 if ( (*it)->exec() == appName ) {
189 mw->setCaption( (*it)->name() ); 189 mw->setCaption( (*it)->name() );
190 return TRUE; 190 return TRUE;
191 } 191 }
192 } 192 }
193 */ 193 */
194 return FALSE; 194 return FALSE;
195 } 195 }
196 196
197 197
198 void show(QWidget* mw, bool nomax) 198 void show(QWidget* mw, bool nomax)
199 { 199 {
200 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); 200 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" );
201 nomaximize = nomax; 201 nomaximize = nomax;
202 qpe_main_widget = mw; 202 qpe_main_widget = mw;
203#ifndef QT_NO_COP 203#ifndef QT_NO_COP
204 204
205 sendQCopQ(); 205 sendQCopQ();
206#endif 206#endif
207 207
208 if ( preloaded ) { 208 if ( preloaded ) {
209 if (forceshow) 209 if (forceshow)
210 show_mx(mw, nomax); 210 show_mx(mw, nomax);
211 } 211 }
212 else if ( keep_running ) { 212 else if ( keep_running ) {
213 show_mx(mw, nomax); 213 show_mx(mw, nomax);
214 } 214 }
215 } 215 }
216 216
217 void loadTextCodecs() 217 void loadTextCodecs()
218 { 218 {
219 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; 219 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs";
220 QDir dir( path, "lib*.so" ); 220 QDir dir( path, "lib*.so" );
221 QStringList list; 221 QStringList list;
222 if ( dir. exists ( )) 222 if ( dir. exists ( ))
223 list = dir.entryList(); 223 list = dir.entryList();
224 QStringList::Iterator it; 224 QStringList::Iterator it;
225 for ( it = list.begin(); it != list.end(); ++it ) { 225 for ( it = list.begin(); it != list.end(); ++it ) {
226 TextCodecInterface *iface = 0; 226 TextCodecInterface *iface = 0;
227 QLibrary *lib = new QLibrary( path + "/" + *it ); 227 QLibrary *lib = new QLibrary( path + "/" + *it );
228 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 228 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
229 QValueList<int> mibs = iface->mibEnums(); 229 QValueList<int> mibs = iface->mibEnums();
230 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { 230 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) {
231 (void)iface->createForMib(*i); 231 (void)iface->createForMib(*i);
232 // ### it exists now; need to remember if we can delete it 232 // ### it exists now; need to remember if we can delete it
233 } 233 }
234 } 234 }
235 else { 235 else {
236 lib->unload(); 236 lib->unload();
237 delete lib; 237 delete lib;
238 } 238 }
239 } 239 }
240 } 240 }
241 241
242 void loadImageCodecs() 242 void loadImageCodecs()
243 { 243 {
244 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 244 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
245 QDir dir( path, "lib*.so" ); 245 QDir dir( path, "lib*.so" );
246 QStringList list; 246 QStringList list;
247 if ( dir. exists ( )) 247 if ( dir. exists ( ))
248 list = dir.entryList(); 248 list = dir.entryList();
249 QStringList::Iterator it; 249 QStringList::Iterator it;
250 for ( it = list.begin(); it != list.end(); ++it ) { 250 for ( it = list.begin(); it != list.end(); ++it ) {
251 ImageCodecInterface *iface = 0; 251 ImageCodecInterface *iface = 0;
252 QLibrary *lib = new QLibrary( path + "/" + *it ); 252 QLibrary *lib = new QLibrary( path + "/" + *it );
253 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 253 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
254 QStringList formats = iface->keys(); 254 QStringList formats = iface->keys();
255 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { 255 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) {
256 (void)iface->installIOHandler(*i); 256 (void)iface->installIOHandler(*i);
257 // ### it exists now; need to remember if we can delete it 257 // ### it exists now; need to remember if we can delete it
258 } 258 }
259 } 259 }
260 else { 260 else {
261 lib->unload(); 261 lib->unload();
262 delete lib; 262 delete lib;
263 } 263 }
264 } 264 }
265 } 265 }
266 QString styleName; 266 QString styleName;
267 QString decorationName; 267 QString decorationName;
268}; 268};
269 269
270class ResourceMimeFactory : public QMimeSourceFactory 270class ResourceMimeFactory : public QMimeSourceFactory
271{ 271{
272public: 272public:
273 ResourceMimeFactory() 273 ResourceMimeFactory()
274 { 274 {
275 setFilePath( Global::helpPath() ); 275 setFilePath( Global::helpPath() );
276 setExtensionType( "html", "text/html;charset=UTF-8" ); 276 setExtensionType( "html", "text/html;charset=UTF-8" );
277 } 277 }
278 278
279 const QMimeSource* data( const QString& abs_name ) const 279 const QMimeSource* data( const QString& abs_name ) const
280 { 280 {
281 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 281 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
282 if ( !r ) { 282 if ( !r ) {
283 int sl = abs_name.length(); 283 int sl = abs_name.length();
284 do { 284 do {
285 sl = abs_name.findRev( '/', sl - 1 ); 285 sl = abs_name.findRev( '/', sl - 1 );
286 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 286 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
287 int dot = name.findRev( '.' ); 287 int dot = name.findRev( '.' );
288 if ( dot >= 0 ) 288 if ( dot >= 0 )
289 name = name.left( dot ); 289 name = name.left( dot );
290 QImage img = Resource::loadImage( name ); 290 QImage img = Resource::loadImage( name );
291 if ( !img.isNull() ) 291 if ( !img.isNull() )
292 r = new QImageDrag( img ); 292 r = new QImageDrag( img );
293 } 293 }
294 while ( !r && sl > 0 ); 294 while ( !r && sl > 0 );
295 } 295 }
296 return r; 296 return r;
297 } 297 }
298}; 298};
299 299
300static int muted = 0; 300static int muted = 0;
301static int micMuted = 0; 301static int micMuted = 0;
302 302
303static void setVolume( int t = 0, int percent = -1 ) 303static void setVolume( int t = 0, int percent = -1 )
304{ 304{
305 switch ( t ) { 305 switch ( t ) {
306 case 0: { 306 case 0: {
307 Config cfg( "qpe" ); 307 Config cfg( "qpe" );
308 cfg.setGroup( "Volume" ); 308 cfg.setGroup( "Volume" );
309 if ( percent < 0 ) 309 if ( percent < 0 )
310 percent = cfg.readNumEntry( "VolumePercent", 50 ); 310 percent = cfg.readNumEntry( "VolumePercent", 50 );
311 int fd = 0; 311 int fd = 0;
312 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 312 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
313 int vol = muted ? 0 : percent; 313 int vol = muted ? 0 : percent;
314 // set both channels to same volume 314 // set both channels to same volume
315 vol |= vol << 8; 315 vol |= vol << 8;
316 ioctl( fd, MIXER_WRITE( 0 ), &vol ); 316 ioctl( fd, MIXER_WRITE( 0 ), &vol );
317 ::close( fd ); 317 ::close( fd );
318 } 318 }
319 } 319 }
320 break; 320 break;
321 } 321 }
322} 322}
323 323
324static void setMic( int t = 0, int percent = -1 ) 324static void setMic( int t = 0, int percent = -1 )
325{ 325{
326 switch ( t ) { 326 switch ( t ) {
327 case 0: { 327 case 0: {
328 Config cfg( "qpe" ); 328 Config cfg( "qpe" );
329 cfg.setGroup( "Volume" ); 329 cfg.setGroup( "Volume" );
330 if ( percent < 0 ) 330 if ( percent < 0 )
331 percent = cfg.readNumEntry( "Mic", 50 ); 331 percent = cfg.readNumEntry( "Mic", 50 );
332 332
333 int fd = 0; 333 int fd = 0;
334 int mic = micMuted ? 0 : percent; 334 int mic = micMuted ? 0 : percent;
335 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 335 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
336 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 336 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
337 ::close( fd ); 337 ::close( fd );
338 } 338 }
339 } 339 }
340 break; 340 break;
341 } 341 }
342} 342}
343 343
344 344
345static void setBass( int t = 0, int percent = -1 ) 345static void setBass( int t = 0, int percent = -1 )
346{ 346{
347 switch ( t ) { 347 switch ( t ) {
348 case 0: { 348 case 0: {
349 Config cfg( "qpe" ); 349 Config cfg( "qpe" );
350 cfg.setGroup( "Volume" ); 350 cfg.setGroup( "Volume" );
351 if ( percent < 0 ) 351 if ( percent < 0 )
352 percent = cfg.readNumEntry( "BassPercent", 50 ); 352 percent = cfg.readNumEntry( "BassPercent", 50 );
353 353
354 int fd = 0; 354 int fd = 0;
355 int bass = percent; 355 int bass = percent;
356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
357 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass ); 357 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass );
358 ::close( fd ); 358 ::close( fd );
359 } 359 }
360 } 360 }
361 break; 361 break;
362 } 362 }
363} 363}
364 364
365 365
366static void setTreble( int t = 0, int percent = -1 ) 366static void setTreble( int t = 0, int percent = -1 )
367{ 367{
368 switch ( t ) { 368 switch ( t ) {
369 case 0: { 369 case 0: {
370 Config cfg( "qpe" ); 370 Config cfg( "qpe" );
371 cfg.setGroup( "Volume" ); 371 cfg.setGroup( "Volume" );
372 if ( percent < 0 ) 372 if ( percent < 0 )
373 percent = cfg.readNumEntry( "TreblePercent", 50 ); 373 percent = cfg.readNumEntry( "TreblePercent", 50 );
374 374
375 int fd = 0; 375 int fd = 0;
376 int treble = percent; 376 int treble = percent;
377 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 377 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
378 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble ); 378 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble );
379 ::close( fd ); 379 ::close( fd );
380 } 380 }
381 } 381 }
382 break; 382 break;
383 } 383 }
384} 384}
385 385
386 386
387/*! 387/*!
388 \class QPEApplication qpeapplication.h 388 \class QPEApplication qpeapplication.h
389 \brief The QPEApplication class implements various system services 389 \brief The QPEApplication class implements various system services
390 that are available to all Qtopia applications. 390 that are available to all Qtopia applications.
391 391
392 Simply by using QPEApplication instead of QApplication, a standard Qt 392 Simply by using QPEApplication instead of QApplication, a standard Qt
393 application becomes a Qtopia application. It automatically follows 393 application becomes a Qtopia application. It automatically follows
394 style changes, quits and raises, and in the 394 style changes, quits and raises, and in the
395 case of \link docwidget.html document-oriented\endlink applications, 395 case of \link docwidget.html document-oriented\endlink applications,
396 changes the currently displayed document in response to the environment. 396 changes the currently displayed document in response to the environment.
397 397
398 To create a \link docwidget.html document-oriented\endlink 398 To create a \link docwidget.html document-oriented\endlink
399 application use showMainDocumentWidget(); to create a 399 application use showMainDocumentWidget(); to create a
400 non-document-oriented application use showMainWidget(). The 400 non-document-oriented application use showMainWidget(). The
401 keepRunning() function indicates whether the application will 401 keepRunning() function indicates whether the application will
402 continue running after it's processed the last \link qcop.html 402 continue running after it's processed the last \link qcop.html
403 QCop\endlink message. This can be changed using setKeepRunning(). 403 QCop\endlink message. This can be changed using setKeepRunning().
404 404
405 A variety of signals are emitted when certain events occur, for 405 A variety of signals are emitted when certain events occur, for
406 example, timeChanged(), clockChanged(), weekChanged(), 406 example, timeChanged(), clockChanged(), weekChanged(),
407 dateFormatChanged() and volumeChanged(). If the application receives 407 dateFormatChanged() and volumeChanged(). If the application receives
408 a \link qcop.html QCop\endlink message on the application's 408 a \link qcop.html QCop\endlink message on the application's
409 QPE/Application/\e{appname} channel, the appMessage() signal is 409 QPE/Application/\e{appname} channel, the appMessage() signal is
410 emitted. There are also flush() and reload() signals, which 410 emitted. There are also flush() and reload() signals, which
411 are emitted when synching begins and ends respectively - upon these 411 are emitted when synching begins and ends respectively - upon these
412 signals, the application should save and reload any data 412 signals, the application should save and reload any data
413 files that are involved in synching. Most of these signals will initially 413 files that are involved in synching. Most of these signals will initially
414 be received and unfiltered through the appMessage() signal. 414 be received and unfiltered through the appMessage() signal.
415 415
416 This class also provides a set of useful static functions. The 416 This class also provides a set of useful static functions. The
417 qpeDir() and documentDir() functions return the respective paths. 417 qpeDir() and documentDir() functions return the respective paths.
418 The grabKeyboard() and ungrabKeyboard() functions are used to 418 The grabKeyboard() and ungrabKeyboard() functions are used to
419 control whether the application takes control of the device's 419 control whether the application takes control of the device's
420 physical buttons (e.g. application launch keys). The stylus' mode of 420 physical buttons (e.g. application launch keys). The stylus' mode of
421 operation is set with setStylusOperation() and retrieved with 421 operation is set with setStylusOperation() and retrieved with
422 stylusOperation(). There are also setInputMethodHint() and 422 stylusOperation(). There are also setInputMethodHint() and
423 inputMethodHint() functions. 423 inputMethodHint() functions.
424 424
425 \ingroup qtopiaemb 425 \ingroup qtopiaemb
426*/ 426*/
427 427
428/*! 428/*!
429 \fn void QPEApplication::clientMoused() 429 \fn void QPEApplication::clientMoused()
430 430
431 \internal 431 \internal
432*/ 432*/
433 433
434/*! 434/*!
435 \fn void QPEApplication::timeChanged(); 435 \fn void QPEApplication::timeChanged();
436 This signal is emitted when the time changes outside the normal 436 This signal is emitted when the time changes outside the normal
437 passage of time, i.e. if the time is set backwards or forwards. 437 passage of time, i.e. if the time is set backwards or forwards.
438*/ 438*/
439 439
440/*! 440/*!
441 \fn void QPEApplication::clockChanged( bool ampm ); 441 \fn void QPEApplication::clockChanged( bool ampm );
442 442
443 This signal is emitted when the user changes the clock's style. If 443 This signal is emitted when the user changes the clock's style. If
444 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise, 444 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise,
445 they want a 24-hour clock. 445 they want a 24-hour clock.
446*/ 446*/
447 447
448/*! 448/*!
449 \fn void QPEApplication::volumeChanged( bool muted ) 449 \fn void QPEApplication::volumeChanged( bool muted )
450 450
451 This signal is emitted whenever the mute state is changed. If \a 451 This signal is emitted whenever the mute state is changed. If \a
452 muted is TRUE, then sound output has been muted. 452 muted is TRUE, then sound output has been muted.
453*/ 453*/
454 454
455/*! 455/*!
456 \fn void QPEApplication::weekChanged( bool startOnMonday ) 456 \fn void QPEApplication::weekChanged( bool startOnMonday )
457 457
458 This signal is emitted if the week start day is changed. If \a 458 This signal is emitted if the week start day is changed. If \a
459 startOnMonday is TRUE then the first day of the week is Monday; if 459 startOnMonday is TRUE then the first day of the week is Monday; if
460 \a startOnMonday is FALSE then the first day of the week is 460 \a startOnMonday is FALSE then the first day of the week is
461 Sunday. 461 Sunday.
462*/ 462*/
463 463
464/*! 464/*!
465 \fn void QPEApplication::dateFormatChanged(DateFormat) 465 \fn void QPEApplication::dateFormatChanged(DateFormat)
466 466
467 This signal is emitted whenever the date format is changed. 467 This signal is emitted whenever the date format is changed.
468*/ 468*/
469 469
470/*! 470/*!
471 \fn void QPEApplication::flush() 471 \fn void QPEApplication::flush()
472 472
473 ### 473 ###
474*/ 474*/
475 475
476/*! 476/*!
477 \fn void QPEApplication::reload() 477 \fn void QPEApplication::reload()
478 478
479*/ 479*/
480 480
481/*! 481/*!
482 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 482 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
483 483
484 This signal is emitted when a message is received on this 484 This signal is emitted when a message is received on this
485 application's QPE/Application/<i>appname</i> \link qcop.html 485 application's QPE/Application/<i>appname</i> \link qcop.html
486 QCop\endlink channel. 486 QCop\endlink channel.
487 487
488 The slot to which you connect this signal uses \a msg and \a data 488 The slot to which you connect this signal uses \a msg and \a data
489 in the following way: 489 in the following way:
490 490
491\code 491\code
492 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 492 void MyWidget::receive( const QCString& msg, const QByteArray& data )
493 { 493 {
494 QDataStream stream( data, IO_ReadOnly ); 494 QDataStream stream( data, IO_ReadOnly );
495 if ( msg == "someMessage(int,int,int)" ) { 495 if ( msg == "someMessage(int,int,int)" ) {
496 int a,b,c; 496 int a,b,c;
497 stream >> a >> b >> c; 497 stream >> a >> b >> c;
498 ... 498 ...
499 } else if ( msg == "otherMessage(QString)" ) { 499 } else if ( msg == "otherMessage(QString)" ) {
500 ... 500 ...
501 } 501 }
502 } 502 }
503\endcode 503\endcode
504 504
505 \sa qcop.html 505 \sa qcop.html
506 Note that messages received here may be processed by qpe application 506 Note that messages received here may be processed by qpe application
507 and emitted as signals, such as flush() and reload(). 507 and emitted as signals, such as flush() and reload().
508*/ 508*/
509 509
510/*! 510/*!
511 Constructs a QPEApplication just as you would construct 511 Constructs a QPEApplication just as you would construct
512 a QApplication, passing \a argc, \a argv, and \a t. 512 a QApplication, passing \a argc, \a argv, and \a t.
513 513
514 For applications, \a t should be the default, GuiClient. Only 514 For applications, \a t should be the default, GuiClient. Only
515 the Qtopia server passes GuiServer. 515 the Qtopia server passes GuiServer.
516*/ 516*/
517QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 517QPEApplication::QPEApplication( int & argc, char **argv, Type t )
518 : QApplication( argc, argv, t ) 518 : QApplication( argc, argv, t )
519{ 519{
520 d = new QPEApplicationData; 520 d = new QPEApplicationData;
521 d->loadTextCodecs(); 521 d->loadTextCodecs();
522 d->loadImageCodecs(); 522 d->loadImageCodecs();
523 int dw = desktop() ->width(); 523 int dw = desktop() ->width();
524 524
525 if ( dw < 200 ) { 525 if ( dw < 200 ) {
526 setFont( QFont( "vera", 8 ) ); 526 setFont( QFont( "vera", 8 ) );
527 AppLnk::setSmallIconSize( 10 ); 527 AppLnk::setSmallIconSize( 10 );
528 AppLnk::setBigIconSize( 28 ); 528 AppLnk::setBigIconSize( 28 );
529 } 529 }
530 #ifdef QT_QWS_SHARP 530#ifdef QT_QWS_SHARP
531 else if ( dw > 600 ) { 531 else if ( dw > 600 ) {
532 setFont( QFont( "vera", 16 ) ); 532 setFont( QFont( "vera", 16 ) );
533 AppLnk::setSmallIconSize( 24 ); 533 AppLnk::setSmallIconSize( 24 );
534 AppLnk::setBigIconSize( 48 ); 534 AppLnk::setBigIconSize( 48 );
535 } 535 }
536 #endif 536#endif
537 else if ( dw > 200 ) { 537 else if ( dw > 200 ) {
538 setFont( QFont( "vera", 10 ) ); 538 setFont( QFont( "vera", 10 ) );
539 AppLnk::setSmallIconSize( 14 ); 539 AppLnk::setSmallIconSize( 14 );
540 AppLnk::setBigIconSize( 32 ); 540 AppLnk::setBigIconSize( 32 );
541 } 541 }
542 542
543 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 543 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
544 544
545 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 545 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
546#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 546#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
547 547
548 QString qcopfn( "/tmp/qcop-msg-" ); 548 QString qcopfn( "/tmp/qcop-msg-" );
549 qcopfn += QString( argv[ 0 ] ); // append command name 549 qcopfn += QString( argv[ 0 ] ); // append command name
550 550
551 QFile f( qcopfn ); 551 QFile f( qcopfn );
552 if ( f.open( IO_ReadOnly ) ) { 552 if ( f.open( IO_ReadOnly ) ) {
553 flock( f.handle(), LOCK_EX ); 553 flock( f.handle(), LOCK_EX );
554 } 554 }
555 555
556 sysChannel = new QCopChannel( "QPE/System", this ); 556 sysChannel = new QCopChannel( "QPE/System", this );
557 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 557 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
558 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); 558 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) );
559 559
560 QCString channel = QCString( argv[ 0 ] ); 560 QCString channel = QCString( argv[ 0 ] );
561 channel.replace( QRegExp( ".*/" ), "" ); 561 channel.replace( QRegExp( ".*/" ), "" );
562 d->appName = channel; 562 d->appName = channel;
563 channel = "QPE/Application/" + channel; 563 channel = "QPE/Application/" + channel;
564 pidChannel = new QCopChannel( channel, this ); 564 pidChannel = new QCopChannel( channel, this );
565 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 565 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
566 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); 566 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) );
567 567
568 if ( f.isOpen() ) { 568 if ( f.isOpen() ) {
569 d->keep_running = FALSE; 569 d->keep_running = FALSE;
570 QDataStream ds( &f ); 570 QDataStream ds( &f );
571 QCString channel, message; 571 QCString channel, message;
572 QByteArray data; 572 QByteArray data;
573 while ( !ds.atEnd() ) { 573 while ( !ds.atEnd() ) {
574 ds >> channel >> message >> data; 574 ds >> channel >> message >> data;
575 d->enqueueQCop( channel, message, data ); 575 d->enqueueQCop( channel, message, data );
576 } 576 }
577 577
578 flock( f.handle(), LOCK_UN ); 578 flock( f.handle(), LOCK_UN );
579 f.close(); 579 f.close();
580 f.remove(); 580 f.remove();
581 } 581 }
582 582
583 for ( int a = 0; a < argc; a++ ) { 583 for ( int a = 0; a < argc; a++ ) {
584 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 584 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
585 argv[ a ] = argv[ a + 1 ]; 585 argv[ a ] = argv[ a + 1 ];
586 a++; 586 a++;
587 d->preloaded = TRUE; 587 d->preloaded = TRUE;
588 argc -= 1; 588 argc -= 1;
589 } 589 }
590 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 590 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
591 argv[ a ] = argv[ a + 1 ]; 591 argv[ a ] = argv[ a + 1 ];
592 a++; 592 a++;
593 d->preloaded = TRUE; 593 d->preloaded = TRUE;
594 d->forceshow = TRUE; 594 d->forceshow = TRUE;
595 argc -= 1; 595 argc -= 1;
596 } 596 }
597 } 597 }
598 598
599 /* overide stored arguments */ 599 /* overide stored arguments */
600 setArgs( argc, argv ); 600 setArgs( argc, argv );
601 601
602#endif 602#endif
603 603
604 // qwsSetDecoration( new QPEDecoration() ); 604 // qwsSetDecoration( new QPEDecoration() );
605 605
606#ifndef QT_NO_TRANSLATION 606#ifndef QT_NO_TRANSLATION
607 607
608 QStringList langs = Global::languageList(); 608 QStringList langs = Global::languageList();
609 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) { 609 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) {
610 QString lang = *it; 610 QString lang = *it;
611 611
612 installTranslation( lang + "/libopie.qm"); 612 installTranslation( lang + "/libopie.qm");
613 installTranslation( lang + "/libqpe.qm" ); 613 installTranslation( lang + "/libqpe.qm" );
614 installTranslation( lang + "/" + d->appName + ".qm" ); 614 installTranslation( lang + "/" + d->appName + ".qm" );
615 615
616 616
617 //###language/font hack; should look it up somewhere 617 //###language/font hack; should look it up somewhere
618#ifdef QWS 618#ifdef QWS
619 619
620 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 620 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
621 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 621 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
622 setFont( fn ); 622 setFont( fn );
623 } 623 }
624#endif 624#endif
625 625
626 } 626 }
627#endif 627#endif
628 628
629 applyStyle(); 629 applyStyle();
630 630
631 if ( type() == GuiServer ) { 631 if ( type() == GuiServer ) {
632 setVolume(); 632 setVolume();
633 } 633 }
634 634
635 installEventFilter( this ); 635 installEventFilter( this );
636 636
637 QPEMenuToolFocusManager::initialize(); 637 QPEMenuToolFocusManager::initialize();
638 638
639#ifdef QT_NO_QWS_CURSOR 639#ifdef QT_NO_QWS_CURSOR
640 // if we have no cursor, probably don't want tooltips 640 // if we have no cursor, probably don't want tooltips
641 QToolTip::setEnabled( FALSE ); 641 QToolTip::setEnabled( FALSE );
642#endif 642#endif
643} 643}
644 644
645static QPtrDict<void>* inputMethodDict = 0; 645static QPtrDict<void>* inputMethodDict = 0;
646static void createInputMethodDict() 646static void createInputMethodDict()
647{ 647{
648 if ( !inputMethodDict ) 648 if ( !inputMethodDict )
649 inputMethodDict = new QPtrDict<void>; 649 inputMethodDict = new QPtrDict<void>;
650} 650}
651 651
652/*! 652/*!
653 Returns the currently set hint to the system as to whether 653 Returns the currently set hint to the system as to whether
654 widget \a w has any use for text input methods. 654 widget \a w has any use for text input methods.
655 655
656 656
657 \sa setInputMethodHint() InputMethodHint 657 \sa setInputMethodHint() InputMethodHint
658*/ 658*/
659QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 659QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
660{ 660{
661 if ( inputMethodDict && w ) 661 if ( inputMethodDict && w )
662 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 662 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
663 return Normal; 663 return Normal;
664} 664}
665 665
666/*! 666/*!
667 \enum QPEApplication::InputMethodHint 667 \enum QPEApplication::InputMethodHint
668 668
669 \value Normal the application sometimes needs text input (the default). 669 \value Normal the application sometimes needs text input (the default).
670 \value AlwaysOff the application never needs text input. 670 \value AlwaysOff the application never needs text input.
671 \value AlwaysOn the application always needs text input. 671 \value AlwaysOn the application always needs text input.
672*/ 672*/
673 673
674/*! 674/*!
675 Hints to the system that widget \a w has use for text input methods 675 Hints to the system that widget \a w has use for text input methods
676 as specified by \a mode. 676 as specified by \a mode.
677 677
678 \sa inputMethodHint() InputMethodHint 678 \sa inputMethodHint() InputMethodHint
679*/ 679*/
680void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 680void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
681{ 681{
682 createInputMethodDict(); 682 createInputMethodDict();
683 if ( mode == Normal ) { 683 if ( mode == Normal ) {
684 inputMethodDict->remove 684 inputMethodDict->remove
685 ( w ); 685 ( w );
686 } 686 }
687 else { 687 else {
688 inputMethodDict->insert( w, ( void* ) mode ); 688 inputMethodDict->insert( w, ( void* ) mode );
689 } 689 }
690} 690}
691 691
692class HackDialog : public QDialog 692class HackDialog : public QDialog
693{ 693{
694public: 694public:
695 void acceptIt() 695 void acceptIt()
696 { 696 {
697 accept(); 697 accept();
698 } 698 }
699 void rejectIt() 699 void rejectIt()
700 { 700 {
701 reject(); 701 reject();
702 } 702 }
703}; 703};
704 704
705 705
706void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 706void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
707{ 707{
708 // specialised actions for certain widgets. May want to 708 // specialised actions for certain widgets. May want to
709 // add more stuff here. 709 // add more stuff here.
710 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 710 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
711 && activePopupWidget() ->parentWidget() 711 && activePopupWidget() ->parentWidget()
712 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 712 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
713 key = Qt::Key_Return; 713 key = Qt::Key_Return;
714 714
715 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 715 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
716 key = Qt::Key_Return; 716 key = Qt::Key_Return;
717 717
718#ifdef QWS 718#ifdef QWS
719 719
720 ke->simpleData.keycode = key; 720 ke->simpleData.keycode = key;
721#endif 721#endif
722} 722}
723 723
724class HackWidget : public QWidget 724class HackWidget : public QWidget
725{ 725{
726public: 726public:
727 bool needsOk() 727 bool needsOk()
728 { 728 {
729 return ( getWState() & WState_Reserved1 ); 729 return ( getWState() & WState_Reserved1 );
730 } 730 }
731}; 731};
732 732
733/*! 733/*!
734 \internal 734 \internal
735*/ 735*/
736 736
737#ifdef QWS 737#ifdef QWS
738bool QPEApplication::qwsEventFilter( QWSEvent * e ) 738bool QPEApplication::qwsEventFilter( QWSEvent * e )
739{ 739{
740 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 740 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
741 if ( qApp->type() != QApplication::GuiServer ) { 741 if ( qApp->type() != QApplication::GuiServer ) {
742 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 742 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
743 e << d->appName; 743 e << d->appName;
744 } 744 }
745 d->notbusysent = TRUE; 745 d->notbusysent = TRUE;
746 } 746 }
747 if ( type() == GuiServer ) { 747 if ( type() == GuiServer ) {
748 switch ( e->type ) { 748 switch ( e->type ) {
749 case QWSEvent::Mouse: 749 case QWSEvent::Mouse:
750 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 750 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
751 emit clientMoused(); 751 emit clientMoused();
752 break; 752 break;
753 default: 753 default:
754 break; 754 break;
755 } 755 }
756 } 756 }
757 if ( e->type == QWSEvent::Key ) { 757 if ( e->type == QWSEvent::Key ) {
758 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 758 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
759 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 759 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
760 // Use special "OK" key to press "OK" on top level widgets 760 // Use special "OK" key to press "OK" on top level widgets
761 QWidget * active = activeWindow(); 761 QWidget * active = activeWindow();
762 QWidget *popup = 0; 762 QWidget *popup = 0;
763 if ( active && active->isPopup() ) { 763 if ( active && active->isPopup() ) {
764 popup = active; 764 popup = active;
765 active = active->parentWidget(); 765 active = active->parentWidget();
766 } 766 }
767 if ( active && ( int ) active->winId() == ke->simpleData.window && 767 if ( active && ( int ) active->winId() == ke->simpleData.window &&
768 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 768 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
769 if ( ke->simpleData.is_press ) { 769 if ( ke->simpleData.is_press ) {
770 if ( popup ) 770 if ( popup )
771 popup->close(); 771 popup->close();
772 if ( active->inherits( "QDialog" ) ) { 772 if ( active->inherits( "QDialog" ) ) {
773 HackDialog * d = ( HackDialog * ) active; 773 HackDialog * d = ( HackDialog * ) active;
774 d->acceptIt(); 774 d->acceptIt();
775 return TRUE; 775 return TRUE;
776 } 776 }
777 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 777 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
778 QSignal s; 778 QSignal s;
779 s.connect( active, SLOT( accept() ) ); 779 s.connect( active, SLOT( accept() ) );
780 s.activate(); 780 s.activate();
781 } 781 }
782 else { 782 else {
783 // do the same as with the select key: Map to the default action of the widget: 783 // do the same as with the select key: Map to the default action of the widget:
784 mapToDefaultAction( ke, Qt::Key_Return ); 784 mapToDefaultAction( ke, Qt::Key_Return );
785 } 785 }
786 } 786 }
787 } 787 }
788 } 788 }
789 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 789 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
790 // Use special "select" key to do whatever default action a widget has 790 // Use special "select" key to do whatever default action a widget has
791 mapToDefaultAction( ke, Qt::Key_Space ); 791 mapToDefaultAction( ke, Qt::Key_Space );
792 } 792 }
793 else if ( ke->simpleData.keycode == Qt::Key_Escape && 793 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
794 ke->simpleData.is_press ) { 794 ke->simpleData.is_press ) {
795 // Escape key closes app if focus on toplevel 795 // Escape key closes app if focus on toplevel
796 QWidget * active = activeWindow(); 796 QWidget * active = activeWindow();
797 if ( active && active->testWFlags( WType_TopLevel ) && 797 if ( active && active->testWFlags( WType_TopLevel ) &&
798 ( int ) active->winId() == ke->simpleData.window && 798 ( int ) active->winId() == ke->simpleData.window &&
799 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 799 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
800 if ( active->inherits( "QDialog" ) ) { 800 if ( active->inherits( "QDialog" ) ) {
801 HackDialog * d = ( HackDialog * ) active; 801 HackDialog * d = ( HackDialog * ) active;
802 d->rejectIt(); 802 d->rejectIt();
803 return TRUE; 803 return TRUE;
804 } 804 }
805 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 805 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
806 active->close(); 806 active->close();
807 } 807 }
808 } 808 }
809 } 809 }
810 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { 810 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) {
811 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) 811 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... ))
812 // but we cannot access libopie function within libqpe :( 812 // but we cannot access libopie function within libqpe :(
813 813
814 QWidget * active = activeWindow ( ); 814 QWidget * active = activeWindow ( );
815 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { 815 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) {
816 if ( d-> kbgrabbed ) { // we grabbed the keyboard 816 if ( d-> kbgrabbed ) { // we grabbed the keyboard
817 QChar ch ( ke-> simpleData.unicode ); 817 QChar ch ( ke-> simpleData.unicode );
818 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, 818 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease,
819 ke-> simpleData.keycode, 819 ke-> simpleData.keycode,
820 ch. latin1 ( ), 820 ch. latin1 ( ),
821 ke-> simpleData.modifiers, 821 ke-> simpleData.modifiers,
822 QString ( ch ), 822 QString ( ch ),
823 ke-> simpleData.is_auto_repeat, 1 ); 823 ke-> simpleData.is_auto_repeat, 1 );
824 824
825 QObject *which = QWidget::keyboardGrabber ( ); 825 QObject *which = QWidget::keyboardGrabber ( );
826 if ( !which ) 826 if ( !which )
827 which = QApplication::focusWidget ( ); 827 which = QApplication::focusWidget ( );
828 if ( !which ) 828 if ( !which )
829 which = QApplication::activeWindow ( ); 829 which = QApplication::activeWindow ( );
830 if ( !which ) 830 if ( !which )
831 which = qApp; 831 which = qApp;
832 832
833 QApplication::sendEvent ( which, &qke ); 833 QApplication::sendEvent ( which, &qke );
834 } 834 }
835 else { // we didn't grab the keyboard, so send the event to the launcher 835 else { // we didn't grab the keyboard, so send the event to the launcher
836 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); 836 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" );
837 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat ); 837 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat );
838 } 838 }
839 } 839 }
840 return true; 840 return true;
841 } 841 }
842 } 842 }
843 if ( e->type == QWSEvent::Focus ) { 843 if ( e->type == QWSEvent::Focus ) {
844 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 844 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
845 if ( !fe->simpleData.get_focus ) { 845 if ( !fe->simpleData.get_focus ) {
846 QWidget * active = activeWindow(); 846 QWidget * active = activeWindow();
847 while ( active && active->isPopup() ) { 847 while ( active && active->isPopup() ) {
848 active->close(); 848 active->close();
849 active = activeWindow(); 849 active = activeWindow();
850 } 850 }
851 } 851 }
852 else { 852 else {
853 // make sure our modal widget is ALWAYS on top 853 // make sure our modal widget is ALWAYS on top
854 QWidget *topm = activeModalWidget(); 854 QWidget *topm = activeModalWidget();
855 if ( topm ) { 855 if ( topm ) {
856 topm->raise(); 856 topm->raise();
857 } 857 }
858 } 858 }
859 if ( fe->simpleData.get_focus && inputMethodDict ) { 859 if ( fe->simpleData.get_focus && inputMethodDict ) {
860 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 860 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
861 if ( m == AlwaysOff ) 861 if ( m == AlwaysOff )
862 Global::hideInputMethod(); 862 Global::hideInputMethod();
863 if ( m == AlwaysOn ) 863 if ( m == AlwaysOn )
864 Global::showInputMethod(); 864 Global::showInputMethod();
865 } 865 }
866 } 866 }
867 867
868 868
869 return QApplication::qwsEventFilter( e ); 869 return QApplication::qwsEventFilter( e );
870} 870}
871#endif 871#endif
872 872
873/*! 873/*!
874 Destroys the QPEApplication. 874 Destroys the QPEApplication.
875*/ 875*/
876QPEApplication::~QPEApplication() 876QPEApplication::~QPEApplication()
877{ 877{
878 ungrabKeyboard(); 878 ungrabKeyboard();
879#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 879#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
880 // Need to delete QCopChannels early, since the display will 880 // Need to delete QCopChannels early, since the display will
881 // be gone by the time we get to ~QObject(). 881 // be gone by the time we get to ~QObject().
882 delete sysChannel; 882 delete sysChannel;
883 delete pidChannel; 883 delete pidChannel;
884#endif 884#endif
885 885
886 delete d; 886 delete d;
887} 887}
888 888
889/*! 889/*!
890 Returns <tt>$OPIEDIR/</tt>. 890 Returns <tt>$OPIEDIR/</tt>.
891*/ 891*/
892QString QPEApplication::qpeDir() 892QString QPEApplication::qpeDir()
893{ 893{
894 const char * base = getenv( "OPIEDIR" ); 894 const char * base = getenv( "OPIEDIR" );
895 if ( base ) 895 if ( base )
896 return QString( base ) + "/"; 896 return QString( base ) + "/";
897 897
898 return QString( "../" ); 898 return QString( "../" );
899} 899}
900 900
901/*! 901/*!
902 Returns the user's current Document directory. There is a trailing "/". 902 Returns the user's current Document directory. There is a trailing "/".
903 .. well, it does now,, and there's no trailing '/' 903 .. well, it does now,, and there's no trailing '/'
904*/ 904*/
905QString QPEApplication::documentDir() 905QString QPEApplication::documentDir()
906{ 906{
907 const char* base = getenv( "HOME"); 907 const char* base = getenv( "HOME");
908 if ( base ) 908 if ( base )
909 return QString( base ) + "/Documents"; 909 return QString( base ) + "/Documents";
910 910
911 return QString( "../Documents" ); 911 return QString( "../Documents" );
912} 912}
913 913
914static int deforient = -1; 914static int deforient = -1;
915 915
916/*! 916/*!
917 \internal 917 \internal
918*/ 918*/
919int QPEApplication::defaultRotation() 919int QPEApplication::defaultRotation()
920{ 920{
921 if ( deforient < 0 ) { 921 if ( deforient < 0 ) {
922 QString d = getenv( "QWS_DISPLAY" ); 922 QString d = getenv( "QWS_DISPLAY" );
923 if ( d.contains( "Rot90" ) ) { 923 if ( d.contains( "Rot90" ) ) {
924 deforient = 90; 924 deforient = 90;
925 } 925 }
926 else if ( d.contains( "Rot180" ) ) { 926 else if ( d.contains( "Rot180" ) ) {
927 deforient = 180; 927 deforient = 180;
928 } 928 }
929 else if ( d.contains( "Rot270" ) ) { 929 else if ( d.contains( "Rot270" ) ) {
930 deforient = 270; 930 deforient = 270;
931 } 931 }
932 else { 932 else {
933 deforient = 0; 933 deforient = 0;
934 } 934 }
935 } 935 }
936 return deforient; 936 return deforient;
937} 937}
938 938
939/*! 939/*!
940 \internal 940 \internal
941*/ 941*/
942void QPEApplication::setDefaultRotation( int r ) 942void QPEApplication::setDefaultRotation( int r )
943{ 943{
944 if ( qApp->type() == GuiServer ) { 944 if ( qApp->type() == GuiServer ) {
945 deforient = r; 945 deforient = r;
946 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 946 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
947 Config config("qpe"); 947 Config config("qpe");
948 config.setGroup( "Rotation" ); 948 config.setGroup( "Rotation" );
949 config.writeEntry( "Rot", r ); 949 config.writeEntry( "Rot", r );
950 } 950 }
951 else { 951 else {
952#ifndef QT_NO_COP 952#ifndef QT_NO_COP
953 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 953 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
954 e << r; 954 e << r;
955 } 955 }
956#endif 956#endif
957 957
958 } 958 }
959} 959}
960 960
961 961
962/*! 962/*!
963 \internal 963 \internal
964*/ 964*/
965void QPEApplication::applyStyle() 965void QPEApplication::applyStyle()
966{ 966{
967 Config config( "qpe" ); 967 Config config( "qpe" );
968 config.setGroup( "Appearance" ); 968 config.setGroup( "Appearance" );
969 969
970 #if QT_VERSION > 233 970 #if QT_VERSION > 233
971 // don't block ourselves ... 971 // don't block ourselves ...
972 Opie::force_appearance = 0; 972 Opie::force_appearance = 0;
973 973
974 static QString appname = Opie::binaryName ( ); 974 static QString appname = Opie::binaryName ( );
975 975
976 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 976 QStringList ex = config. readListEntry ( "NoStyle", ';' );
977 int nostyle = 0; 977 int nostyle = 0;
978 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 978 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
979 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 979 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
980 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 980 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
981 break; 981 break;
982 } 982 }
983 } 983 }
984 984
985 // Widget style 985 // Widget style
986 QString style = config.readEntry( "Style", "Light" ); 986 QString style = config.readEntry( "Style", "Light" );
987 987
988 // don't set a custom style 988 // don't set a custom style
989 if ( nostyle & Opie::Force_Style ) 989 if ( nostyle & Opie::Force_Style )
990 style = "Light"; 990 style = "Light";
991 991
992 internalSetStyle ( style ); 992 internalSetStyle ( style );
993 993
994 // Colors 994 // Colors
995 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); 995 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) );
996 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); 996 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) );
997 QPalette pal( btncolor, bgcolor ); 997 QPalette pal( btncolor, bgcolor );
998 QString color = config.readEntry( "Highlight", "#800000" ); 998 QString color = config.readEntry( "Highlight", "#800000" );
999 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 999 pal.setColor( QColorGroup::Highlight, QColor( color ) );
1000 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 1000 color = config.readEntry( "HighlightedText", "#FFFFFF" );
1001 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 1001 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
1002 color = config.readEntry( "Text", "#000000" ); 1002 color = config.readEntry( "Text", "#000000" );
1003 pal.setColor( QColorGroup::Text, QColor( color ) ); 1003 pal.setColor( QColorGroup::Text, QColor( color ) );
1004 color = config.readEntry( "ButtonText", "#000000" ); 1004 color = config.readEntry( "ButtonText", "#000000" );
1005 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 1005 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
1006 color = config.readEntry( "Base", "#FFFFFF" ); 1006 color = config.readEntry( "Base", "#FFFFFF" );
1007 pal.setColor( QColorGroup::Base, QColor( color ) ); 1007 pal.setColor( QColorGroup::Base, QColor( color ) );
1008 1008
1009 pal.setColor( QPalette::Disabled, QColorGroup::Text, 1009 pal.setColor( QPalette::Disabled, QColorGroup::Text,
1010 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 1010 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
1011 1011
1012 setPalette( pal, TRUE ); 1012 setPalette( pal, TRUE );
1013 1013
1014 // Window Decoration 1014 // Window Decoration
1015 QString dec = config.readEntry( "Decoration", "Qtopia" ); 1015 QString dec = config.readEntry( "Decoration", "Qtopia" );
1016 1016
1017 // don't set a custom deco 1017 // don't set a custom deco
1018 if ( nostyle & Opie::Force_Decoration ) 1018 if ( nostyle & Opie::Force_Decoration )
1019 dec = ""; 1019 dec = "";
1020 1020
1021 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle); 1021 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
1022 1022
1023 if ( dec != d->decorationName ) { 1023 if ( dec != d->decorationName ) {
1024 qwsSetDecoration( new QPEDecoration( dec ) ); 1024 qwsSetDecoration( new QPEDecoration( dec ) );
1025 d->decorationName = dec; 1025 d->decorationName = dec;
1026 } 1026 }
1027 1027
1028 // Font 1028 // Font
1029 QString ff = config.readEntry( "FontFamily", font().family() ); 1029 QString ff = config.readEntry( "FontFamily", font().family() );
1030 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 1030 int fs = config.readNumEntry( "FontSize", font().pointSize() );
1031 1031
1032 // don't set a custom font 1032 // don't set a custom font
1033 if ( nostyle & Opie::Force_Font ) { 1033 if ( nostyle & Opie::Force_Font ) {
1034 ff = "Vera"; 1034 ff = "Vera";
1035 fs = 10; 1035 fs = 10;
1036 } 1036 }
1037 1037
1038 setFont ( QFont ( ff, fs ), true ); 1038 setFont ( QFont ( ff, fs ), true );
1039 1039
1040 // revert to global blocking policy ... 1040 // revert to global blocking policy ...
1041 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None; 1041 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None;
1042 Opie::force_appearance &= ~nostyle; 1042 Opie::force_appearance &= ~nostyle;
1043 #endif 1043 #endif
1044} 1044}
1045 1045
1046void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1046void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1047{ 1047{
1048#ifdef Q_WS_QWS 1048#ifdef Q_WS_QWS
1049 QDataStream stream( data, IO_ReadOnly ); 1049 QDataStream stream( data, IO_ReadOnly );
1050 if ( msg == "applyStyle()" ) { 1050 if ( msg == "applyStyle()" ) {
1051 applyStyle(); 1051 applyStyle();
1052 } 1052 }
1053 else if ( msg == "toggleApplicationMenu()" ) { 1053 else if ( msg == "toggleApplicationMenu()" ) {
1054 QWidget *active = activeWindow ( ); 1054 QWidget *active = activeWindow ( );
1055 1055
1056 if ( active ) { 1056 if ( active ) {
1057 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( ); 1057 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( );
1058 bool oldactive = man-> isActive ( ); 1058 bool oldactive = man-> isActive ( );
1059 1059
1060 man-> setActive( !man-> isActive() ); 1060 man-> setActive( !man-> isActive() );
1061 1061
1062 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu 1062 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu
1063 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" ); 1063 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" );
1064 } 1064 }
1065 } 1065 }
1066 } 1066 }
1067 else if ( msg == "setDefaultRotation(int)" ) { 1067 else if ( msg == "setDefaultRotation(int)" ) {
1068 if ( type() == GuiServer ) { 1068 if ( type() == GuiServer ) {
1069 int r; 1069 int r;
1070 stream >> r; 1070 stream >> r;
1071 setDefaultRotation( r ); 1071 setDefaultRotation( r );
1072 } 1072 }
1073 } 1073 }
1074 else if ( msg == "setCurrentRotation(int)" ) { 1074 else if ( msg == "setCurrentRotation(int)" ) {
1075 int r; 1075 int r;
1076 stream >> r; 1076 stream >> r;
1077 setCurrentRotation( r ); 1077 setCurrentRotation( r );
1078 } 1078 }
1079 else if ( msg == "shutdown()" ) { 1079 else if ( msg == "shutdown()" ) {
1080 if ( type() == GuiServer ) 1080 if ( type() == GuiServer )
1081 shutdown(); 1081 shutdown();
1082 } 1082 }
1083 else if ( msg == "quit()" ) { 1083 else if ( msg == "quit()" ) {
1084 if ( type() != GuiServer ) 1084 if ( type() != GuiServer )
1085 tryQuit(); 1085 tryQuit();
1086 } 1086 }
1087 else if ( msg == "forceQuit()" ) { 1087 else if ( msg == "forceQuit()" ) {
1088 if ( type() != GuiServer ) 1088 if ( type() != GuiServer )
1089 quit(); 1089 quit();
1090 } 1090 }
1091 else if ( msg == "restart()" ) { 1091 else if ( msg == "restart()" ) {
1092 if ( type() == GuiServer ) 1092 if ( type() == GuiServer )
1093 restart(); 1093 restart();
1094 } 1094 }
1095 else if ( msg == "language(QString)" ) { 1095 else if ( msg == "language(QString)" ) {
1096 if ( type() == GuiServer ) { 1096 if ( type() == GuiServer ) {
1097 QString l; 1097 QString l;
1098 stream >> l; 1098 stream >> l;
1099 QString cl = getenv( "LANG" ); 1099 QString cl = getenv( "LANG" );
1100 if ( cl != l ) { 1100 if ( cl != l ) {
1101 if ( l.isNull() ) 1101 if ( l.isNull() )
1102 unsetenv( "LANG" ); 1102 unsetenv( "LANG" );
1103 else 1103 else
1104 setenv( "LANG", l.latin1(), 1 ); 1104 setenv( "LANG", l.latin1(), 1 );
1105 restart(); 1105 restart();
1106 } 1106 }
1107 } 1107 }
1108 } 1108 }
1109 else if ( msg == "timeChange(QString)" ) { 1109 else if ( msg == "timeChange(QString)" ) {
1110 QString t; 1110 QString t;
1111 stream >> t; 1111 stream >> t;
1112 if ( t.isNull() ) 1112 if ( t.isNull() )
1113 unsetenv( "TZ" ); 1113 unsetenv( "TZ" );
1114 else 1114 else
1115 setenv( "TZ", t.latin1(), 1 ); 1115 setenv( "TZ", t.latin1(), 1 );
1116 // emit the signal so everyone else knows... 1116 // emit the signal so everyone else knows...
1117 emit timeChanged(); 1117 emit timeChanged();
1118 } 1118 }
1119 else if ( msg == "execute(QString)" ) { 1119 else if ( msg == "execute(QString)" ) {
1120 if ( type() == GuiServer ) { 1120 if ( type() == GuiServer ) {
1121 QString t; 1121 QString t;
1122 stream >> t; 1122 stream >> t;
1123 Global::execute( t ); 1123 Global::execute( t );
1124 } 1124 }
1125 } 1125 }
1126 else if ( msg == "execute(QString,QString)" ) { 1126 else if ( msg == "execute(QString,QString)" ) {
1127 if ( type() == GuiServer ) { 1127 if ( type() == GuiServer ) {
1128 QString t, d; 1128 QString t, d;
1129 stream >> t >> d; 1129 stream >> t >> d;
1130 Global::execute( t, d ); 1130 Global::execute( t, d );
1131 } 1131 }
1132 } 1132 }
1133 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1133 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1134 if ( type() == GuiServer ) { 1134 if ( type() == GuiServer ) {
1135 QDateTime when; 1135 QDateTime when;
1136 QCString channel, message; 1136 QCString channel, message;
1137 int data; 1137 int data;
1138 stream >> when >> channel >> message >> data; 1138 stream >> when >> channel >> message >> data;
1139 AlarmServer::addAlarm( when, channel, message, data ); 1139 AlarmServer::addAlarm( when, channel, message, data );
1140 } 1140 }
1141 } 1141 }
1142 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1142 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1143 if ( type() == GuiServer ) { 1143 if ( type() == GuiServer ) {
1144 QDateTime when; 1144 QDateTime when;
1145 QCString channel, message; 1145 QCString channel, message;
1146 int data; 1146 int data;
1147 stream >> when >> channel >> message >> data; 1147 stream >> when >> channel >> message >> data;
1148 AlarmServer::deleteAlarm( when, channel, message, data ); 1148 AlarmServer::deleteAlarm( when, channel, message, data );
1149 } 1149 }
1150 } 1150 }
1151 else if ( msg == "clockChange(bool)" ) { 1151 else if ( msg == "clockChange(bool)" ) {
1152 int tmp; 1152 int tmp;
1153 stream >> tmp; 1153 stream >> tmp;
1154 emit clockChanged( tmp ); 1154 emit clockChanged( tmp );
1155 } 1155 }
1156 else if ( msg == "weekChange(bool)" ) { 1156 else if ( msg == "weekChange(bool)" ) {
1157 int tmp; 1157 int tmp;
1158 stream >> tmp; 1158 stream >> tmp;
1159 emit weekChanged( tmp ); 1159 emit weekChanged( tmp );
1160 } 1160 }
1161 else if ( msg == "setDateFormat(DateFormat)" ) { 1161 else if ( msg == "setDateFormat(DateFormat)" ) {
1162 DateFormat tmp; 1162 DateFormat tmp;
1163 stream >> tmp; 1163 stream >> tmp;
1164 emit dateFormatChanged( tmp ); 1164 emit dateFormatChanged( tmp );
1165 } 1165 }
1166 else if ( msg == "setVolume(int,int)" ) { 1166 else if ( msg == "setVolume(int,int)" ) {
1167 int t, v; 1167 int t, v;
1168 stream >> t >> v; 1168 stream >> t >> v;
1169 setVolume( t, v ); 1169 setVolume( t, v );
1170 emit volumeChanged( muted ); 1170 emit volumeChanged( muted );
1171 } 1171 }
1172 else if ( msg == "volumeChange(bool)" ) { 1172 else if ( msg == "volumeChange(bool)" ) {
1173 stream >> muted; 1173 stream >> muted;
1174 setVolume(); 1174 setVolume();
1175 emit volumeChanged( muted ); 1175 emit volumeChanged( muted );
1176 } 1176 }
1177 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1177 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1178 int t, v; 1178 int t, v;
1179 stream >> t >> v; 1179 stream >> t >> v;
1180 setMic( t, v ); 1180 setMic( t, v );
1181 emit micChanged( micMuted ); 1181 emit micChanged( micMuted );
1182 } 1182 }
1183 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1183 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1184 stream >> micMuted; 1184 stream >> micMuted;
1185 setMic(); 1185 setMic();
1186 emit micChanged( micMuted ); 1186 emit micChanged( micMuted );
1187 } 1187 }
1188 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1188 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1189 int t, v; 1189 int t, v;
1190 stream >> t >> v; 1190 stream >> t >> v;
1191 setBass( t, v ); 1191 setBass( t, v );
1192 } 1192 }
1193 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1193 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1194 setBass(); 1194 setBass();
1195 } 1195 }
1196 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1196 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1197 int t, v; 1197 int t, v;
1198 stream >> t >> v; 1198 stream >> t >> v;
1199 setTreble( t, v ); 1199 setTreble( t, v );
1200 } 1200 }
1201 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1201 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1202 setTreble(); 1202 setTreble();
1203 } 1203 }
1204 1204
1205 1205
1206 1206
1207#endif 1207#endif
1208} 1208}
1209 1209
1210/*! 1210/*!
1211 \internal 1211 \internal
1212*/ 1212*/
1213bool QPEApplication::raiseAppropriateWindow() 1213bool QPEApplication::raiseAppropriateWindow()
1214{ 1214{
1215 bool r = FALSE; 1215 bool r = FALSE;
1216 // ########## raise()ing main window should raise and set active 1216 // ########## raise()ing main window should raise and set active
1217 // ########## it and then all childen. This belongs in Qt/Embedded 1217 // ########## it and then all childen. This belongs in Qt/Embedded
1218 QWidget *top = d->qpe_main_widget; 1218 QWidget *top = d->qpe_main_widget;
1219 if ( !top ) 1219 if ( !top )
1220 top = mainWidget(); 1220 top = mainWidget();
1221 if ( top && d->keep_running ) { 1221 if ( top && d->keep_running ) {
1222 if ( top->isVisible() ) 1222 if ( top->isVisible() )
1223 r = TRUE; 1223 r = TRUE;
1224 else if (d->preloaded) { 1224 else if (d->preloaded) {
1225 // We are preloaded and not visible.. pretend we just started.. 1225 // We are preloaded and not visible.. pretend we just started..
1226 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1226 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1227 e << d->appName; 1227 e << d->appName;
1228 } 1228 }
1229 1229
1230 d->show_mx(top, d->nomaximize); 1230 d->show_mx(top, d->nomaximize);
1231 top->raise(); 1231 top->raise();
1232 top->setActiveWindow(); 1232 top->setActiveWindow();
1233 } 1233 }
1234 QWidget *topm = activeModalWidget(); 1234 QWidget *topm = activeModalWidget();
1235 if ( topm && topm != top ) { 1235 if ( topm && topm != top ) {
1236 topm->show(); 1236 topm->show();
1237 topm->raise(); 1237 topm->raise();
1238 topm->setActiveWindow(); 1238 topm->setActiveWindow();
1239 // If we haven't already handled the fastAppShowing message 1239 // If we haven't already handled the fastAppShowing message
1240 if (!top && d->preloaded) { 1240 if (!top && d->preloaded) {
1241 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1241 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1242 e << d->appName; 1242 e << d->appName;
1243 } 1243 }
1244 r = FALSE; 1244 r = FALSE;
1245 } 1245 }
1246 return r; 1246 return r;
1247} 1247}
1248 1248
1249void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1249void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1250{ 1250{
1251#ifdef Q_WS_QWS 1251#ifdef Q_WS_QWS
1252 1252
1253 if ( msg == "quit()" ) { 1253 if ( msg == "quit()" ) {
1254 tryQuit(); 1254 tryQuit();
1255 } 1255 }
1256 else if ( msg == "quitIfInvisible()" ) { 1256 else if ( msg == "quitIfInvisible()" ) {
1257 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1257 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1258 quit(); 1258 quit();
1259 } 1259 }
1260 else if ( msg == "close()" ) { 1260 else if ( msg == "close()" ) {
1261 hideOrQuit(); 1261 hideOrQuit();
1262 } 1262 }
1263 else if ( msg == "disablePreload()" ) { 1263 else if ( msg == "disablePreload()" ) {
1264 d->preloaded = FALSE; 1264 d->preloaded = FALSE;
1265 d->keep_running = TRUE; 1265 d->keep_running = TRUE;
1266 /* so that quit will quit */ 1266 /* so that quit will quit */
1267 } 1267 }
1268 else if ( msg == "enablePreload()" ) { 1268 else if ( msg == "enablePreload()" ) {
1269 if (d->qpe_main_widget) 1269 if (d->qpe_main_widget)
1270 d->preloaded = TRUE; 1270 d->preloaded = TRUE;
1271 d->keep_running = TRUE; 1271 d->keep_running = TRUE;
1272 /* so next quit won't quit */ 1272 /* so next quit won't quit */
1273 } 1273 }
1274 else if ( msg == "raise()" ) { 1274 else if ( msg == "raise()" ) {
1275 d->keep_running = TRUE; 1275 d->keep_running = TRUE;
1276 d->notbusysent = FALSE; 1276 d->notbusysent = FALSE;
1277 raiseAppropriateWindow(); 1277 raiseAppropriateWindow();
1278 // Tell the system we're still chugging along... 1278 // Tell the system we're still chugging along...
1279 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1279 QCopEnvelope e("QPE/System", "appRaised(QString)");
1280 e << d->appName; 1280 e << d->appName;
1281 } 1281 }
1282 else if ( msg == "flush()" ) { 1282 else if ( msg == "flush()" ) {
1283 emit flush(); 1283 emit flush();
1284 // we need to tell the desktop 1284 // we need to tell the desktop
1285 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1285 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1286 e << d->appName; 1286 e << d->appName;
1287 } 1287 }
1288 else if ( msg == "reload()" ) { 1288 else if ( msg == "reload()" ) {
1289 emit reload(); 1289 emit reload();
1290 } 1290 }
1291 else if ( msg == "setDocument(QString)" ) { 1291 else if ( msg == "setDocument(QString)" ) {
1292 d->keep_running = TRUE; 1292 d->keep_running = TRUE;
1293 QDataStream stream( data, IO_ReadOnly ); 1293 QDataStream stream( data, IO_ReadOnly );
1294 QString doc; 1294 QString doc;
1295 stream >> doc; 1295 stream >> doc;
1296 QWidget *mw = mainWidget(); 1296 QWidget *mw = mainWidget();
1297 if ( !mw ) 1297 if ( !mw )
1298 mw = d->qpe_main_widget; 1298 mw = d->qpe_main_widget;
1299 if ( mw ) 1299 if ( mw )
1300 Global::setDocument( mw, doc ); 1300 Global::setDocument( mw, doc );
1301 } 1301 }
1302 else if ( msg == "nextView()" ) { 1302 else if ( msg == "nextView()" ) {
1303 qDebug("got nextView()"); 1303 qDebug("got nextView()");
1304 /* 1304 /*
1305 if ( raiseAppropriateWindow() ) 1305 if ( raiseAppropriateWindow() )
1306 */ 1306 */
1307 emit appMessage( msg, data); 1307 emit appMessage( msg, data);
1308 } 1308 }
1309 else { 1309 else {
1310 emit appMessage( msg, data); 1310 emit appMessage( msg, data);
1311 } 1311 }
1312 1312
1313#endif 1313#endif
1314} 1314}
1315 1315
1316 1316
1317/*! 1317/*!
1318 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1318 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1319 consider passing TRUE for \a nomaximize rather than the default FALSE. 1319 consider passing TRUE for \a nomaximize rather than the default FALSE.
1320 1320
1321 \sa showMainDocumentWidget() 1321 \sa showMainDocumentWidget()
1322*/ 1322*/
1323void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) 1323void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
1324{ 1324{
1325 d->show(mw, nomaximize ); 1325 d->show(mw, nomaximize );
1326} 1326}
1327 1327
1328/*! 1328/*!
1329 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1329 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1330 consider passing TRUE for \a nomaximize rather than the default FALSE. 1330 consider passing TRUE for \a nomaximize rather than the default FALSE.
1331 1331
1332 This calls designates the application as 1332 This calls designates the application as
1333 a \link docwidget.html document-oriented\endlink application. 1333 a \link docwidget.html document-oriented\endlink application.
1334 1334
1335 The \a mw widget \e must have this slot: setDocument(const QString&). 1335 The \a mw widget \e must have this slot: setDocument(const QString&).
1336 1336
1337 \sa showMainWidget() 1337 \sa showMainWidget()
1338*/ 1338*/
1339void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) 1339void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1340{ 1340{
1341 if ( mw && argc() == 2 ) 1341 if ( mw && argc() == 2 )
1342 Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); 1342 Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
1343 1343
1344 1344
1345 d->show(mw, nomaximize ); 1345 d->show(mw, nomaximize );
1346} 1346}
1347 1347
1348 1348
1349/*! 1349/*!
1350 If an application is started via a \link qcop.html QCop\endlink 1350 If an application is started via a \link qcop.html QCop\endlink
1351 message, the application will process the \link qcop.html 1351 message, the application will process the \link qcop.html
1352 QCop\endlink message and then quit. If the application calls this 1352 QCop\endlink message and then quit. If the application calls this
1353 function while processing a \link qcop.html QCop\endlink message, 1353 function while processing a \link qcop.html QCop\endlink message,
1354 after processing its outstanding \link qcop.html QCop\endlink 1354 after processing its outstanding \link qcop.html QCop\endlink
1355 messages the application will start 'properly' and show itself. 1355 messages the application will start 'properly' and show itself.
1356 1356
1357 \sa keepRunning() 1357 \sa keepRunning()
1358*/ 1358*/
1359void QPEApplication::setKeepRunning() 1359void QPEApplication::setKeepRunning()
1360{ 1360{
1361 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1361 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1362 QPEApplication * qpeApp = ( QPEApplication* ) qApp; 1362 QPEApplication * qpeApp = ( QPEApplication* ) qApp;
1363 qpeApp->d->keep_running = TRUE; 1363 qpeApp->d->keep_running = TRUE;
1364 } 1364 }
1365} 1365}
1366 1366
1367/*! 1367/*!
1368 Returns TRUE if the application will quit after processing the 1368 Returns TRUE if the application will quit after processing the
1369 current list of qcop messages; otherwise returns FALSE. 1369 current list of qcop messages; otherwise returns FALSE.
1370 1370
1371 \sa setKeepRunning() 1371 \sa setKeepRunning()
1372*/ 1372*/
1373bool QPEApplication::keepRunning() const 1373bool QPEApplication::keepRunning() const
1374{ 1374{
1375 return d->keep_running; 1375 return d->keep_running;
1376} 1376}
1377 1377
1378/*! 1378/*!
1379 \internal 1379 \internal
1380*/ 1380*/
1381void QPEApplication::internalSetStyle( const QString &style ) 1381void QPEApplication::internalSetStyle( const QString &style )
1382{ 1382{
1383#if QT_VERSION >= 300 1383#if QT_VERSION >= 300
1384 if ( style == "QPE" ) { 1384 if ( style == "QPE" ) {
1385 setStyle( new QPEStyle ); 1385 setStyle( new QPEStyle );
1386 } 1386 }
1387 else { 1387 else {
1388 QStyle *s = QStyleFactory::create( style ); 1388 QStyle *s = QStyleFactory::create( style );
1389 if ( s ) 1389 if ( s )
1390 setStyle( s ); 1390 setStyle( s );
1391 } 1391 }
1392#else 1392#else
1393 if ( style == "Windows" ) { 1393 if ( style == "Windows" ) {
1394 setStyle( new QWindowsStyle ); 1394 setStyle( new QWindowsStyle );
1395 } 1395 }
1396 else if ( style == "QPE" ) { 1396 else if ( style == "QPE" ) {
1397 setStyle( new QPEStyle ); 1397 setStyle( new QPEStyle );
1398 } 1398 }
1399 else if ( style == "Light" ) { 1399 else if ( style == "Light" ) {
1400 setStyle( new LightStyle ); 1400 setStyle( new LightStyle );
1401 } 1401 }
1402#ifndef QT_NO_STYLE_PLATINUM 1402#ifndef QT_NO_STYLE_PLATINUM
1403 else if ( style == "Platinum" ) { 1403 else if ( style == "Platinum" ) {
1404 setStyle( new QPlatinumStyle ); 1404 setStyle( new QPlatinumStyle );
1405 } 1405 }
1406#endif 1406#endif
1407#ifndef QT_NO_STYLE_MOTIF 1407#ifndef QT_NO_STYLE_MOTIF
1408 else if ( style == "Motif" ) { 1408 else if ( style == "Motif" ) {
1409 setStyle( new QMotifStyle ); 1409 setStyle( new QMotifStyle );
1410 } 1410 }
1411#endif 1411#endif
1412#ifndef QT_NO_STYLE_MOTIFPLUS 1412#ifndef QT_NO_STYLE_MOTIFPLUS
1413 else if ( style == "MotifPlus" ) { 1413 else if ( style == "MotifPlus" ) {
1414 setStyle( new QMotifPlusStyle ); 1414 setStyle( new QMotifPlusStyle );
1415 } 1415 }
1416#endif 1416#endif
1417 1417
1418 else { 1418 else {
1419 QStyle *sty = 0; 1419 QStyle *sty = 0;
1420 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 1420 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/";
1421 1421
1422 if ( style. find ( ".so" ) > 0 ) 1422 if ( style. find ( ".so" ) > 0 )
1423 path += style; 1423 path += style;
1424 else 1424 else
1425 path = path + "lib" + style. lower ( ) + ".so"; // compatibility 1425 path = path + "lib" + style. lower ( ) + ".so"; // compatibility
1426 1426
1427 static QLibrary *lastlib = 0; 1427 static QLibrary *lastlib = 0;
1428 static StyleInterface *lastiface = 0; 1428 static StyleInterface *lastiface = 0;
1429 1429
1430 QLibrary *lib = new QLibrary ( path ); 1430 QLibrary *lib = new QLibrary ( path );
1431 StyleInterface *iface = 0; 1431 StyleInterface *iface = 0;
1432 1432
1433 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) 1433 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface )
1434 sty = iface-> style ( ); 1434 sty = iface-> style ( );
1435 1435
1436 if ( sty ) { 1436 if ( sty ) {
1437 setStyle ( sty ); 1437 setStyle ( sty );
1438 1438
1439 if ( lastiface ) 1439 if ( lastiface )
1440 lastiface-> release ( ); 1440 lastiface-> release ( );
1441 lastiface = iface; 1441 lastiface = iface;
1442 1442
1443 if ( lastlib ) { 1443 if ( lastlib ) {
1444 lastlib-> unload ( ); 1444 lastlib-> unload ( );
1445 delete lastlib; 1445 delete lastlib;
1446 } 1446 }
1447 lastlib = lib; 1447 lastlib = lib;
1448 } 1448 }
1449 else { 1449 else {
1450 if ( iface ) 1450 if ( iface )
1451 iface-> release ( ); 1451 iface-> release ( );
1452 delete lib; 1452 delete lib;
1453 1453
1454 setStyle ( new LightStyle ( )); 1454 setStyle ( new LightStyle ( ));
1455 } 1455 }
1456 } 1456 }
1457#endif 1457#endif
1458} 1458}
1459 1459
1460/*! 1460/*!
1461 \internal 1461 \internal
1462*/ 1462*/
1463void QPEApplication::prepareForTermination( bool willrestart ) 1463void QPEApplication::prepareForTermination( bool willrestart )
1464{ 1464{
1465 if ( willrestart ) { 1465 if ( willrestart ) {
1466 // Draw a big wait icon, the image can be altered in later revisions 1466 // Draw a big wait icon, the image can be altered in later revisions
1467 // QWidget *d = QApplication::desktop(); 1467 // QWidget *d = QApplication::desktop();
1468 QImage img = Resource::loadImage( "launcher/new_wait" ); 1468 QImage img = Resource::loadImage( "launcher/new_wait" );
1469 QPixmap pix; 1469 QPixmap pix;
1470 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); 1470 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) );
1471 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | 1471 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize |
1472 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 1472 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
1473 lblWait->setPixmap( pix ); 1473 lblWait->setPixmap( pix );
1474 lblWait->setAlignment( QWidget::AlignCenter ); 1474 lblWait->setAlignment( QWidget::AlignCenter );
1475 lblWait->show(); 1475 lblWait->show();
1476 lblWait->showMaximized(); 1476 lblWait->showMaximized();
1477 } 1477 }
1478#ifndef SINGLE_APP 1478#ifndef SINGLE_APP
1479 { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); 1479 { QCopEnvelope envelope( "QPE/System", "forceQuit()" );
1480 } 1480 }
1481 processEvents(); // ensure the message goes out. 1481 processEvents(); // ensure the message goes out.
1482 sleep( 1 ); // You have 1 second to comply. 1482 sleep( 1 ); // You have 1 second to comply.
1483#endif 1483#endif
1484} 1484}
1485 1485
1486/*! 1486/*!
1487 \internal 1487 \internal
1488*/ 1488*/
1489void QPEApplication::shutdown() 1489void QPEApplication::shutdown()
1490{ 1490{
1491 // Implement in server's QPEApplication subclass 1491 // Implement in server's QPEApplication subclass
1492} 1492}
1493 1493
1494/*! 1494/*!
1495 \internal 1495 \internal
1496*/ 1496*/
1497void QPEApplication::restart() 1497void QPEApplication::restart()
1498{ 1498{
1499 // Implement in server's QPEApplication subclass 1499 // Implement in server's QPEApplication subclass
1500} 1500}
1501 1501
1502static QPtrDict<void>* stylusDict = 0; 1502static QPtrDict<void>* stylusDict = 0;
1503static void createDict() 1503static void createDict()
1504{ 1504{
1505 if ( !stylusDict ) 1505 if ( !stylusDict )
1506 stylusDict = new QPtrDict<void>; 1506 stylusDict = new QPtrDict<void>;
1507} 1507}
1508 1508
1509/*! 1509/*!
1510 Returns the current StylusMode for widget \a w. 1510 Returns the current StylusMode for widget \a w.
1511 1511
1512 \sa setStylusOperation() StylusMode 1512 \sa setStylusOperation() StylusMode
1513*/ 1513*/
1514QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 1514QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
1515{ 1515{
1516 if ( stylusDict ) 1516 if ( stylusDict )
1517 return ( StylusMode ) ( int ) stylusDict->find( w ); 1517 return ( StylusMode ) ( int ) stylusDict->find( w );
1518 return LeftOnly; 1518 return LeftOnly;
1519} 1519}
1520 1520
1521/*! 1521/*!
1522 \enum QPEApplication::StylusMode 1522 \enum QPEApplication::StylusMode
1523 1523
1524 \value LeftOnly the stylus only generates LeftButton 1524 \value LeftOnly the stylus only generates LeftButton
1525 events (the default). 1525 events (the default).
1526 \value RightOnHold the stylus generates RightButton events 1526 \value RightOnHold the stylus generates RightButton events
1527 if the user uses the press-and-hold gesture. 1527 if the user uses the press-and-hold gesture.
1528 1528
1529 \sa setStylusOperation() stylusOperation() 1529 \sa setStylusOperation() stylusOperation()
1530*/ 1530*/
1531 1531
1532/*! 1532/*!
1533 Causes widget \a w to receive mouse events according to the stylus 1533 Causes widget \a w to receive mouse events according to the stylus
1534 \a mode. 1534 \a mode.
1535 1535
1536 \sa stylusOperation() StylusMode 1536 \sa stylusOperation() StylusMode
1537*/ 1537*/
1538void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) 1538void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode )
1539{ 1539{
1540 createDict(); 1540 createDict();
1541 if ( mode == LeftOnly ) { 1541 if ( mode == LeftOnly ) {
1542 stylusDict->remove 1542 stylusDict->remove
1543 ( w ); 1543 ( w );
1544 w->removeEventFilter( qApp ); 1544 w->removeEventFilter( qApp );
1545 } 1545 }
1546 else { 1546 else {
1547 stylusDict->insert( w, ( void* ) mode ); 1547 stylusDict->insert( w, ( void* ) mode );
1548 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); 1548 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) );
1549 w->installEventFilter( qApp ); 1549 w->installEventFilter( qApp );
1550 } 1550 }
1551} 1551}
1552 1552
1553 1553
1554/*! 1554/*!
1555 \reimp 1555 \reimp
1556*/ 1556*/
1557bool QPEApplication::eventFilter( QObject *o, QEvent *e ) 1557bool QPEApplication::eventFilter( QObject *o, QEvent *e )
1558{ 1558{
1559 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { 1559 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
1560 QMouseEvent * me = ( QMouseEvent* ) e; 1560 QMouseEvent * me = ( QMouseEvent* ) e;
1561 StylusMode mode = (StylusMode)(int)stylusDict->find(o); 1561 StylusMode mode = (StylusMode)(int)stylusDict->find(o);
1562 switch (mode) { 1562 switch (mode) {
1563 case RightOnHold: 1563 case RightOnHold:
1564 switch ( me->type() ) { 1564 switch ( me->type() ) {
1565 case QEvent::MouseButtonPress: 1565 case QEvent::MouseButtonPress:
1566 if ( me->button() == LeftButton ) { 1566 if ( me->button() == LeftButton ) {
1567 d->presstimer = startTimer(500); // #### pref. 1567 d->presstimer = startTimer(500); // #### pref.
1568 d->presswidget = (QWidget*)o; 1568 d->presswidget = (QWidget*)o;
1569 d->presspos = me->pos(); 1569 d->presspos = me->pos();
1570 d->rightpressed = FALSE; 1570 d->rightpressed = FALSE;
1571 } 1571 }
1572 break; 1572 break;
1573 case QEvent::MouseMove: 1573 case QEvent::MouseMove:
1574 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) { 1574 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) {
1575 killTimer(d->presstimer); 1575 killTimer(d->presstimer);
1576 d->presstimer = 0; 1576 d->presstimer = 0;
1577 } 1577 }
1578 break; 1578 break;
1579 case QEvent::MouseButtonRelease: 1579 case QEvent::MouseButtonRelease:
1580 if ( me->button() == LeftButton ) { 1580 if ( me->button() == LeftButton ) {
1581 if ( d->presstimer ) { 1581 if ( d->presstimer ) {
1582 killTimer(d->presstimer); 1582 killTimer(d->presstimer);
1583 d->presstimer = 0; 1583 d->presstimer = 0;
1584 } 1584 }
1585 if ( d->rightpressed && d->presswidget ) { 1585 if ( d->rightpressed && d->presswidget ) {
1586 // Right released 1586 // Right released
1587 postEvent( d->presswidget, 1587 postEvent( d->presswidget,
1588 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), 1588 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
1589 RightButton, LeftButton + RightButton ) ); 1589 RightButton, LeftButton + RightButton ) );
1590 // Left released, off-widget 1590 // Left released, off-widget
1591 postEvent( d->presswidget, 1591 postEvent( d->presswidget,
1592 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), 1592 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1),
1593 LeftButton, LeftButton ) ); 1593 LeftButton, LeftButton ) );
1594 postEvent( d->presswidget, 1594 postEvent( d->presswidget,
1595 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), 1595 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1),
1596 LeftButton, LeftButton ) ); 1596 LeftButton, LeftButton ) );
1597 d->rightpressed = FALSE; 1597 d->rightpressed = FALSE;
1598 return TRUE; // don't send the real Left release 1598 return TRUE; // don't send the real Left release
1599 } 1599 }
1600 } 1600 }
1601 break; 1601 break;
1602 default: 1602 default:
1603 break; 1603 break;
1604 } 1604 }
1605 break; 1605 break;
1606 default: 1606 default:
1607 ; 1607 ;
1608 } 1608 }
1609 } 1609 }
1610 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 1610 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
1611 QKeyEvent *ke = (QKeyEvent *)e; 1611 QKeyEvent *ke = (QKeyEvent *)e;
1612 if ( ke->key() == Key_Enter ) { 1612 if ( ke->key() == Key_Enter ) {
1613 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 1613 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
1614 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 1614 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
1615 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 1615 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
1616 return TRUE; 1616 return TRUE;
1617 } 1617 }
1618 } 1618 }
1619 } 1619 }
1620 return FALSE; 1620 return FALSE;
1621} 1621}
1622 1622
1623/*! 1623/*!
1624 \reimp 1624 \reimp
1625*/ 1625*/
1626void QPEApplication::timerEvent( QTimerEvent *e ) 1626void QPEApplication::timerEvent( QTimerEvent *e )
1627{ 1627{
1628 if ( e->timerId() == d->presstimer && d->presswidget ) { 1628 if ( e->timerId() == d->presstimer && d->presswidget ) {
1629 // Right pressed 1629 // Right pressed
1630 postEvent( d->presswidget, 1630 postEvent( d->presswidget,
1631 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 1631 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
1632 RightButton, LeftButton ) ); 1632 RightButton, LeftButton ) );
1633 killTimer( d->presstimer ); 1633 killTimer( d->presstimer );
1634 d->presstimer = 0; 1634 d->presstimer = 0;
1635 d->rightpressed = TRUE; 1635 d->rightpressed = TRUE;
1636 } 1636 }
1637} 1637}
1638 1638
1639void QPEApplication::removeSenderFromStylusDict() 1639void QPEApplication::removeSenderFromStylusDict()
1640{ 1640{
1641 stylusDict->remove 1641 stylusDict->remove
1642 ( ( void* ) sender() ); 1642 ( ( void* ) sender() );
1643 if ( d->presswidget == sender() ) 1643 if ( d->presswidget == sender() )
1644 d->presswidget = 0; 1644 d->presswidget = 0;
1645} 1645}
1646 1646
1647/*! 1647/*!
1648 \internal 1648 \internal
1649*/ 1649*/
1650bool QPEApplication::keyboardGrabbed() const 1650bool QPEApplication::keyboardGrabbed() const
1651{ 1651{
1652 return d->kbgrabbed; 1652 return d->kbgrabbed;
1653} 1653}
1654 1654
1655 1655
1656/*! 1656/*!
1657 Reverses the effect of grabKeyboard(). This is called automatically 1657 Reverses the effect of grabKeyboard(). This is called automatically
1658 on program exit. 1658 on program exit.
1659*/ 1659*/
1660void QPEApplication::ungrabKeyboard() 1660void QPEApplication::ungrabKeyboard()
1661{ 1661{
1662 ((QPEApplication *) qApp )-> d-> kbgrabbed = false; 1662 ((QPEApplication *) qApp )-> d-> kbgrabbed = false;
1663} 1663}
1664 1664
1665/*! 1665/*!
1666 Grabs the physical keyboard keys, e.g. the application's launching 1666 Grabs the physical keyboard keys, e.g. the application's launching
1667 keys. Instead of launching applications when these keys are pressed 1667 keys. Instead of launching applications when these keys are pressed
1668 the signals emitted are sent to this application instead. Some games 1668 the signals emitted are sent to this application instead. Some games
1669 programs take over the launch keys in this way to make interaction 1669 programs take over the launch keys in this way to make interaction
1670 easier. 1670 easier.
1671 1671
1672 \sa ungrabKeyboard() 1672 \sa ungrabKeyboard()
1673*/ 1673*/
1674void QPEApplication::grabKeyboard() 1674void QPEApplication::grabKeyboard()
1675{ 1675{
1676 ((QPEApplication *) qApp )-> d-> kbgrabbed = true; 1676 ((QPEApplication *) qApp )-> d-> kbgrabbed = true;
1677} 1677}
1678 1678
1679/*! 1679/*!
1680 \reimp 1680 \reimp
1681*/ 1681*/
1682int QPEApplication::exec() 1682int QPEApplication::exec()
1683{ 1683{
1684#ifndef QT_NO_COP 1684#ifndef QT_NO_COP
1685 d->sendQCopQ(); 1685 d->sendQCopQ();
1686#endif 1686#endif
1687 1687
1688 if ( d->keep_running ) 1688 if ( d->keep_running )
1689 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 1689 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
1690 return QApplication::exec(); 1690 return QApplication::exec();
1691 1691
1692#ifndef QT_NO_COP 1692#ifndef QT_NO_COP
1693 1693
1694 { 1694 {
1695 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1695 QCopEnvelope e( "QPE/System", "closing(QString)" );
1696 e << d->appName; 1696 e << d->appName;
1697 } 1697 }
1698#endif 1698#endif
1699 processEvents(); 1699 processEvents();
1700 return 0; 1700 return 0;
1701} 1701}
1702 1702
1703/*! 1703/*!
1704 \internal 1704 \internal
1705 External request for application to quit. Quits if possible without 1705 External request for application to quit. Quits if possible without
1706 loosing state. 1706 loosing state.
1707*/ 1707*/
1708void QPEApplication::tryQuit() 1708void QPEApplication::tryQuit()
1709{ 1709{
1710 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 1710 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
1711 return ; // Inside modal loop or konsole. Too hard to save state. 1711 return ; // Inside modal loop or konsole. Too hard to save state.
1712#ifndef QT_NO_COP 1712#ifndef QT_NO_COP
1713 1713
1714 { 1714 {
1715 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1715 QCopEnvelope e( "QPE/System", "closing(QString)" );
1716 e << d->appName; 1716 e << d->appName;
1717 } 1717 }
1718#endif 1718#endif
1719 processEvents(); 1719 processEvents();
1720 1720
1721 quit(); 1721 quit();
1722} 1722}
1723 1723
1724/*! 1724/*!
1725 \internal 1725 \internal
1726*/ 1726*/
1727void QPEApplication::installTranslation( const QString& baseName ) { 1727void QPEApplication::installTranslation( const QString& baseName ) {
1728 QTranslator* trans = new QTranslator(this); 1728 QTranslator* trans = new QTranslator(this);
1729 QString tfn = qpeDir() + "/i18n/"+baseName; 1729 QString tfn = qpeDir() + "/i18n/"+baseName;
1730 if ( trans->load( tfn ) ) 1730 if ( trans->load( tfn ) )
1731 installTranslator( trans ); 1731 installTranslator( trans );
1732 else 1732 else
1733 delete trans; 1733 delete trans;
1734} 1734}
1735 1735
1736/*! 1736/*!
1737 \internal 1737 \internal
1738 User initiated quit. Makes the window 'Go Away'. If preloaded this means 1738 User initiated quit. Makes the window 'Go Away'. If preloaded this means
1739 hiding the window. If not it means quitting the application. 1739 hiding the window. If not it means quitting the application.
1740 As this is user initiated we don't need to check state. 1740 As this is user initiated we don't need to check state.
1741*/ 1741*/
1742void QPEApplication::hideOrQuit() 1742void QPEApplication::hideOrQuit()
1743{ 1743{
1744 processEvents(); 1744 processEvents();
1745 1745
1746 // If we are a preloaded application we don't actually quit, so emit 1746 // If we are a preloaded application we don't actually quit, so emit
1747 // a System message indicating we're quasi-closing. 1747 // a System message indicating we're quasi-closing.
1748 if ( d->preloaded && d->qpe_main_widget ) 1748 if ( d->preloaded && d->qpe_main_widget )
1749#ifndef QT_NO_COP 1749#ifndef QT_NO_COP
1750 1750
1751 { 1751 {
1752 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 1752 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
1753 e << d->appName; 1753 e << d->appName;
1754 d->qpe_main_widget->hide(); 1754 d->qpe_main_widget->hide();
1755 } 1755 }
1756#endif 1756#endif
1757 else 1757 else
1758 quit(); 1758 quit();
1759} 1759}
1760 1760
1761 1761
1762#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) 1762#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_RAMSES)
1763 1763
1764// The libraries with the skiff package (and possibly others) have 1764// The libraries with the skiff package (and possibly others) have
1765// completely useless implementations of builtin new and delete that 1765// completely useless implementations of builtin new and delete that
1766// use about 50% of your CPU. Here we revert to the simple libc 1766// use about 50% of your CPU. Here we revert to the simple libc
1767// functions. 1767// functions.
1768 1768
1769void* operator new[]( size_t size ) 1769void* operator new[]( size_t size )
1770{ 1770{
1771 return malloc( size ); 1771 return malloc( size );
1772} 1772}
1773 1773
1774void* operator new( size_t size ) 1774void* operator new( size_t size )
1775{ 1775{
1776 return malloc( size ); 1776 return malloc( size );
1777} 1777}
1778 1778
1779void operator delete[]( void* p ) 1779void operator delete[]( void* p )
1780{ 1780{
1781 free( p ); 1781 free( p );
1782} 1782}
1783 1783
1784void operator delete[]( void* p, size_t /*size*/ ) 1784void operator delete[]( void* p, size_t /*size*/ )
1785{ 1785{
1786 free( p ); 1786 free( p );
1787} 1787}
1788 1788
1789 1789
1790void operator delete( void* p ) 1790void operator delete( void* p )
1791{ 1791{
1792 free( p ); 1792 free( p );
1793} 1793}
1794 1794
1795void operator delete( void* p, size_t /*size*/ ) 1795void operator delete( void* p, size_t /*size*/ )
1796{ 1796{
1797 free( p ); 1797 free( p );
1798} 1798}
1799 1799
1800#endif 1800#endif
1801 1801
1802#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 1802#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
1803#include <qwidgetlist.h> 1803#include <qwidgetlist.h>
1804#ifdef QWS 1804#ifdef QWS
1805#include <qgfx_qws.h> 1805#include <qgfx_qws.h>
1806extern QRect qt_maxWindowRect; 1806extern QRect qt_maxWindowRect;
1807void qt_setMaxWindowRect(const QRect& r ) 1807void qt_setMaxWindowRect(const QRect& r )
1808{ 1808{
1809 qt_maxWindowRect = qt_screen->mapFromDevice( r, 1809 qt_maxWindowRect = qt_screen->mapFromDevice( r,
1810 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); 1810 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) );
1811 // Re-resize any maximized windows 1811 // Re-resize any maximized windows
1812 QWidgetList* l = QApplication::topLevelWidgets(); 1812 QWidgetList* l = QApplication::topLevelWidgets();
1813 if ( l ) { 1813 if ( l ) {
1814 QWidget * w = l->first(); 1814 QWidget * w = l->first();
1815 while ( w ) { 1815 while ( w ) {
1816 if ( w->isVisible() && w->isMaximized() ) { 1816 if ( w->isVisible() && w->isMaximized() ) {
1817 w->showMaximized(); 1817 w->showMaximized();
1818 } 1818 }
1819 w = l->next(); 1819 w = l->next();
1820 } 1820 }
1821 delete l; 1821 delete l;
1822 } 1822 }
1823} 1823}
1824#endif 1824#endif
1825#endif 1825#endif
diff --git a/library/storage.cpp b/library/storage.cpp
index 12f9df9..4e07ec6 100644
--- a/library/storage.cpp
+++ b/library/storage.cpp
@@ -1,261 +1,261 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) Holger 'zecke' Freyther <freyther@kde.org> 2** Copyright (C) Holger 'zecke' Freyther <freyther@kde.org>
3** Copyright (C) Lorn Potter <llornkcor@handhelds.org> 3** Copyright (C) Lorn Potter <llornkcor@handhelds.org>
4** Copyright (C) 2000 Trolltech AS. All rights reserved. 4** Copyright (C) 2000 Trolltech AS. All rights reserved.
5** 5**
6** This file is part of Opie Environment. 6** This file is part of Opie Environment.
7** 7**
8** This file may be distributed and/or modified under the terms of the 8** This file may be distributed and/or modified under the terms of the
9** GNU General Public License version 2 as published by the Free Software 9** GNU General Public License version 2 as published by the Free Software
10** Foundation and appearing in the file LICENSE.GPL included in the 10** Foundation and appearing in the file LICENSE.GPL included in the
11** packaging of this file. 11** packaging of this file.
12** 12**
13** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 13** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
14** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 14** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
15** 15**
16** See http://www.trolltech.com/gpl/ for GPL licensing information. 16** See http://www.trolltech.com/gpl/ for GPL licensing information.
17** 17**
18** Contact info@trolltech.com if any conditions of this licensing are 18** Contact info@trolltech.com if any conditions of this licensing are
19** not clear to you. 19** not clear to you.
20** 20**
21**********************************************************************/ 21**********************************************************************/
22 22
23#include <qpe/storage.h> 23#include <qpe/storage.h>
24#ifdef QT_QWS_SL5XXX 24#if defined(QT_QWS_SL5XXX)
25#include <qpe/custom.h> 25#include <qpe/custom.h>
26#endif 26#endif
27 27
28#include <qfile.h> 28#include <qfile.h>
29#include <qtimer.h> 29#include <qtimer.h>
30#include <qcopchannel_qws.h> 30#include <qcopchannel_qws.h>
31 31
32#include <stdio.h> 32#include <stdio.h>
33 33
34#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 34#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
35#include <sys/vfs.h> 35#include <sys/vfs.h>
36#include <mntent.h> 36#include <mntent.h>
37#endif 37#endif
38 38
39#include <qstringlist.h> 39#include <qstringlist.h>
40 40
41#include <sys/vfs.h> 41#include <sys/vfs.h>
42#include <mntent.h> 42#include <mntent.h>
43 43
44 44
45static bool isCF(const QString& m) 45static bool isCF(const QString& m)
46{ 46{
47 FILE* f = fopen("/var/run/stab", "r"); 47 FILE* f = fopen("/var/run/stab", "r");
48 if (!f) f = fopen("/var/state/pcmcia/stab", "r"); 48 if (!f) f = fopen("/var/state/pcmcia/stab", "r");
49 if (!f) f = fopen("/var/lib/pcmcia/stab", "r"); 49 if (!f) f = fopen("/var/lib/pcmcia/stab", "r");
50 if ( f ) { 50 if ( f ) {
51 char line[1024]; 51 char line[1024];
52 char devtype[80]; 52 char devtype[80];
53 char devname[80]; 53 char devname[80];
54 while ( fgets( line, 1024, f ) ) { 54 while ( fgets( line, 1024, f ) ) {
55 // 0 ide ide-cs 0 hda 3 0 55 // 0 ide ide-cs 0 hda 3 0
56 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 ) 56 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 )
57 { 57 {
58 if ( QString(devtype) == "ide" && m.find(devname)>0 ) { 58 if ( QString(devtype) == "ide" && m.find(devname)>0 ) {
59 fclose(f); 59 fclose(f);
60 return TRUE; 60 return TRUE;
61 } 61 }
62 } 62 }
63 } 63 }
64 fclose(f); 64 fclose(f);
65 } 65 }
66 return FALSE; 66 return FALSE;
67} 67}
68 68
69StorageInfo::StorageInfo( QObject *parent ) 69StorageInfo::StorageInfo( QObject *parent )
70 : QObject( parent ) 70 : QObject( parent )
71{ 71{
72 mFileSystems.setAutoDelete( TRUE ); 72 mFileSystems.setAutoDelete( TRUE );
73 channel = new QCopChannel( "QPE/Card", this ); 73 channel = new QCopChannel( "QPE/Card", this );
74 connect( channel, SIGNAL(received(const QCString &, const QByteArray &)), 74 connect( channel, SIGNAL(received(const QCString &, const QByteArray &)),
75 this, SLOT(cardMessage( const QCString &, const QByteArray &)) ); 75 this, SLOT(cardMessage( const QCString &, const QByteArray &)) );
76 update(); 76 update();
77} 77}
78 78
79const FileSystem *StorageInfo::fileSystemOf( const QString &filename ) 79const FileSystem *StorageInfo::fileSystemOf( const QString &filename )
80{ 80{
81 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) { 81 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) {
82 if ( filename.startsWith( (*i)->path() ) ) 82 if ( filename.startsWith( (*i)->path() ) )
83 return (*i); 83 return (*i);
84 } 84 }
85 return 0; 85 return 0;
86} 86}
87 87
88 88
89void StorageInfo::cardMessage( const QCString& msg, const QByteArray& ) 89void StorageInfo::cardMessage( const QCString& msg, const QByteArray& )
90{ 90{
91 if ( msg == "mtabChanged()" ) 91 if ( msg == "mtabChanged()" )
92 update(); 92 update();
93} 93}
94// cause of the lack of a d pointer we need 94// cause of the lack of a d pointer we need
95// to store informations in a config file :( 95// to store informations in a config file :(
96void StorageInfo::update() 96void StorageInfo::update()
97{ 97{
98 //qDebug("StorageInfo::updating"); 98 //qDebug("StorageInfo::updating");
99#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 99#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
100 struct mntent *me; 100 struct mntent *me;
101 FILE *mntfp = setmntent( "/etc/mtab", "r" ); 101 FILE *mntfp = setmntent( "/etc/mtab", "r" );
102 102
103 QStringList curdisks; 103 QStringList curdisks;
104 QStringList curopts; 104 QStringList curopts;
105 QStringList curfs; 105 QStringList curfs;
106 bool rebuild = FALSE; 106 bool rebuild = FALSE;
107 int n=0; 107 int n=0;
108 if ( mntfp ) { 108 if ( mntfp ) {
109 while ( (me = getmntent( mntfp )) != 0 ) { 109 while ( (me = getmntent( mntfp )) != 0 ) {
110 QString fs = me->mnt_fsname; 110 QString fs = me->mnt_fsname;
111 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd" 111 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd"
112 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd" 112 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd"
113 || fs.left( 14 ) == "/dev/mmc/part1" 113 || fs.left( 14 ) == "/dev/mmc/part1"
114 || fs.left(5)=="tmpfs" || fs.left(9)=="/dev/root" ) 114 || fs.left(5)=="tmpfs" || fs.left(9)=="/dev/root" )
115 { 115 {
116 n++; 116 n++;
117 curdisks.append(fs); 117 curdisks.append(fs);
118 curopts.append( me->mnt_opts ); 118 curopts.append( me->mnt_opts );
119 //qDebug("-->fs %s opts %s", fs.latin1(), me->mnt_opts ); 119 //qDebug("-->fs %s opts %s", fs.latin1(), me->mnt_opts );
120 curfs.append( me->mnt_dir ); 120 curfs.append( me->mnt_dir );
121 bool found = FALSE; 121 bool found = FALSE;
122 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) { 122 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) {
123 if ( (*i)->disk() == fs ) { 123 if ( (*i)->disk() == fs ) {
124 found = TRUE; 124 found = TRUE;
125 break; 125 break;
126 } 126 }
127 } 127 }
128 if ( !found ) 128 if ( !found )
129 rebuild = TRUE; 129 rebuild = TRUE;
130 } 130 }
131 } 131 }
132 endmntent( mntfp ); 132 endmntent( mntfp );
133 } 133 }
134 if ( rebuild || n != (int)mFileSystems.count() ) { 134 if ( rebuild || n != (int)mFileSystems.count() ) {
135 mFileSystems.clear(); 135 mFileSystems.clear();
136 QStringList::ConstIterator it=curdisks.begin(); 136 QStringList::ConstIterator it=curdisks.begin();
137 QStringList::ConstIterator fsit=curfs.begin(); 137 QStringList::ConstIterator fsit=curfs.begin();
138 QStringList::ConstIterator optsIt=curopts.begin(); 138 QStringList::ConstIterator optsIt=curopts.begin();
139 for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt) { 139 for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt) {
140 QString opts = *optsIt; 140 QString opts = *optsIt;
141 141
142 QString disk = *it; 142 QString disk = *it;
143 QString humanname; 143 QString humanname;
144 bool removable = FALSE; 144 bool removable = FALSE;
145 if ( isCF(disk) ) { 145 if ( isCF(disk) ) {
146 humanname = tr("CF Card"); 146 humanname = tr("CF Card");
147 removable = TRUE; 147 removable = TRUE;
148 } else if ( disk == "/dev/hda1" ) { 148 } else if ( disk == "/dev/hda1" ) {
149 humanname = tr("Hard Disk"); 149 humanname = tr("Hard Disk");
150 } else if ( disk.left(9) == "/dev/mmcd" ) { 150 } else if ( disk.left(9) == "/dev/mmcd" ) {
151 humanname = tr("SD Card"); 151 humanname = tr("SD Card");
152 removable = TRUE; 152 removable = TRUE;
153 } else if ( disk.left( 14 ) == "/dev/mmc/part1" ) { 153 } else if ( disk.left( 14 ) == "/dev/mmc/part1" ) {
154 humanname = tr("MMC Card"); 154 humanname = tr("MMC Card");
155 removable = TRUE; 155 removable = TRUE;
156 } else if ( disk.left(7) == "/dev/hd" ) 156 } else if ( disk.left(7) == "/dev/hd" )
157 humanname = tr("Hard Disk") + " " + disk; 157 humanname = tr("Hard Disk") + " " + disk;
158 else if ( disk.left(7) == "/dev/sd" ) 158 else if ( disk.left(7) == "/dev/sd" )
159 humanname = tr("SCSI Hard Disk") + " " + disk; 159 humanname = tr("SCSI Hard Disk") + " " + disk;
160 else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs 160 else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs
161 humanname = tr("Internal Memory"); 161 humanname = tr("Internal Memory");
162 else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" ) 162 else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" )
163 humanname = tr("Internal Storage"); 163 humanname = tr("Internal Storage");
164 else if ( disk.left(14) == "/dev/mtdblock/" ) 164 else if ( disk.left(14) == "/dev/mtdblock/" )
165 humanname = tr("Internal Storage") + " " + disk; 165 humanname = tr("Internal Storage") + " " + disk;
166 else if ( disk.left(13) == "/dev/mtdblock" ) 166 else if ( disk.left(13) == "/dev/mtdblock" )
167 humanname = tr("Internal Storage") + " " + disk; 167 humanname = tr("Internal Storage") + " " + disk;
168 else if ( disk.left(9) == "/dev/root" ) 168 else if ( disk.left(9) == "/dev/root" )
169 humanname = tr("Internal Storage") + " " + disk; 169 humanname = tr("Internal Storage") + " " + disk;
170 else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs 170 else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs
171 humanname = tr("Internal Memory"); 171 humanname = tr("Internal Memory");
172 FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts ); 172 FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts );
173 mFileSystems.append( fs ); 173 mFileSystems.append( fs );
174 } 174 }
175 emit disksChanged(); 175 emit disksChanged();
176 } else { 176 } else {
177 // just update them 177 // just update them
178 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) 178 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
179 i.current()->update(); 179 i.current()->update();
180 } 180 }
181#endif 181#endif
182} 182}
183 183
184bool deviceTab( const char *device) { 184bool deviceTab( const char *device) {
185 QString name = device; 185 QString name = device;
186 bool hasDevice=false; 186 bool hasDevice=false;
187 struct mntent *me; 187 struct mntent *me;
188 FILE *mntfp = setmntent( "/etc/mtab", "r" ); 188 FILE *mntfp = setmntent( "/etc/mtab", "r" );
189 if ( mntfp ) { 189 if ( mntfp ) {
190 while ( (me = getmntent( mntfp )) != 0 ) { 190 while ( (me = getmntent( mntfp )) != 0 ) {
191 QString deviceName = me->mnt_fsname; 191 QString deviceName = me->mnt_fsname;
192// qDebug(deviceName); 192// qDebug(deviceName);
193 if( deviceName.left(name.length()) == name) { 193 if( deviceName.left(name.length()) == name) {
194 hasDevice = true; 194 hasDevice = true;
195 } 195 }
196 } 196 }
197 } 197 }
198 endmntent( mntfp ); 198 endmntent( mntfp );
199 return hasDevice; 199 return hasDevice;
200} 200}
201 201
202/*! 202/*!
203 * @fn static bool StorageInfo::hasCf() 203 * @fn static bool StorageInfo::hasCf()
204 * @brief returns whether device has Cf mounted 204 * @brief returns whether device has Cf mounted
205 * 205 *
206 */ 206 */
207bool StorageInfo::hasCf() 207bool StorageInfo::hasCf()
208{ 208{
209 return deviceTab("/dev/hd"); 209 return deviceTab("/dev/hd");
210} 210}
211 211
212/*! 212/*!
213 * @fn static bool StorageInfo::hasSd() 213 * @fn static bool StorageInfo::hasSd()
214 * @brief returns whether device has SD mounted 214 * @brief returns whether device has SD mounted
215 * 215 *
216 */ 216 */
217bool StorageInfo::hasSd() 217bool StorageInfo::hasSd()
218{ 218{
219 return deviceTab("/dev/mmcd"); 219 return deviceTab("/dev/mmcd");
220} 220}
221 221
222/*! 222/*!
223 * @fn static bool StorageInfo::hasMmc() 223 * @fn static bool StorageInfo::hasMmc()
224 * @brief reutrns whether device has mmc mounted 224 * @brief reutrns whether device has mmc mounted
225 * 225 *
226 */ 226 */
227bool StorageInfo::hasMmc() 227bool StorageInfo::hasMmc()
228{ 228{
229 bool hasMmc=false; 229 bool hasMmc=false;
230 if( deviceTab("/dev/mmc/part")) 230 if( deviceTab("/dev/mmc/part"))
231 hasMmc=true; 231 hasMmc=true;
232 if( deviceTab("/dev/mmcd")) 232 if( deviceTab("/dev/mmcd"))
233 hasMmc=true; 233 hasMmc=true;
234 return hasMmc; 234 return hasMmc;
235} 235}
236 236
237 237
238//--------------------------------------------------------------------------- 238//---------------------------------------------------------------------------
239 239
240FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o ) 240FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o )
241 : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o ) 241 : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o )
242{ 242{
243 update(); 243 update();
244} 244}
245 245
246void FileSystem::update() 246void FileSystem::update()
247{ 247{
248#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 248#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
249 struct statfs fs; 249 struct statfs fs;
250 if ( !statfs( fspath.latin1(), &fs ) ) { 250 if ( !statfs( fspath.latin1(), &fs ) ) {
251 blkSize = fs.f_bsize; 251 blkSize = fs.f_bsize;
252 totalBlks = fs.f_blocks; 252 totalBlks = fs.f_blocks;
253 availBlks = fs.f_bavail; 253 availBlks = fs.f_bavail;
254 } else { 254 } else {
255 blkSize = 0; 255 blkSize = 0;
256 totalBlks = 0; 256 totalBlks = 0;
257 availBlks = 0; 257 availBlks = 0;
258 } 258 }
259#endif 259#endif
260} 260}
261 261