summaryrefslogtreecommitdiff
path: root/library/qpeapplication.cpp
Unidiff
Diffstat (limited to 'library/qpeapplication.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp56
1 files changed, 35 insertions, 21 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 619b4cb..4e08a1f 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,1825 +1,1839 @@
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_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has 153 // so this is only useful if QT_QWS_SIMPAD is NOT 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#ifndef QT_QWS_SIMPAD 155#ifndef QT_QWS_SIMPAD
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() : resImage( 0 )
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 ~ResourceMimeFactory() {
279 delete resImage;
280 }
278 281
279 const QMimeSource* data( const QString& abs_name ) const 282 const QMimeSource* data( const QString& abs_name ) const
280 { 283 {
281 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 284 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
282 if ( !r ) { 285 if ( !r ) {
283 int sl = abs_name.length(); 286 int sl = abs_name.length();
284 do { 287 do {
285 sl = abs_name.findRev( '/', sl - 1 ); 288 sl = abs_name.findRev( '/', sl - 1 );
286 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 289 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
287 int dot = name.findRev( '.' ); 290 int dot = name.findRev( '.' );
288 if ( dot >= 0 ) 291 if ( dot >= 0 )
289 name = name.left( dot ); 292 name = name.left( dot );
290 QImage img = Resource::loadImage( name ); 293 QImage img = Resource::loadImage( name );
291 if ( !img.isNull() ) 294 if ( !img.isNull() ) {
292 r = new QImageDrag( img ); 295 delete resImage;
296 resImage = new QImageDrag( img );
297 r = resImage;
298 }
293 } 299 }
294 while ( !r && sl > 0 ); 300 while ( !r && sl > 0 );
295 } 301 }
296 return r; 302 return r;
297 } 303 }
304private:
305 mutable QImageDrag *resImage;
298}; 306};
299 307
300static int muted = 0; 308static int muted = 0;
301static int micMuted = 0; 309static int micMuted = 0;
302 310
303static void setVolume( int t = 0, int percent = -1 ) 311static void setVolume( int t = 0, int percent = -1 )
304{ 312{
305 switch ( t ) { 313 switch ( t ) {
306 case 0: { 314 case 0: {
307 Config cfg( "qpe" ); 315 Config cfg( "qpe" );
308 cfg.setGroup( "Volume" ); 316 cfg.setGroup( "Volume" );
309 if ( percent < 0 ) 317 if ( percent < 0 )
310 percent = cfg.readNumEntry( "VolumePercent", 50 ); 318 percent = cfg.readNumEntry( "VolumePercent", 50 );
311 int fd = 0; 319 int fd = 0;
312 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 320 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
313 int vol = muted ? 0 : percent; 321 int vol = muted ? 0 : percent;
314 // set both channels to same volume 322 // set both channels to same volume
315 vol |= vol << 8; 323 vol |= vol << 8;
316 ioctl( fd, MIXER_WRITE( 0 ), &vol ); 324 ioctl( fd, MIXER_WRITE( 0 ), &vol );
317 ::close( fd ); 325 ::close( fd );
318 } 326 }
319 } 327 }
320 break; 328 break;
321 } 329 }
322} 330}
323 331
324static void setMic( int t = 0, int percent = -1 ) 332static void setMic( int t = 0, int percent = -1 )
325{ 333{
326 switch ( t ) { 334 switch ( t ) {
327 case 0: { 335 case 0: {
328 Config cfg( "qpe" ); 336 Config cfg( "qpe" );
329 cfg.setGroup( "Volume" ); 337 cfg.setGroup( "Volume" );
330 if ( percent < 0 ) 338 if ( percent < 0 )
331 percent = cfg.readNumEntry( "Mic", 50 ); 339 percent = cfg.readNumEntry( "Mic", 50 );
332 340
333 int fd = 0; 341 int fd = 0;
334 int mic = micMuted ? 0 : percent; 342 int mic = micMuted ? 0 : percent;
335 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 343 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
336 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 344 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
337 ::close( fd ); 345 ::close( fd );
338 } 346 }
339 } 347 }
340 break; 348 break;
341 } 349 }
342} 350}
343 351
344 352
345static void setBass( int t = 0, int percent = -1 ) 353static void setBass( int t = 0, int percent = -1 )
346{ 354{
347 switch ( t ) { 355 switch ( t ) {
348 case 0: { 356 case 0: {
349 Config cfg( "qpe" ); 357 Config cfg( "qpe" );
350 cfg.setGroup( "Volume" ); 358 cfg.setGroup( "Volume" );
351 if ( percent < 0 ) 359 if ( percent < 0 )
352 percent = cfg.readNumEntry( "BassPercent", 50 ); 360 percent = cfg.readNumEntry( "BassPercent", 50 );
353 361
354 int fd = 0; 362 int fd = 0;
355 int bass = percent; 363 int bass = percent;
356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 364 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
357 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass ); 365 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass );
358 ::close( fd ); 366 ::close( fd );
359 } 367 }
360 } 368 }
361 break; 369 break;
362 } 370 }
363} 371}
364 372
365 373
366static void setTreble( int t = 0, int percent = -1 ) 374static void setTreble( int t = 0, int percent = -1 )
367{ 375{
368 switch ( t ) { 376 switch ( t ) {
369 case 0: { 377 case 0: {
370 Config cfg( "qpe" ); 378 Config cfg( "qpe" );
371 cfg.setGroup( "Volume" ); 379 cfg.setGroup( "Volume" );
372 if ( percent < 0 ) 380 if ( percent < 0 )
373 percent = cfg.readNumEntry( "TreblePercent", 50 ); 381 percent = cfg.readNumEntry( "TreblePercent", 50 );
374 382
375 int fd = 0; 383 int fd = 0;
376 int treble = percent; 384 int treble = percent;
377 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 385 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
378 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble ); 386 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble );
379 ::close( fd ); 387 ::close( fd );
380 } 388 }
381 } 389 }
382 break; 390 break;
383 } 391 }
384} 392}
385 393
386 394
387/*! 395/*!
388 \class QPEApplication qpeapplication.h 396 \class QPEApplication qpeapplication.h
389 \brief The QPEApplication class implements various system services 397 \brief The QPEApplication class implements various system services
390 that are available to all Qtopia applications. 398 that are available to all Qtopia applications.
391 399
392 Simply by using QPEApplication instead of QApplication, a standard Qt 400 Simply by using QPEApplication instead of QApplication, a standard Qt
393 application becomes a Qtopia application. It automatically follows 401 application becomes a Qtopia application. It automatically follows
394 style changes, quits and raises, and in the 402 style changes, quits and raises, and in the
395 case of \link docwidget.html document-oriented\endlink applications, 403 case of \link docwidget.html document-oriented\endlink applications,
396 changes the currently displayed document in response to the environment. 404 changes the currently displayed document in response to the environment.
397 405
398 To create a \link docwidget.html document-oriented\endlink 406 To create a \link docwidget.html document-oriented\endlink
399 application use showMainDocumentWidget(); to create a 407 application use showMainDocumentWidget(); to create a
400 non-document-oriented application use showMainWidget(). The 408 non-document-oriented application use showMainWidget(). The
401 keepRunning() function indicates whether the application will 409 keepRunning() function indicates whether the application will
402 continue running after it's processed the last \link qcop.html 410 continue running after it's processed the last \link qcop.html
403 QCop\endlink message. This can be changed using setKeepRunning(). 411 QCop\endlink message. This can be changed using setKeepRunning().
404 412
405 A variety of signals are emitted when certain events occur, for 413 A variety of signals are emitted when certain events occur, for
406 example, timeChanged(), clockChanged(), weekChanged(), 414 example, timeChanged(), clockChanged(), weekChanged(),
407 dateFormatChanged() and volumeChanged(). If the application receives 415 dateFormatChanged() and volumeChanged(). If the application receives
408 a \link qcop.html QCop\endlink message on the application's 416 a \link qcop.html QCop\endlink message on the application's
409 QPE/Application/\e{appname} channel, the appMessage() signal is 417 QPE/Application/\e{appname} channel, the appMessage() signal is
410 emitted. There are also flush() and reload() signals, which 418 emitted. There are also flush() and reload() signals, which
411 are emitted when synching begins and ends respectively - upon these 419 are emitted when synching begins and ends respectively - upon these
412 signals, the application should save and reload any data 420 signals, the application should save and reload any data
413 files that are involved in synching. Most of these signals will initially 421 files that are involved in synching. Most of these signals will initially
414 be received and unfiltered through the appMessage() signal. 422 be received and unfiltered through the appMessage() signal.
415 423
416 This class also provides a set of useful static functions. The 424 This class also provides a set of useful static functions. The
417 qpeDir() and documentDir() functions return the respective paths. 425 qpeDir() and documentDir() functions return the respective paths.
418 The grabKeyboard() and ungrabKeyboard() functions are used to 426 The grabKeyboard() and ungrabKeyboard() functions are used to
419 control whether the application takes control of the device's 427 control whether the application takes control of the device's
420 physical buttons (e.g. application launch keys). The stylus' mode of 428 physical buttons (e.g. application launch keys). The stylus' mode of
421 operation is set with setStylusOperation() and retrieved with 429 operation is set with setStylusOperation() and retrieved with
422 stylusOperation(). There are also setInputMethodHint() and 430 stylusOperation(). There are also setInputMethodHint() and
423 inputMethodHint() functions. 431 inputMethodHint() functions.
424 432
425 \ingroup qtopiaemb 433 \ingroup qtopiaemb
426*/ 434*/
427 435
428/*! 436/*!
429 \fn void QPEApplication::clientMoused() 437 \fn void QPEApplication::clientMoused()
430 438
431 \internal 439 \internal
432*/ 440*/
433 441
434/*! 442/*!
435 \fn void QPEApplication::timeChanged(); 443 \fn void QPEApplication::timeChanged();
436 This signal is emitted when the time changes outside the normal 444 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. 445 passage of time, i.e. if the time is set backwards or forwards.
438*/ 446*/
439 447
440/*! 448/*!
441 \fn void QPEApplication::clockChanged( bool ampm ); 449 \fn void QPEApplication::clockChanged( bool ampm );
442 450
443 This signal is emitted when the user changes the clock's style. If 451 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, 452 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise,
445 they want a 24-hour clock. 453 they want a 24-hour clock.
446*/ 454*/
447 455
448/*! 456/*!
449 \fn void QPEApplication::volumeChanged( bool muted ) 457 \fn void QPEApplication::volumeChanged( bool muted )
450 458
451 This signal is emitted whenever the mute state is changed. If \a 459 This signal is emitted whenever the mute state is changed. If \a
452 muted is TRUE, then sound output has been muted. 460 muted is TRUE, then sound output has been muted.
453*/ 461*/
454 462
455/*! 463/*!
456 \fn void QPEApplication::weekChanged( bool startOnMonday ) 464 \fn void QPEApplication::weekChanged( bool startOnMonday )
457 465
458 This signal is emitted if the week start day is changed. If \a 466 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 467 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 468 \a startOnMonday is FALSE then the first day of the week is
461 Sunday. 469 Sunday.
462*/ 470*/
463 471
464/*! 472/*!
465 \fn void QPEApplication::dateFormatChanged(DateFormat) 473 \fn void QPEApplication::dateFormatChanged(DateFormat)
466 474
467 This signal is emitted whenever the date format is changed. 475 This signal is emitted whenever the date format is changed.
468*/ 476*/
469 477
470/*! 478/*!
471 \fn void QPEApplication::flush() 479 \fn void QPEApplication::flush()
472 480
473 ### 481 ###
474*/ 482*/
475 483
476/*! 484/*!
477 \fn void QPEApplication::reload() 485 \fn void QPEApplication::reload()
478 486
479*/ 487*/
480 488
481/*! 489/*!
482 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 490 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
483 491
484 This signal is emitted when a message is received on this 492 This signal is emitted when a message is received on this
485 application's QPE/Application/<i>appname</i> \link qcop.html 493 application's QPE/Application/<i>appname</i> \link qcop.html
486 QCop\endlink channel. 494 QCop\endlink channel.
487 495
488 The slot to which you connect this signal uses \a msg and \a data 496 The slot to which you connect this signal uses \a msg and \a data
489 in the following way: 497 in the following way:
490 498
491\code 499\code
492 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 500 void MyWidget::receive( const QCString& msg, const QByteArray& data )
493 { 501 {
494 QDataStream stream( data, IO_ReadOnly ); 502 QDataStream stream( data, IO_ReadOnly );
495 if ( msg == "someMessage(int,int,int)" ) { 503 if ( msg == "someMessage(int,int,int)" ) {
496 int a,b,c; 504 int a,b,c;
497 stream >> a >> b >> c; 505 stream >> a >> b >> c;
498 ... 506 ...
499 } else if ( msg == "otherMessage(QString)" ) { 507 } else if ( msg == "otherMessage(QString)" ) {
500 ... 508 ...
501 } 509 }
502 } 510 }
503\endcode 511\endcode
504 512
505 \sa qcop.html 513 \sa qcop.html
506 Note that messages received here may be processed by qpe application 514 Note that messages received here may be processed by qpe application
507 and emitted as signals, such as flush() and reload(). 515 and emitted as signals, such as flush() and reload().
508*/ 516*/
509 517
510/*! 518/*!
511 Constructs a QPEApplication just as you would construct 519 Constructs a QPEApplication just as you would construct
512 a QApplication, passing \a argc, \a argv, and \a t. 520 a QApplication, passing \a argc, \a argv, and \a t.
513 521
514 For applications, \a t should be the default, GuiClient. Only 522 For applications, \a t should be the default, GuiClient. Only
515 the Qtopia server passes GuiServer. 523 the Qtopia server passes GuiServer.
516*/ 524*/
517QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 525QPEApplication::QPEApplication( int & argc, char **argv, Type t )
518 : QApplication( argc, argv, t ) 526 : QApplication( argc, argv, t )
519{ 527{
520 d = new QPEApplicationData; 528 d = new QPEApplicationData;
521 d->loadTextCodecs(); 529 d->loadTextCodecs();
522 d->loadImageCodecs(); 530 d->loadImageCodecs();
523 int dw = desktop() ->width(); 531 int dw = desktop() ->width();
524 532
525 if ( dw < 200 ) { 533 if ( dw < 200 ) {
526 setFont( QFont( "vera", 8 ) ); 534 setFont( QFont( "vera", 8 ) );
527 AppLnk::setSmallIconSize( 10 ); 535 AppLnk::setSmallIconSize( 10 );
528 AppLnk::setBigIconSize( 28 ); 536 AppLnk::setBigIconSize( 28 );
529 } 537 }
530#ifndef QT_QWS_SIMPAD 538#ifndef QT_QWS_SIMPAD
531 else if ( dw > 600 ) { 539 else if ( dw > 600 ) {
532 setFont( QFont( "vera", 16 ) ); 540 setFont( QFont( "vera", 16 ) );
533 AppLnk::setSmallIconSize( 24 ); 541 AppLnk::setSmallIconSize( 24 );
534 AppLnk::setBigIconSize( 48 ); 542 AppLnk::setBigIconSize( 48 );
535 } 543 }
536#endif 544#endif
537 else if ( dw > 200 ) { 545 else if ( dw > 200 ) {
538 setFont( QFont( "vera", 10 ) ); 546 setFont( QFont( "vera", 10 ) );
539 AppLnk::setSmallIconSize( 14 ); 547 AppLnk::setSmallIconSize( 14 );
540 AppLnk::setBigIconSize( 32 ); 548 AppLnk::setBigIconSize( 32 );
541 } 549 }
542 550
543 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 551 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
544 552
545 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 553 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
546#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 554#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
547 555
548 QString qcopfn( "/tmp/qcop-msg-" ); 556 QString qcopfn( "/tmp/qcop-msg-" );
549 qcopfn += QString( argv[ 0 ] ); // append command name 557 qcopfn += QString( argv[ 0 ] ); // append command name
550 558
551 QFile f( qcopfn ); 559 QFile f( qcopfn );
552 if ( f.open( IO_ReadOnly ) ) { 560 if ( f.open( IO_ReadOnly ) ) {
553 flock( f.handle(), LOCK_EX ); 561 flock( f.handle(), LOCK_EX );
554 } 562 }
555 563
556 sysChannel = new QCopChannel( "QPE/System", this ); 564 sysChannel = new QCopChannel( "QPE/System", this );
557 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 565 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
558 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); 566 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) );
559 567
560 QCString channel = QCString( argv[ 0 ] ); 568 QCString channel = QCString( argv[ 0 ] );
561 channel.replace( QRegExp( ".*/" ), "" ); 569 channel.replace( QRegExp( ".*/" ), "" );
562 d->appName = channel; 570 d->appName = channel;
563 channel = "QPE/Application/" + channel; 571 channel = "QPE/Application/" + channel;
564 pidChannel = new QCopChannel( channel, this ); 572 pidChannel = new QCopChannel( channel, this );
565 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 573 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
566 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); 574 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) );
567 575
568 if ( f.isOpen() ) { 576 if ( f.isOpen() ) {
569 d->keep_running = FALSE; 577 d->keep_running = FALSE;
570 QDataStream ds( &f ); 578 QDataStream ds( &f );
571 QCString channel, message; 579 QCString channel, message;
572 QByteArray data; 580 QByteArray data;
573 while ( !ds.atEnd() ) { 581 while ( !ds.atEnd() ) {
574 ds >> channel >> message >> data; 582 ds >> channel >> message >> data;
575 d->enqueueQCop( channel, message, data ); 583 d->enqueueQCop( channel, message, data );
576 } 584 }
577 585
578 flock( f.handle(), LOCK_UN ); 586 flock( f.handle(), LOCK_UN );
579 f.close(); 587 f.close();
580 f.remove(); 588 f.remove();
581 } 589 }
582 590
583 for ( int a = 0; a < argc; a++ ) { 591 for ( int a = 0; a < argc; a++ ) {
584 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 592 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
585 argv[ a ] = argv[ a + 1 ]; 593 argv[ a ] = argv[ a + 1 ];
586 a++; 594 a++;
587 d->preloaded = TRUE; 595 d->preloaded = TRUE;
588 argc -= 1; 596 argc -= 1;
589 } 597 }
590 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 598 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
591 argv[ a ] = argv[ a + 1 ]; 599 argv[ a ] = argv[ a + 1 ];
592 a++; 600 a++;
593 d->preloaded = TRUE; 601 d->preloaded = TRUE;
594 d->forceshow = TRUE; 602 d->forceshow = TRUE;
595 argc -= 1; 603 argc -= 1;
596 } 604 }
597 } 605 }
598 606
599 /* overide stored arguments */ 607 /* overide stored arguments */
600 setArgs( argc, argv ); 608 setArgs( argc, argv );
601 609
602#endif 610#endif
603 611
604 // qwsSetDecoration( new QPEDecoration() ); 612 // qwsSetDecoration( new QPEDecoration() );
605 613
606#ifndef QT_NO_TRANSLATION 614#ifndef QT_NO_TRANSLATION
607 615
608 QStringList langs = Global::languageList(); 616 QStringList langs = Global::languageList();
609 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) { 617 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) {
610 QString lang = *it; 618 QString lang = *it;
611 619
612 installTranslation( lang + "/libopie.qm"); 620 installTranslation( lang + "/libopie.qm");
613 installTranslation( lang + "/libqpe.qm" ); 621 installTranslation( lang + "/libqpe.qm" );
614 installTranslation( lang + "/" + d->appName + ".qm" ); 622 installTranslation( lang + "/" + d->appName + ".qm" );
615 623
616 624
617 //###language/font hack; should look it up somewhere 625 //###language/font hack; should look it up somewhere
618#ifdef QWS 626#ifdef QWS
619 627
620 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 628 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
621 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 629 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
622 setFont( fn ); 630 setFont( fn );
623 } 631 }
624#endif 632#endif
625 633
626 } 634 }
627#endif 635#endif
628 636
629 applyStyle(); 637 applyStyle();
630 638
631 if ( type() == GuiServer ) { 639 if ( type() == GuiServer ) {
632 setVolume(); 640 setVolume();
633 } 641 }
634 642
635 installEventFilter( this ); 643 installEventFilter( this );
636 644
637 QPEMenuToolFocusManager::initialize(); 645 QPEMenuToolFocusManager::initialize();
638 646
639#ifdef QT_NO_QWS_CURSOR 647#ifdef QT_NO_QWS_CURSOR
640 // if we have no cursor, probably don't want tooltips 648 // if we have no cursor, probably don't want tooltips
641 QToolTip::setEnabled( FALSE ); 649 QToolTip::setEnabled( FALSE );
642#endif 650#endif
643} 651}
644 652
645static QPtrDict<void>* inputMethodDict = 0; 653static QPtrDict<void>* inputMethodDict = 0;
646static void createInputMethodDict() 654static void createInputMethodDict()
647{ 655{
648 if ( !inputMethodDict ) 656 if ( !inputMethodDict )
649 inputMethodDict = new QPtrDict<void>; 657 inputMethodDict = new QPtrDict<void>;
650} 658}
651 659
652/*! 660/*!
653 Returns the currently set hint to the system as to whether 661 Returns the currently set hint to the system as to whether
654 widget \a w has any use for text input methods. 662 widget \a w has any use for text input methods.
655 663
656 664
657 \sa setInputMethodHint() InputMethodHint 665 \sa setInputMethodHint() InputMethodHint
658*/ 666*/
659QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 667QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
660{ 668{
661 if ( inputMethodDict && w ) 669 if ( inputMethodDict && w )
662 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 670 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
663 return Normal; 671 return Normal;
664} 672}
665 673
666/*! 674/*!
667 \enum QPEApplication::InputMethodHint 675 \enum QPEApplication::InputMethodHint
668 676
669 \value Normal the application sometimes needs text input (the default). 677 \value Normal the application sometimes needs text input (the default).
670 \value AlwaysOff the application never needs text input. 678 \value AlwaysOff the application never needs text input.
671 \value AlwaysOn the application always needs text input. 679 \value AlwaysOn the application always needs text input.
672*/ 680*/
673 681
674/*! 682/*!
675 Hints to the system that widget \a w has use for text input methods 683 Hints to the system that widget \a w has use for text input methods
676 as specified by \a mode. 684 as specified by \a mode.
677 685
678 \sa inputMethodHint() InputMethodHint 686 \sa inputMethodHint() InputMethodHint
679*/ 687*/
680void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 688void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
681{ 689{
682 createInputMethodDict(); 690 createInputMethodDict();
683 if ( mode == Normal ) { 691 if ( mode == Normal ) {
684 inputMethodDict->remove 692 inputMethodDict->remove
685 ( w ); 693 ( w );
686 } 694 }
687 else { 695 else {
688 inputMethodDict->insert( w, ( void* ) mode ); 696 inputMethodDict->insert( w, ( void* ) mode );
689 } 697 }
690} 698}
691 699
692class HackDialog : public QDialog 700class HackDialog : public QDialog
693{ 701{
694public: 702public:
695 void acceptIt() 703 void acceptIt()
696 { 704 {
697 accept(); 705 accept();
698 } 706 }
699 void rejectIt() 707 void rejectIt()
700 { 708 {
701 reject(); 709 reject();
702 } 710 }
703}; 711};
704 712
705 713
706void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 714void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
707{ 715{
708 // specialised actions for certain widgets. May want to 716 // specialised actions for certain widgets. May want to
709 // add more stuff here. 717 // add more stuff here.
710 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 718 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
711 && activePopupWidget() ->parentWidget() 719 && activePopupWidget() ->parentWidget()
712 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 720 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
713 key = Qt::Key_Return; 721 key = Qt::Key_Return;
714 722
715 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 723 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
716 key = Qt::Key_Return; 724 key = Qt::Key_Return;
717 725
718#ifdef QWS 726#ifdef QWS
719 727
720 ke->simpleData.keycode = key; 728 ke->simpleData.keycode = key;
721#endif 729#endif
722} 730}
723 731
724class HackWidget : public QWidget 732class HackWidget : public QWidget
725{ 733{
726public: 734public:
727 bool needsOk() 735 bool needsOk()
728 { 736 {
729 return ( getWState() & WState_Reserved1 ); 737 return ( getWState() & WState_Reserved1 );
730 } 738 }
731}; 739};
732 740
733/*! 741/*!
734 \internal 742 \internal
735*/ 743*/
736 744
737#ifdef QWS 745#ifdef QWS
738bool QPEApplication::qwsEventFilter( QWSEvent * e ) 746bool QPEApplication::qwsEventFilter( QWSEvent * e )
739{ 747{
740 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 748 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
741 if ( qApp->type() != QApplication::GuiServer ) { 749 if ( qApp->type() != QApplication::GuiServer ) {
742 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 750 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
743 e << d->appName; 751 e << d->appName;
744 } 752 }
745 d->notbusysent = TRUE; 753 d->notbusysent = TRUE;
746 } 754 }
747 if ( type() == GuiServer ) { 755 if ( type() == GuiServer ) {
748 switch ( e->type ) { 756 switch ( e->type ) {
749 case QWSEvent::Mouse: 757 case QWSEvent::Mouse:
750 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 758 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
751 emit clientMoused(); 759 emit clientMoused();
752 break; 760 break;
753 default: 761 default:
754 break; 762 break;
755 } 763 }
756 } 764 }
757 if ( e->type == QWSEvent::Key ) { 765 if ( e->type == QWSEvent::Key ) {
758 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 766 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
759 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 767 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
760 // Use special "OK" key to press "OK" on top level widgets 768 // Use special "OK" key to press "OK" on top level widgets
761 QWidget * active = activeWindow(); 769 QWidget * active = activeWindow();
762 QWidget *popup = 0; 770 QWidget *popup = 0;
763 if ( active && active->isPopup() ) { 771 if ( active && active->isPopup() ) {
764 popup = active; 772 popup = active;
765 active = active->parentWidget(); 773 active = active->parentWidget();
766 } 774 }
767 if ( active && ( int ) active->winId() == ke->simpleData.window && 775 if ( active && ( int ) active->winId() == ke->simpleData.window &&
768 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 776 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
769 if ( ke->simpleData.is_press ) { 777 if ( ke->simpleData.is_press ) {
770 if ( popup ) 778 if ( popup )
771 popup->close(); 779 popup->close();
772 if ( active->inherits( "QDialog" ) ) { 780 if ( active->inherits( "QDialog" ) ) {
773 HackDialog * d = ( HackDialog * ) active; 781 HackDialog * d = ( HackDialog * ) active;
774 d->acceptIt(); 782 d->acceptIt();
775 return TRUE; 783 return TRUE;
776 } 784 }
777 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 785 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
778 QSignal s; 786 QSignal s;
779 s.connect( active, SLOT( accept() ) ); 787 s.connect( active, SLOT( accept() ) );
780 s.activate(); 788 s.activate();
781 } 789 }
782 else { 790 else {
783 // do the same as with the select key: Map to the default action of the widget: 791 // do the same as with the select key: Map to the default action of the widget:
784 mapToDefaultAction( ke, Qt::Key_Return ); 792 mapToDefaultAction( ke, Qt::Key_Return );
785 } 793 }
786 } 794 }
787 } 795 }
788 } 796 }
789 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 797 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
790 // Use special "select" key to do whatever default action a widget has 798 // Use special "select" key to do whatever default action a widget has
791 mapToDefaultAction( ke, Qt::Key_Space ); 799 mapToDefaultAction( ke, Qt::Key_Space );
792 } 800 }
793 else if ( ke->simpleData.keycode == Qt::Key_Escape && 801 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
794 ke->simpleData.is_press ) { 802 ke->simpleData.is_press ) {
795 // Escape key closes app if focus on toplevel 803 // Escape key closes app if focus on toplevel
796 QWidget * active = activeWindow(); 804 QWidget * active = activeWindow();
797 if ( active && active->testWFlags( WType_TopLevel ) && 805 if ( active && active->testWFlags( WType_TopLevel ) &&
798 ( int ) active->winId() == ke->simpleData.window && 806 ( int ) active->winId() == ke->simpleData.window &&
799 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 807 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
800 if ( active->inherits( "QDialog" ) ) { 808 if ( active->inherits( "QDialog" ) ) {
801 HackDialog * d = ( HackDialog * ) active; 809 HackDialog * d = ( HackDialog * ) active;
802 d->rejectIt(); 810 d->rejectIt();
803 return TRUE; 811 return TRUE;
804 } 812 }
805 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 813 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
806 active->close(); 814 active->close();
807 } 815 }
808 } 816 }
809 } 817 }
810 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { 818 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) {
811 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) 819 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... ))
812 // but we cannot access libopie function within libqpe :( 820 // but we cannot access libopie function within libqpe :(
813 821
814 QWidget * active = activeWindow ( ); 822 QWidget * active = activeWindow ( );
815 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { 823 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) {
816 if ( d-> kbgrabbed ) { // we grabbed the keyboard 824 if ( d-> kbgrabbed ) { // we grabbed the keyboard
817 QChar ch ( ke-> simpleData.unicode ); 825 QChar ch ( ke-> simpleData.unicode );
818 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, 826 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease,
819 ke-> simpleData.keycode, 827 ke-> simpleData.keycode,
820 ch. latin1 ( ), 828 ch. latin1 ( ),
821 ke-> simpleData.modifiers, 829 ke-> simpleData.modifiers,
822 QString ( ch ), 830 QString ( ch ),
823 ke-> simpleData.is_auto_repeat, 1 ); 831 ke-> simpleData.is_auto_repeat, 1 );
824 832
825 QObject *which = QWidget::keyboardGrabber ( ); 833 QObject *which = QWidget::keyboardGrabber ( );
826 if ( !which ) 834 if ( !which )
827 which = QApplication::focusWidget ( ); 835 which = QApplication::focusWidget ( );
828 if ( !which ) 836 if ( !which )
829 which = QApplication::activeWindow ( ); 837 which = QApplication::activeWindow ( );
830 if ( !which ) 838 if ( !which )
831 which = qApp; 839 which = qApp;
832 840
833 QApplication::sendEvent ( which, &qke ); 841 QApplication::sendEvent ( which, &qke );
834 } 842 }
835 else { // we didn't grab the keyboard, so send the event to the launcher 843 else { // we didn't grab the keyboard, so send the event to the launcher
836 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); 844 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 ); 845 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat );
838 } 846 }
839 } 847 }
840 return true; 848 return true;
841 } 849 }
842 } 850 }
843 if ( e->type == QWSEvent::Focus ) { 851 if ( e->type == QWSEvent::Focus ) {
844 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 852 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
845 if ( !fe->simpleData.get_focus ) { 853 if ( !fe->simpleData.get_focus ) {
846 QWidget * active = activeWindow(); 854 QWidget * active = activeWindow();
847 while ( active && active->isPopup() ) { 855 while ( active && active->isPopup() ) {
848 active->close(); 856 active->close();
849 active = activeWindow(); 857 active = activeWindow();
850 } 858 }
851 } 859 }
852 else { 860 else {
853 // make sure our modal widget is ALWAYS on top 861 // make sure our modal widget is ALWAYS on top
854 QWidget *topm = activeModalWidget(); 862 QWidget *topm = activeModalWidget();
855 if ( topm ) { 863 if ( topm ) {
856 topm->raise(); 864 topm->raise();
857 } 865 }
858 } 866 }
859 if ( fe->simpleData.get_focus && inputMethodDict ) { 867 if ( fe->simpleData.get_focus && inputMethodDict ) {
860 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 868 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
861 if ( m == AlwaysOff ) 869 if ( m == AlwaysOff )
862 Global::hideInputMethod(); 870 Global::hideInputMethod();
863 if ( m == AlwaysOn ) 871 if ( m == AlwaysOn )
864 Global::showInputMethod(); 872 Global::showInputMethod();
865 } 873 }
866 } 874 }
867 875
868 876
869 return QApplication::qwsEventFilter( e ); 877 return QApplication::qwsEventFilter( e );
870} 878}
871#endif 879#endif
872 880
873/*! 881/*!
874 Destroys the QPEApplication. 882 Destroys the QPEApplication.
875*/ 883*/
876QPEApplication::~QPEApplication() 884QPEApplication::~QPEApplication()
877{ 885{
878 ungrabKeyboard(); 886 ungrabKeyboard();
879#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 887#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
880 // Need to delete QCopChannels early, since the display will 888 // Need to delete QCopChannels early, since the display will
881 // be gone by the time we get to ~QObject(). 889 // be gone by the time we get to ~QObject().
882 delete sysChannel; 890 delete sysChannel;
883 delete pidChannel; 891 delete pidChannel;
884#endif 892#endif
885 893
886 delete d; 894 delete d;
887} 895}
888 896
889/*! 897/*!
890 Returns <tt>$OPIEDIR/</tt>. 898 Returns <tt>$OPIEDIR/</tt>.
891*/ 899*/
892QString QPEApplication::qpeDir() 900QString QPEApplication::qpeDir()
893{ 901{
894 const char * base = getenv( "OPIEDIR" ); 902 const char * base = getenv( "OPIEDIR" );
895 if ( base ) 903 if ( base )
896 return QString( base ) + "/"; 904 return QString( base ) + "/";
897 905
898 return QString( "../" ); 906 return QString( "../" );
899} 907}
900 908
901/*! 909/*!
902 Returns the user's current Document directory. There is a trailing "/". 910 Returns the user's current Document directory. There is a trailing "/".
903 .. well, it does now,, and there's no trailing '/' 911 .. well, it does now,, and there's no trailing '/'
904*/ 912*/
905QString QPEApplication::documentDir() 913QString QPEApplication::documentDir()
906{ 914{
907 const char* base = getenv( "HOME"); 915 const char* base = getenv( "HOME");
908 if ( base ) 916 if ( base )
909 return QString( base ) + "/Documents"; 917 return QString( base ) + "/Documents";
910 918
911 return QString( "../Documents" ); 919 return QString( "../Documents" );
912} 920}
913 921
914static int deforient = -1; 922static int deforient = -1;
915 923
916/*! 924/*!
917 \internal 925 \internal
918*/ 926*/
919int QPEApplication::defaultRotation() 927int QPEApplication::defaultRotation()
920{ 928{
921 if ( deforient < 0 ) { 929 if ( deforient < 0 ) {
922 QString d = getenv( "QWS_DISPLAY" ); 930 QString d = getenv( "QWS_DISPLAY" );
923 if ( d.contains( "Rot90" ) ) { 931 if ( d.contains( "Rot90" ) ) {
924 deforient = 90; 932 deforient = 90;
925 } 933 }
926 else if ( d.contains( "Rot180" ) ) { 934 else if ( d.contains( "Rot180" ) ) {
927 deforient = 180; 935 deforient = 180;
928 } 936 }
929 else if ( d.contains( "Rot270" ) ) { 937 else if ( d.contains( "Rot270" ) ) {
930 deforient = 270; 938 deforient = 270;
931 } 939 }
932 else { 940 else {
933 deforient = 0; 941 deforient = 0;
934 } 942 }
935 } 943 }
936 return deforient; 944 return deforient;
937} 945}
938 946
939/*! 947/*!
940 \internal 948 \internal
941*/ 949*/
942void QPEApplication::setDefaultRotation( int r ) 950void QPEApplication::setDefaultRotation( int r )
943{ 951{
944 if ( qApp->type() == GuiServer ) { 952 if ( qApp->type() == GuiServer ) {
945 deforient = r; 953 deforient = r;
946 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 954 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
947 Config config("qpe"); 955 Config config("qpe");
948 config.setGroup( "Rotation" ); 956 config.setGroup( "Rotation" );
949 config.writeEntry( "Rot", r ); 957 config.writeEntry( "Rot", r );
950 } 958 }
951 else { 959 else {
952#ifndef QT_NO_COP 960#ifndef QT_NO_COP
953 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 961 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
954 e << r; 962 e << r;
955 } 963 }
956#endif 964#endif
957 965
958 } 966 }
959} 967}
960 968
961 969
962/*! 970/*!
963 \internal 971 \internal
964*/ 972*/
965void QPEApplication::applyStyle() 973void QPEApplication::applyStyle()
966{ 974{
967 Config config( "qpe" ); 975 Config config( "qpe" );
968 config.setGroup( "Appearance" ); 976 config.setGroup( "Appearance" );
969 977
970 #if QT_VERSION > 233 978 #if QT_VERSION > 233
971 // don't block ourselves ... 979 // don't block ourselves ...
972 Opie::force_appearance = 0; 980 Opie::force_appearance = 0;
973 981
974 static QString appname = Opie::binaryName ( ); 982 static QString appname = Opie::binaryName ( );
975 983
976 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 984 QStringList ex = config. readListEntry ( "NoStyle", ';' );
977 int nostyle = 0; 985 int nostyle = 0;
978 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 986 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
979 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 987 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
980 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 988 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
981 break; 989 break;
982 } 990 }
983 } 991 }
984 992
985 // Widget style 993 // Widget style
986 QString style = config.readEntry( "Style", "Light" ); 994 QString style = config.readEntry( "Style", "FlatStyle" );
987 995
988 // don't set a custom style 996 // don't set a custom style
989 if ( nostyle & Opie::Force_Style ) 997 if ( nostyle & Opie::Force_Style )
990 style = "Light"; 998 style = "FlatStyle";
991 999
992 internalSetStyle ( style ); 1000 internalSetStyle ( style );
993 1001
994 // Colors 1002 // Colors - from /etc/colors/Liquid.scheme
995 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); 1003 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) );
996 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); 1004 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) );
997 QPalette pal( btncolor, bgcolor ); 1005 QPalette pal( btncolor, bgcolor );
998 QString color = config.readEntry( "Highlight", "#800000" ); 1006 QString color = config.readEntry( "Highlight", "#73adef" );
999 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 1007 pal.setColor( QColorGroup::Highlight, QColor( color ) );
1000 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 1008 color = config.readEntry( "HighlightedText", "#FFFFFF" );
1001 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 1009 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
1002 color = config.readEntry( "Text", "#000000" ); 1010 color = config.readEntry( "Text", "#000000" );
1003 pal.setColor( QColorGroup::Text, QColor( color ) ); 1011 pal.setColor( QColorGroup::Text, QColor( color ) );
1004 color = config.readEntry( "ButtonText", "#000000" ); 1012 color = config.readEntry( "ButtonText", "#000000" );
1005 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 1013 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
1006 color = config.readEntry( "Base", "#FFFFFF" ); 1014 color = config.readEntry( "Base", "#FFFFFF" );
1007 pal.setColor( QColorGroup::Base, QColor( color ) ); 1015 pal.setColor( QColorGroup::Base, QColor( color ) );
1008 1016
1009 pal.setColor( QPalette::Disabled, QColorGroup::Text, 1017 pal.setColor( QPalette::Disabled, QColorGroup::Text,
1010 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 1018 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
1011 1019
1012 setPalette( pal, TRUE ); 1020 setPalette( pal, TRUE );
1013 1021
1014 // Window Decoration 1022 // Window Decoration
1015 QString dec = config.readEntry( "Decoration", "Qtopia" ); 1023 QString dec = config.readEntry( "Decoration", "Flat" );
1016 1024
1017 // don't set a custom deco 1025 // don't set a custom deco
1018 if ( nostyle & Opie::Force_Decoration ) 1026 if ( nostyle & Opie::Force_Decoration )
1019 dec = ""; 1027 dec = "";
1020 1028
1021 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle); 1029 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
1022 1030
1023 if ( dec != d->decorationName ) { 1031 if ( dec != d->decorationName ) {
1024 qwsSetDecoration( new QPEDecoration( dec ) ); 1032 qwsSetDecoration( new QPEDecoration( dec ) );
1025 d->decorationName = dec; 1033 d->decorationName = dec;
1026 } 1034 }
1027 1035
1028 // Font 1036 // Font
1029 QString ff = config.readEntry( "FontFamily", font().family() ); 1037 QString ff = config.readEntry( "FontFamily", font().family() );
1030 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 1038 int fs = config.readNumEntry( "FontSize", font().pointSize() );
1031 1039
1032 // don't set a custom font 1040 // don't set a custom font
1033 if ( nostyle & Opie::Force_Font ) { 1041 if ( nostyle & Opie::Force_Font ) {
1034 ff = "Vera"; 1042 ff = "Vera";
1035 fs = 10; 1043 fs = 10;
1036 } 1044 }
1037 1045
1038 setFont ( QFont ( ff, fs ), true ); 1046 setFont ( QFont ( ff, fs ), true );
1039 1047
1040 // revert to global blocking policy ... 1048 // revert to global blocking policy ...
1041 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None; 1049 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None;
1042 Opie::force_appearance &= ~nostyle; 1050 Opie::force_appearance &= ~nostyle;
1043 #endif 1051 #endif
1044} 1052}
1045 1053
1046void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1054void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1047{ 1055{
1048#ifdef Q_WS_QWS 1056#ifdef Q_WS_QWS
1049 QDataStream stream( data, IO_ReadOnly ); 1057 QDataStream stream( data, IO_ReadOnly );
1050 if ( msg == "applyStyle()" ) { 1058 if ( msg == "applyStyle()" ) {
1051 applyStyle(); 1059 applyStyle();
1052 } 1060 }
1053 else if ( msg == "toggleApplicationMenu()" ) { 1061 else if ( msg == "toggleApplicationMenu()" ) {
1054 QWidget *active = activeWindow ( ); 1062 QWidget *active = activeWindow ( );
1055 1063
1056 if ( active ) { 1064 if ( active ) {
1057 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( ); 1065 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( );
1058 bool oldactive = man-> isActive ( ); 1066 bool oldactive = man-> isActive ( );
1059 1067
1060 man-> setActive( !man-> isActive() ); 1068 man-> setActive( !man-> isActive() );
1061 1069
1062 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu 1070 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu
1063 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" ); 1071 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" );
1064 } 1072 }
1065 } 1073 }
1066 } 1074 }
1067 else if ( msg == "setDefaultRotation(int)" ) { 1075 else if ( msg == "setDefaultRotation(int)" ) {
1068 if ( type() == GuiServer ) { 1076 if ( type() == GuiServer ) {
1069 int r; 1077 int r;
1070 stream >> r; 1078 stream >> r;
1071 setDefaultRotation( r ); 1079 setDefaultRotation( r );
1072 } 1080 }
1073 } 1081 }
1074 else if ( msg == "setCurrentRotation(int)" ) { 1082 else if ( msg == "setCurrentRotation(int)" ) {
1075 int r; 1083 int r;
1076 stream >> r; 1084 stream >> r;
1077 setCurrentRotation( r ); 1085 setCurrentRotation( r );
1078 } 1086 }
1079 else if ( msg == "shutdown()" ) { 1087 else if ( msg == "shutdown()" ) {
1080 if ( type() == GuiServer ) 1088 if ( type() == GuiServer )
1081 shutdown(); 1089 shutdown();
1082 } 1090 }
1083 else if ( msg == "quit()" ) { 1091 else if ( msg == "quit()" ) {
1084 if ( type() != GuiServer ) 1092 if ( type() != GuiServer )
1085 tryQuit(); 1093 tryQuit();
1086 } 1094 }
1087 else if ( msg == "forceQuit()" ) { 1095 else if ( msg == "forceQuit()" ) {
1088 if ( type() != GuiServer ) 1096 if ( type() != GuiServer )
1089 quit(); 1097 quit();
1090 } 1098 }
1091 else if ( msg == "restart()" ) { 1099 else if ( msg == "restart()" ) {
1092 if ( type() == GuiServer ) 1100 if ( type() == GuiServer )
1093 restart(); 1101 restart();
1094 } 1102 }
1095 else if ( msg == "language(QString)" ) { 1103 else if ( msg == "language(QString)" ) {
1096 if ( type() == GuiServer ) { 1104 if ( type() == GuiServer ) {
1097 QString l; 1105 QString l;
1098 stream >> l; 1106 stream >> l;
1099 QString cl = getenv( "LANG" ); 1107 QString cl = getenv( "LANG" );
1100 if ( cl != l ) { 1108 if ( cl != l ) {
1101 if ( l.isNull() ) 1109 if ( l.isNull() )
1102 unsetenv( "LANG" ); 1110 unsetenv( "LANG" );
1103 else 1111 else
1104 setenv( "LANG", l.latin1(), 1 ); 1112 setenv( "LANG", l.latin1(), 1 );
1105 restart(); 1113 restart();
1106 } 1114 }
1107 } 1115 }
1108 } 1116 }
1109 else if ( msg == "timeChange(QString)" ) { 1117 else if ( msg == "timeChange(QString)" ) {
1110 QString t; 1118 QString t;
1111 stream >> t; 1119 stream >> t;
1112 if ( t.isNull() ) 1120 if ( t.isNull() )
1113 unsetenv( "TZ" ); 1121 unsetenv( "TZ" );
1114 else 1122 else
1115 setenv( "TZ", t.latin1(), 1 ); 1123 setenv( "TZ", t.latin1(), 1 );
1116 // emit the signal so everyone else knows... 1124 // emit the signal so everyone else knows...
1117 emit timeChanged(); 1125 emit timeChanged();
1118 } 1126 }
1119 else if ( msg == "execute(QString)" ) { 1127 else if ( msg == "execute(QString)" ) {
1120 if ( type() == GuiServer ) { 1128 if ( type() == GuiServer ) {
1121 QString t; 1129 QString t;
1122 stream >> t; 1130 stream >> t;
1123 Global::execute( t ); 1131 Global::execute( t );
1124 } 1132 }
1125 } 1133 }
1126 else if ( msg == "execute(QString,QString)" ) { 1134 else if ( msg == "execute(QString,QString)" ) {
1127 if ( type() == GuiServer ) { 1135 if ( type() == GuiServer ) {
1128 QString t, d; 1136 QString t, d;
1129 stream >> t >> d; 1137 stream >> t >> d;
1130 Global::execute( t, d ); 1138 Global::execute( t, d );
1131 } 1139 }
1132 } 1140 }
1133 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1141 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1134 if ( type() == GuiServer ) { 1142 if ( type() == GuiServer ) {
1135 QDateTime when; 1143 QDateTime when;
1136 QCString channel, message; 1144 QCString channel, message;
1137 int data; 1145 int data;
1138 stream >> when >> channel >> message >> data; 1146 stream >> when >> channel >> message >> data;
1139 AlarmServer::addAlarm( when, channel, message, data ); 1147 AlarmServer::addAlarm( when, channel, message, data );
1140 } 1148 }
1141 } 1149 }
1142 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1150 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1143 if ( type() == GuiServer ) { 1151 if ( type() == GuiServer ) {
1144 QDateTime when; 1152 QDateTime when;
1145 QCString channel, message; 1153 QCString channel, message;
1146 int data; 1154 int data;
1147 stream >> when >> channel >> message >> data; 1155 stream >> when >> channel >> message >> data;
1148 AlarmServer::deleteAlarm( when, channel, message, data ); 1156 AlarmServer::deleteAlarm( when, channel, message, data );
1149 } 1157 }
1150 } 1158 }
1151 else if ( msg == "clockChange(bool)" ) { 1159 else if ( msg == "clockChange(bool)" ) {
1152 int tmp; 1160 int tmp;
1153 stream >> tmp; 1161 stream >> tmp;
1154 emit clockChanged( tmp ); 1162 emit clockChanged( tmp );
1155 } 1163 }
1156 else if ( msg == "weekChange(bool)" ) { 1164 else if ( msg == "weekChange(bool)" ) {
1157 int tmp; 1165 int tmp;
1158 stream >> tmp; 1166 stream >> tmp;
1159 emit weekChanged( tmp ); 1167 emit weekChanged( tmp );
1160 } 1168 }
1161 else if ( msg == "setDateFormat(DateFormat)" ) { 1169 else if ( msg == "setDateFormat(DateFormat)" ) {
1162 DateFormat tmp; 1170 DateFormat tmp;
1163 stream >> tmp; 1171 stream >> tmp;
1164 emit dateFormatChanged( tmp ); 1172 emit dateFormatChanged( tmp );
1165 } 1173 }
1166 else if ( msg == "setVolume(int,int)" ) { 1174 else if ( msg == "setVolume(int,int)" ) {
1167 int t, v; 1175 int t, v;
1168 stream >> t >> v; 1176 stream >> t >> v;
1169 setVolume( t, v ); 1177 setVolume( t, v );
1170 emit volumeChanged( muted ); 1178 emit volumeChanged( muted );
1171 } 1179 }
1172 else if ( msg == "volumeChange(bool)" ) { 1180 else if ( msg == "volumeChange(bool)" ) {
1173 stream >> muted; 1181 stream >> muted;
1174 setVolume(); 1182 setVolume();
1175 emit volumeChanged( muted ); 1183 emit volumeChanged( muted );
1176 } 1184 }
1177 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1185 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1178 int t, v; 1186 int t, v;
1179 stream >> t >> v; 1187 stream >> t >> v;
1180 setMic( t, v ); 1188 setMic( t, v );
1181 emit micChanged( micMuted ); 1189 emit micChanged( micMuted );
1182 } 1190 }
1183 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1191 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1184 stream >> micMuted; 1192 stream >> micMuted;
1185 setMic(); 1193 setMic();
1186 emit micChanged( micMuted ); 1194 emit micChanged( micMuted );
1187 } 1195 }
1188 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1196 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1189 int t, v; 1197 int t, v;
1190 stream >> t >> v; 1198 stream >> t >> v;
1191 setBass( t, v ); 1199 setBass( t, v );
1192 } 1200 }
1193 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1201 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1194 setBass(); 1202 setBass();
1195 } 1203 }
1196 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1204 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1197 int t, v; 1205 int t, v;
1198 stream >> t >> v; 1206 stream >> t >> v;
1199 setTreble( t, v ); 1207 setTreble( t, v );
1200 } 1208 }
1201 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1209 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1202 setTreble(); 1210 setTreble();
1203 } 1211 }
1204 1212
1205 1213
1206 1214
1207#endif 1215#endif
1208} 1216}
1209 1217
1210/*! 1218/*!
1211 \internal 1219 \internal
1212*/ 1220*/
1213bool QPEApplication::raiseAppropriateWindow() 1221bool QPEApplication::raiseAppropriateWindow()
1214{ 1222{
1215 bool r = FALSE; 1223 bool r = FALSE;
1216 // ########## raise()ing main window should raise and set active 1224 // ########## raise()ing main window should raise and set active
1217 // ########## it and then all childen. This belongs in Qt/Embedded 1225 // ########## it and then all childen. This belongs in Qt/Embedded
1218 QWidget *top = d->qpe_main_widget; 1226 QWidget *top = d->qpe_main_widget;
1219 if ( !top ) 1227 if ( !top )
1220 top = mainWidget(); 1228 top = mainWidget();
1221 if ( top && d->keep_running ) { 1229 if ( top && d->keep_running ) {
1222 if ( top->isVisible() ) 1230 if ( top->isVisible() )
1223 r = TRUE; 1231 r = TRUE;
1224 else if (d->preloaded) { 1232 else if (d->preloaded) {
1225 // We are preloaded and not visible.. pretend we just started.. 1233 // We are preloaded and not visible.. pretend we just started..
1226 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1234 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1227 e << d->appName; 1235 e << d->appName;
1228 } 1236 }
1229 1237
1230 d->show_mx(top, d->nomaximize); 1238 d->show_mx(top, d->nomaximize);
1231 top->raise(); 1239 top->raise();
1232 top->setActiveWindow(); 1240 top->setActiveWindow();
1233 } 1241 }
1234 QWidget *topm = activeModalWidget(); 1242 QWidget *topm = activeModalWidget();
1235 if ( topm && topm != top ) { 1243 if ( topm && topm != top ) {
1236 topm->show(); 1244 topm->show();
1237 topm->raise(); 1245 topm->raise();
1238 topm->setActiveWindow(); 1246 topm->setActiveWindow();
1239 // If we haven't already handled the fastAppShowing message 1247 // If we haven't already handled the fastAppShowing message
1240 if (!top && d->preloaded) { 1248 if (!top && d->preloaded) {
1241 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1249 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1242 e << d->appName; 1250 e << d->appName;
1243 } 1251 }
1244 r = FALSE; 1252 r = FALSE;
1245 } 1253 }
1246 return r; 1254 return r;
1247} 1255}
1248 1256
1249void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1257void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1250{ 1258{
1251#ifdef Q_WS_QWS 1259#ifdef Q_WS_QWS
1252 1260
1253 if ( msg == "quit()" ) { 1261 if ( msg == "quit()" ) {
1254 tryQuit(); 1262 tryQuit();
1255 } 1263 }
1256 else if ( msg == "quitIfInvisible()" ) { 1264 else if ( msg == "quitIfInvisible()" ) {
1257 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1265 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1258 quit(); 1266 quit();
1259 } 1267 }
1260 else if ( msg == "close()" ) { 1268 else if ( msg == "close()" ) {
1261 hideOrQuit(); 1269 hideOrQuit();
1262 } 1270 }
1263 else if ( msg == "disablePreload()" ) { 1271 else if ( msg == "disablePreload()" ) {
1264 d->preloaded = FALSE; 1272 d->preloaded = FALSE;
1265 d->keep_running = TRUE; 1273 d->keep_running = TRUE;
1266 /* so that quit will quit */ 1274 /* so that quit will quit */
1267 } 1275 }
1268 else if ( msg == "enablePreload()" ) { 1276 else if ( msg == "enablePreload()" ) {
1269 if (d->qpe_main_widget) 1277 if (d->qpe_main_widget)
1270 d->preloaded = TRUE; 1278 d->preloaded = TRUE;
1271 d->keep_running = TRUE; 1279 d->keep_running = TRUE;
1272 /* so next quit won't quit */ 1280 /* so next quit won't quit */
1273 } 1281 }
1274 else if ( msg == "raise()" ) { 1282 else if ( msg == "raise()" ) {
1275 d->keep_running = TRUE; 1283 d->keep_running = TRUE;
1276 d->notbusysent = FALSE; 1284 d->notbusysent = FALSE;
1277 raiseAppropriateWindow(); 1285 raiseAppropriateWindow();
1278 // Tell the system we're still chugging along... 1286 // Tell the system we're still chugging along...
1279 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1287 QCopEnvelope e("QPE/System", "appRaised(QString)");
1280 e << d->appName; 1288 e << d->appName;
1281 } 1289 }
1282 else if ( msg == "flush()" ) { 1290 else if ( msg == "flush()" ) {
1283 emit flush(); 1291 emit flush();
1284 // we need to tell the desktop 1292 // we need to tell the desktop
1285 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1293 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1286 e << d->appName; 1294 e << d->appName;
1287 } 1295 }
1288 else if ( msg == "reload()" ) { 1296 else if ( msg == "reload()" ) {
1289 emit reload(); 1297 emit reload();
1290 } 1298 }
1291 else if ( msg == "setDocument(QString)" ) { 1299 else if ( msg == "setDocument(QString)" ) {
1292 d->keep_running = TRUE; 1300 d->keep_running = TRUE;
1293 QDataStream stream( data, IO_ReadOnly ); 1301 QDataStream stream( data, IO_ReadOnly );
1294 QString doc; 1302 QString doc;
1295 stream >> doc; 1303 stream >> doc;
1296 QWidget *mw = mainWidget(); 1304 QWidget *mw = mainWidget();
1297 if ( !mw ) 1305 if ( !mw )
1298 mw = d->qpe_main_widget; 1306 mw = d->qpe_main_widget;
1299 if ( mw ) 1307 if ( mw )
1300 Global::setDocument( mw, doc ); 1308 Global::setDocument( mw, doc );
1309 } else {
1310 bool p = d->keep_running;
1311 d->keep_running = FALSE;
1312 emit appMessage( msg, data);
1313 if ( d->keep_running ) {
1314 d->notbusysent = FALSE;
1315 raiseAppropriateWindow();
1316 if ( !p ) {
1317 // Tell the system we're still chugging along...
1318#ifndef QT_NO_COP
1319 QCopEnvelope e("QPE/System", "appRaised(QString)");
1320 e << d->appName;
1321#endif
1322 }
1323 }
1324 if ( p )
1325 d->keep_running = p;
1301 } 1326 }
1302 else if ( msg == "nextView()" ) {
1303 qDebug("got nextView()");
1304 /*
1305 if ( raiseAppropriateWindow() )
1306 */
1307 emit appMessage( msg, data);
1308 }
1309 else {
1310 emit appMessage( msg, data);
1311 }
1312
1313#endif 1327#endif
1314} 1328}
1315 1329
1316 1330
1317/*! 1331/*!
1318 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1332 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. 1333 consider passing TRUE for \a nomaximize rather than the default FALSE.
1320 1334
1321 \sa showMainDocumentWidget() 1335 \sa showMainDocumentWidget()
1322*/ 1336*/
1323void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) 1337void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
1324{ 1338{
1325 d->show(mw, nomaximize ); 1339 d->show(mw, nomaximize );
1326} 1340}
1327 1341
1328/*! 1342/*!
1329 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1343 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. 1344 consider passing TRUE for \a nomaximize rather than the default FALSE.
1331 1345
1332 This calls designates the application as 1346 This calls designates the application as
1333 a \link docwidget.html document-oriented\endlink application. 1347 a \link docwidget.html document-oriented\endlink application.
1334 1348
1335 The \a mw widget \e must have this slot: setDocument(const QString&). 1349 The \a mw widget \e must have this slot: setDocument(const QString&).
1336 1350
1337 \sa showMainWidget() 1351 \sa showMainWidget()
1338*/ 1352*/
1339void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) 1353void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1340{ 1354{
1341 if ( mw && argc() == 2 ) 1355 if ( mw && argc() == 2 )
1342 Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); 1356 Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
1343 1357
1344 1358
1345 d->show(mw, nomaximize ); 1359 d->show(mw, nomaximize );
1346} 1360}
1347 1361
1348 1362
1349/*! 1363/*!
1350 If an application is started via a \link qcop.html QCop\endlink 1364 If an application is started via a \link qcop.html QCop\endlink
1351 message, the application will process the \link qcop.html 1365 message, the application will process the \link qcop.html
1352 QCop\endlink message and then quit. If the application calls this 1366 QCop\endlink message and then quit. If the application calls this
1353 function while processing a \link qcop.html QCop\endlink message, 1367 function while processing a \link qcop.html QCop\endlink message,
1354 after processing its outstanding \link qcop.html QCop\endlink 1368 after processing its outstanding \link qcop.html QCop\endlink
1355 messages the application will start 'properly' and show itself. 1369 messages the application will start 'properly' and show itself.
1356 1370
1357 \sa keepRunning() 1371 \sa keepRunning()
1358*/ 1372*/
1359void QPEApplication::setKeepRunning() 1373void QPEApplication::setKeepRunning()
1360{ 1374{
1361 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1375 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1362 QPEApplication * qpeApp = ( QPEApplication* ) qApp; 1376 QPEApplication * qpeApp = ( QPEApplication* ) qApp;
1363 qpeApp->d->keep_running = TRUE; 1377 qpeApp->d->keep_running = TRUE;
1364 } 1378 }
1365} 1379}
1366 1380
1367/*! 1381/*!
1368 Returns TRUE if the application will quit after processing the 1382 Returns TRUE if the application will quit after processing the
1369 current list of qcop messages; otherwise returns FALSE. 1383 current list of qcop messages; otherwise returns FALSE.
1370 1384
1371 \sa setKeepRunning() 1385 \sa setKeepRunning()
1372*/ 1386*/
1373bool QPEApplication::keepRunning() const 1387bool QPEApplication::keepRunning() const
1374{ 1388{
1375 return d->keep_running; 1389 return d->keep_running;
1376} 1390}
1377 1391
1378/*! 1392/*!
1379 \internal 1393 \internal
1380*/ 1394*/
1381void QPEApplication::internalSetStyle( const QString &style ) 1395void QPEApplication::internalSetStyle( const QString &style )
1382{ 1396{
1383#if QT_VERSION >= 300 1397#if QT_VERSION >= 300
1384 if ( style == "QPE" ) { 1398 if ( style == "QPE" ) {
1385 setStyle( new QPEStyle ); 1399 setStyle( new QPEStyle );
1386 } 1400 }
1387 else { 1401 else {
1388 QStyle *s = QStyleFactory::create( style ); 1402 QStyle *s = QStyleFactory::create( style );
1389 if ( s ) 1403 if ( s )
1390 setStyle( s ); 1404 setStyle( s );
1391 } 1405 }
1392#else 1406#else
1393 if ( style == "Windows" ) { 1407 if ( style == "Windows" ) {
1394 setStyle( new QWindowsStyle ); 1408 setStyle( new QWindowsStyle );
1395 } 1409 }
1396 else if ( style == "QPE" ) { 1410 else if ( style == "QPE" ) {
1397 setStyle( new QPEStyle ); 1411 setStyle( new QPEStyle );
1398 } 1412 }
1399 else if ( style == "Light" ) { 1413 else if ( style == "Light" ) {
1400 setStyle( new LightStyle ); 1414 setStyle( new LightStyle );
1401 } 1415 }
1402#ifndef QT_NO_STYLE_PLATINUM 1416#ifndef QT_NO_STYLE_PLATINUM
1403 else if ( style == "Platinum" ) { 1417 else if ( style == "Platinum" ) {
1404 setStyle( new QPlatinumStyle ); 1418 setStyle( new QPlatinumStyle );
1405 } 1419 }
1406#endif 1420#endif
1407#ifndef QT_NO_STYLE_MOTIF 1421#ifndef QT_NO_STYLE_MOTIF
1408 else if ( style == "Motif" ) { 1422 else if ( style == "Motif" ) {
1409 setStyle( new QMotifStyle ); 1423 setStyle( new QMotifStyle );
1410 } 1424 }
1411#endif 1425#endif
1412#ifndef QT_NO_STYLE_MOTIFPLUS 1426#ifndef QT_NO_STYLE_MOTIFPLUS
1413 else if ( style == "MotifPlus" ) { 1427 else if ( style == "MotifPlus" ) {
1414 setStyle( new QMotifPlusStyle ); 1428 setStyle( new QMotifPlusStyle );
1415 } 1429 }
1416#endif 1430#endif
1417 1431
1418 else { 1432 else {
1419 QStyle *sty = 0; 1433 QStyle *sty = 0;
1420 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 1434 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/";
1421 1435
1422 if ( style. find ( ".so" ) > 0 ) 1436 if ( style. find ( ".so" ) > 0 )
1423 path += style; 1437 path += style;
1424 else 1438 else
1425 path = path + "lib" + style. lower ( ) + ".so"; // compatibility 1439 path = path + "lib" + style. lower ( ) + ".so"; // compatibility
1426 1440
1427 static QLibrary *lastlib = 0; 1441 static QLibrary *lastlib = 0;
1428 static StyleInterface *lastiface = 0; 1442 static StyleInterface *lastiface = 0;
1429 1443
1430 QLibrary *lib = new QLibrary ( path ); 1444 QLibrary *lib = new QLibrary ( path );
1431 StyleInterface *iface = 0; 1445 StyleInterface *iface = 0;
1432 1446
1433 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) 1447 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface )
1434 sty = iface-> style ( ); 1448 sty = iface-> style ( );
1435 1449
1436 if ( sty ) { 1450 if ( sty ) {
1437 setStyle ( sty ); 1451 setStyle ( sty );
1438 1452
1439 if ( lastiface ) 1453 if ( lastiface )
1440 lastiface-> release ( ); 1454 lastiface-> release ( );
1441 lastiface = iface; 1455 lastiface = iface;
1442 1456
1443 if ( lastlib ) { 1457 if ( lastlib ) {
1444 lastlib-> unload ( ); 1458 lastlib-> unload ( );
1445 delete lastlib; 1459 delete lastlib;
1446 } 1460 }
1447 lastlib = lib; 1461 lastlib = lib;
1448 } 1462 }
1449 else { 1463 else {
1450 if ( iface ) 1464 if ( iface )
1451 iface-> release ( ); 1465 iface-> release ( );
1452 delete lib; 1466 delete lib;
1453 1467
1454 setStyle ( new LightStyle ( )); 1468 setStyle ( new LightStyle ( ));
1455 } 1469 }
1456 } 1470 }
1457#endif 1471#endif
1458} 1472}
1459 1473
1460/*! 1474/*!
1461 \internal 1475 \internal
1462*/ 1476*/
1463void QPEApplication::prepareForTermination( bool willrestart ) 1477void QPEApplication::prepareForTermination( bool willrestart )
1464{ 1478{
1465 if ( willrestart ) { 1479 if ( willrestart ) {
1466 // Draw a big wait icon, the image can be altered in later revisions 1480 // Draw a big wait icon, the image can be altered in later revisions
1467 // QWidget *d = QApplication::desktop(); 1481 // QWidget *d = QApplication::desktop();
1468 QImage img = Resource::loadImage( "launcher/new_wait" ); 1482 QImage img = Resource::loadImage( "launcher/new_wait" );
1469 QPixmap pix; 1483 QPixmap pix;
1470 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); 1484 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) );
1471 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | 1485 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize |
1472 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 1486 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
1473 lblWait->setPixmap( pix ); 1487 lblWait->setPixmap( pix );
1474 lblWait->setAlignment( QWidget::AlignCenter ); 1488 lblWait->setAlignment( QWidget::AlignCenter );
1475 lblWait->show(); 1489 lblWait->show();
1476 lblWait->showMaximized(); 1490 lblWait->showMaximized();
1477 } 1491 }
1478#ifndef SINGLE_APP 1492#ifndef SINGLE_APP
1479 { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); 1493 { QCopEnvelope envelope( "QPE/System", "forceQuit()" );
1480 } 1494 }
1481 processEvents(); // ensure the message goes out. 1495 processEvents(); // ensure the message goes out.
1482 sleep( 1 ); // You have 1 second to comply. 1496 sleep( 1 ); // You have 1 second to comply.
1483#endif 1497#endif
1484} 1498}
1485 1499
1486/*! 1500/*!
1487 \internal 1501 \internal
1488*/ 1502*/
1489void QPEApplication::shutdown() 1503void QPEApplication::shutdown()
1490{ 1504{
1491 // Implement in server's QPEApplication subclass 1505 // Implement in server's QPEApplication subclass
1492} 1506}
1493 1507
1494/*! 1508/*!
1495 \internal 1509 \internal
1496*/ 1510*/
1497void QPEApplication::restart() 1511void QPEApplication::restart()
1498{ 1512{
1499 // Implement in server's QPEApplication subclass 1513 // Implement in server's QPEApplication subclass
1500} 1514}
1501 1515
1502static QPtrDict<void>* stylusDict = 0; 1516static QPtrDict<void>* stylusDict = 0;
1503static void createDict() 1517static void createDict()
1504{ 1518{
1505 if ( !stylusDict ) 1519 if ( !stylusDict )
1506 stylusDict = new QPtrDict<void>; 1520 stylusDict = new QPtrDict<void>;
1507} 1521}
1508 1522
1509/*! 1523/*!
1510 Returns the current StylusMode for widget \a w. 1524 Returns the current StylusMode for widget \a w.
1511 1525
1512 \sa setStylusOperation() StylusMode 1526 \sa setStylusOperation() StylusMode
1513*/ 1527*/
1514QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 1528QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
1515{ 1529{
1516 if ( stylusDict ) 1530 if ( stylusDict )
1517 return ( StylusMode ) ( int ) stylusDict->find( w ); 1531 return ( StylusMode ) ( int ) stylusDict->find( w );
1518 return LeftOnly; 1532 return LeftOnly;
1519} 1533}
1520 1534
1521/*! 1535/*!
1522 \enum QPEApplication::StylusMode 1536 \enum QPEApplication::StylusMode
1523 1537
1524 \value LeftOnly the stylus only generates LeftButton 1538 \value LeftOnly the stylus only generates LeftButton
1525 events (the default). 1539 events (the default).
1526 \value RightOnHold the stylus generates RightButton events 1540 \value RightOnHold the stylus generates RightButton events
1527 if the user uses the press-and-hold gesture. 1541 if the user uses the press-and-hold gesture.
1528 1542
1529 \sa setStylusOperation() stylusOperation() 1543 \sa setStylusOperation() stylusOperation()
1530*/ 1544*/
1531 1545
1532/*! 1546/*!
1533 Causes widget \a w to receive mouse events according to the stylus 1547 Causes widget \a w to receive mouse events according to the stylus
1534 \a mode. 1548 \a mode.
1535 1549
1536 \sa stylusOperation() StylusMode 1550 \sa stylusOperation() StylusMode
1537*/ 1551*/
1538void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) 1552void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode )
1539{ 1553{
1540 createDict(); 1554 createDict();
1541 if ( mode == LeftOnly ) { 1555 if ( mode == LeftOnly ) {
1542 stylusDict->remove 1556 stylusDict->remove
1543 ( w ); 1557 ( w );
1544 w->removeEventFilter( qApp ); 1558 w->removeEventFilter( qApp );
1545 } 1559 }
1546 else { 1560 else {
1547 stylusDict->insert( w, ( void* ) mode ); 1561 stylusDict->insert( w, ( void* ) mode );
1548 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); 1562 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) );
1549 w->installEventFilter( qApp ); 1563 w->installEventFilter( qApp );
1550 } 1564 }
1551} 1565}
1552 1566
1553 1567
1554/*! 1568/*!
1555 \reimp 1569 \reimp
1556*/ 1570*/
1557bool QPEApplication::eventFilter( QObject *o, QEvent *e ) 1571bool QPEApplication::eventFilter( QObject *o, QEvent *e )
1558{ 1572{
1559 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { 1573 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
1560 QMouseEvent * me = ( QMouseEvent* ) e; 1574 QMouseEvent * me = ( QMouseEvent* ) e;
1561 StylusMode mode = (StylusMode)(int)stylusDict->find(o); 1575 StylusMode mode = (StylusMode)(int)stylusDict->find(o);
1562 switch (mode) { 1576 switch (mode) {
1563 case RightOnHold: 1577 case RightOnHold:
1564 switch ( me->type() ) { 1578 switch ( me->type() ) {
1565 case QEvent::MouseButtonPress: 1579 case QEvent::MouseButtonPress:
1566 if ( me->button() == LeftButton ) { 1580 if ( me->button() == LeftButton ) {
1567 d->presstimer = startTimer(500); // #### pref. 1581 d->presstimer = startTimer(500); // #### pref.
1568 d->presswidget = (QWidget*)o; 1582 d->presswidget = (QWidget*)o;
1569 d->presspos = me->pos(); 1583 d->presspos = me->pos();
1570 d->rightpressed = FALSE; 1584 d->rightpressed = FALSE;
1571 } 1585 }
1572 break; 1586 break;
1573 case QEvent::MouseMove: 1587 case QEvent::MouseMove:
1574 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) { 1588 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) {
1575 killTimer(d->presstimer); 1589 killTimer(d->presstimer);
1576 d->presstimer = 0; 1590 d->presstimer = 0;
1577 } 1591 }
1578 break; 1592 break;
1579 case QEvent::MouseButtonRelease: 1593 case QEvent::MouseButtonRelease:
1580 if ( me->button() == LeftButton ) { 1594 if ( me->button() == LeftButton ) {
1581 if ( d->presstimer ) { 1595 if ( d->presstimer ) {
1582 killTimer(d->presstimer); 1596 killTimer(d->presstimer);
1583 d->presstimer = 0; 1597 d->presstimer = 0;
1584 } 1598 }
1585 if ( d->rightpressed && d->presswidget ) { 1599 if ( d->rightpressed && d->presswidget ) {
1586 // Right released 1600 // Right released
1587 postEvent( d->presswidget, 1601 postEvent( d->presswidget,
1588 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), 1602 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
1589 RightButton, LeftButton + RightButton ) ); 1603 RightButton, LeftButton + RightButton ) );
1590 // Left released, off-widget 1604 // Left released, off-widget
1591 postEvent( d->presswidget, 1605 postEvent( d->presswidget,
1592 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), 1606 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1),
1593 LeftButton, LeftButton ) ); 1607 LeftButton, LeftButton ) );
1594 postEvent( d->presswidget, 1608 postEvent( d->presswidget,
1595 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), 1609 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1),
1596 LeftButton, LeftButton ) ); 1610 LeftButton, LeftButton ) );
1597 d->rightpressed = FALSE; 1611 d->rightpressed = FALSE;
1598 return TRUE; // don't send the real Left release 1612 return TRUE; // don't send the real Left release
1599 } 1613 }
1600 } 1614 }
1601 break; 1615 break;
1602 default: 1616 default:
1603 break; 1617 break;
1604 } 1618 }
1605 break; 1619 break;
1606 default: 1620 default:
1607 ; 1621 ;
1608 } 1622 }
1609 } 1623 }
1610 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 1624 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
1611 QKeyEvent *ke = (QKeyEvent *)e; 1625 QKeyEvent *ke = (QKeyEvent *)e;
1612 if ( ke->key() == Key_Enter ) { 1626 if ( ke->key() == Key_Enter ) {
1613 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 1627 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
1614 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 1628 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
1615 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 1629 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
1616 return TRUE; 1630 return TRUE;
1617 } 1631 }
1618 } 1632 }
1619 } 1633 }
1620 return FALSE; 1634 return FALSE;
1621} 1635}
1622 1636
1623/*! 1637/*!
1624 \reimp 1638 \reimp
1625*/ 1639*/
1626void QPEApplication::timerEvent( QTimerEvent *e ) 1640void QPEApplication::timerEvent( QTimerEvent *e )
1627{ 1641{
1628 if ( e->timerId() == d->presstimer && d->presswidget ) { 1642 if ( e->timerId() == d->presstimer && d->presswidget ) {
1629 // Right pressed 1643 // Right pressed
1630 postEvent( d->presswidget, 1644 postEvent( d->presswidget,
1631 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 1645 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
1632 RightButton, LeftButton ) ); 1646 RightButton, LeftButton ) );
1633 killTimer( d->presstimer ); 1647 killTimer( d->presstimer );
1634 d->presstimer = 0; 1648 d->presstimer = 0;
1635 d->rightpressed = TRUE; 1649 d->rightpressed = TRUE;
1636 } 1650 }
1637} 1651}
1638 1652
1639void QPEApplication::removeSenderFromStylusDict() 1653void QPEApplication::removeSenderFromStylusDict()
1640{ 1654{
1641 stylusDict->remove 1655 stylusDict->remove
1642 ( ( void* ) sender() ); 1656 ( ( void* ) sender() );
1643 if ( d->presswidget == sender() ) 1657 if ( d->presswidget == sender() )
1644 d->presswidget = 0; 1658 d->presswidget = 0;
1645} 1659}
1646 1660
1647/*! 1661/*!
1648 \internal 1662 \internal
1649*/ 1663*/
1650bool QPEApplication::keyboardGrabbed() const 1664bool QPEApplication::keyboardGrabbed() const
1651{ 1665{
1652 return d->kbgrabbed; 1666 return d->kbgrabbed;
1653} 1667}
1654 1668
1655 1669
1656/*! 1670/*!
1657 Reverses the effect of grabKeyboard(). This is called automatically 1671 Reverses the effect of grabKeyboard(). This is called automatically
1658 on program exit. 1672 on program exit.
1659*/ 1673*/
1660void QPEApplication::ungrabKeyboard() 1674void QPEApplication::ungrabKeyboard()
1661{ 1675{
1662 ((QPEApplication *) qApp )-> d-> kbgrabbed = false; 1676 ((QPEApplication *) qApp )-> d-> kbgrabbed = false;
1663} 1677}
1664 1678
1665/*! 1679/*!
1666 Grabs the physical keyboard keys, e.g. the application's launching 1680 Grabs the physical keyboard keys, e.g. the application's launching
1667 keys. Instead of launching applications when these keys are pressed 1681 keys. Instead of launching applications when these keys are pressed
1668 the signals emitted are sent to this application instead. Some games 1682 the signals emitted are sent to this application instead. Some games
1669 programs take over the launch keys in this way to make interaction 1683 programs take over the launch keys in this way to make interaction
1670 easier. 1684 easier.
1671 1685
1672 \sa ungrabKeyboard() 1686 \sa ungrabKeyboard()
1673*/ 1687*/
1674void QPEApplication::grabKeyboard() 1688void QPEApplication::grabKeyboard()
1675{ 1689{
1676 ((QPEApplication *) qApp )-> d-> kbgrabbed = true; 1690 ((QPEApplication *) qApp )-> d-> kbgrabbed = true;
1677} 1691}
1678 1692
1679/*! 1693/*!
1680 \reimp 1694 \reimp
1681*/ 1695*/
1682int QPEApplication::exec() 1696int QPEApplication::exec()
1683{ 1697{
1684#ifndef QT_NO_COP 1698#ifndef QT_NO_COP
1685 d->sendQCopQ(); 1699 d->sendQCopQ();
1686#endif 1700#endif
1687 1701
1688 if ( d->keep_running ) 1702 if ( d->keep_running )
1689 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 1703 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
1690 return QApplication::exec(); 1704 return QApplication::exec();
1691 1705
1692#ifndef QT_NO_COP 1706#ifndef QT_NO_COP
1693 1707
1694 { 1708 {
1695 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1709 QCopEnvelope e( "QPE/System", "closing(QString)" );
1696 e << d->appName; 1710 e << d->appName;
1697 } 1711 }
1698#endif 1712#endif
1699 processEvents(); 1713 processEvents();
1700 return 0; 1714 return 0;
1701} 1715}
1702 1716
1703/*! 1717/*!
1704 \internal 1718 \internal
1705 External request for application to quit. Quits if possible without 1719 External request for application to quit. Quits if possible without
1706 loosing state. 1720 loosing state.
1707*/ 1721*/
1708void QPEApplication::tryQuit() 1722void QPEApplication::tryQuit()
1709{ 1723{
1710 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 1724 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
1711 return ; // Inside modal loop or konsole. Too hard to save state. 1725 return ; // Inside modal loop or konsole. Too hard to save state.
1712#ifndef QT_NO_COP 1726#ifndef QT_NO_COP
1713 1727
1714 { 1728 {
1715 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1729 QCopEnvelope e( "QPE/System", "closing(QString)" );
1716 e << d->appName; 1730 e << d->appName;
1717 } 1731 }
1718#endif 1732#endif
1719 processEvents(); 1733 processEvents();
1720 1734
1721 quit(); 1735 quit();
1722} 1736}
1723 1737
1724/*! 1738/*!
1725 \internal 1739 \internal
1726*/ 1740*/
1727void QPEApplication::installTranslation( const QString& baseName ) { 1741void QPEApplication::installTranslation( const QString& baseName ) {
1728 QTranslator* trans = new QTranslator(this); 1742 QTranslator* trans = new QTranslator(this);
1729 QString tfn = qpeDir() + "/i18n/"+baseName; 1743 QString tfn = qpeDir() + "/i18n/"+baseName;
1730 if ( trans->load( tfn ) ) 1744 if ( trans->load( tfn ) )
1731 installTranslator( trans ); 1745 installTranslator( trans );
1732 else 1746 else
1733 delete trans; 1747 delete trans;
1734} 1748}
1735 1749
1736/*! 1750/*!
1737 \internal 1751 \internal
1738 User initiated quit. Makes the window 'Go Away'. If preloaded this means 1752 User initiated quit. Makes the window 'Go Away'. If preloaded this means
1739 hiding the window. If not it means quitting the application. 1753 hiding the window. If not it means quitting the application.
1740 As this is user initiated we don't need to check state. 1754 As this is user initiated we don't need to check state.
1741*/ 1755*/
1742void QPEApplication::hideOrQuit() 1756void QPEApplication::hideOrQuit()
1743{ 1757{
1744 processEvents(); 1758 processEvents();
1745 1759
1746 // If we are a preloaded application we don't actually quit, so emit 1760 // If we are a preloaded application we don't actually quit, so emit
1747 // a System message indicating we're quasi-closing. 1761 // a System message indicating we're quasi-closing.
1748 if ( d->preloaded && d->qpe_main_widget ) 1762 if ( d->preloaded && d->qpe_main_widget )
1749#ifndef QT_NO_COP 1763#ifndef QT_NO_COP
1750 1764
1751 { 1765 {
1752 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 1766 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
1753 e << d->appName; 1767 e << d->appName;
1754 d->qpe_main_widget->hide(); 1768 d->qpe_main_widget->hide();
1755 } 1769 }
1756#endif 1770#endif
1757 else 1771 else
1758 quit(); 1772 quit();
1759} 1773}
1760 1774
1761 1775
1762#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_RAMSES) 1776#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_RAMSES)
1763 1777
1764// The libraries with the skiff package (and possibly others) have 1778// The libraries with the skiff package (and possibly others) have
1765// completely useless implementations of builtin new and delete that 1779// completely useless implementations of builtin new and delete that
1766// use about 50% of your CPU. Here we revert to the simple libc 1780// use about 50% of your CPU. Here we revert to the simple libc
1767// functions. 1781// functions.
1768 1782
1769void* operator new[]( size_t size ) 1783void* operator new[]( size_t size )
1770{ 1784{
1771 return malloc( size ); 1785 return malloc( size );
1772} 1786}
1773 1787
1774void* operator new( size_t size ) 1788void* operator new( size_t size )
1775{ 1789{
1776 return malloc( size ); 1790 return malloc( size );
1777} 1791}
1778 1792
1779void operator delete[]( void* p ) 1793void operator delete[]( void* p )
1780{ 1794{
1781 free( p ); 1795 free( p );
1782} 1796}
1783 1797
1784void operator delete[]( void* p, size_t /*size*/ ) 1798void operator delete[]( void* p, size_t /*size*/ )
1785{ 1799{
1786 free( p ); 1800 free( p );
1787} 1801}
1788 1802
1789 1803
1790void operator delete( void* p ) 1804void operator delete( void* p )
1791{ 1805{
1792 free( p ); 1806 free( p );
1793} 1807}
1794 1808
1795void operator delete( void* p, size_t /*size*/ ) 1809void operator delete( void* p, size_t /*size*/ )
1796{ 1810{
1797 free( p ); 1811 free( p );
1798} 1812}
1799 1813
1800#endif 1814#endif
1801 1815
1802#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 1816#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
1803#include <qwidgetlist.h> 1817#include <qwidgetlist.h>
1804#ifdef QWS 1818#ifdef QWS
1805#include <qgfx_qws.h> 1819#include <qgfx_qws.h>
1806extern QRect qt_maxWindowRect; 1820extern QRect qt_maxWindowRect;
1807void qt_setMaxWindowRect(const QRect& r ) 1821void qt_setMaxWindowRect(const QRect& r )
1808{ 1822{
1809 qt_maxWindowRect = qt_screen->mapFromDevice( r, 1823 qt_maxWindowRect = qt_screen->mapFromDevice( r,
1810 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); 1824 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) );
1811 // Re-resize any maximized windows 1825 // Re-resize any maximized windows
1812 QWidgetList* l = QApplication::topLevelWidgets(); 1826 QWidgetList* l = QApplication::topLevelWidgets();
1813 if ( l ) { 1827 if ( l ) {
1814 QWidget * w = l->first(); 1828 QWidget * w = l->first();
1815 while ( w ) { 1829 while ( w ) {
1816 if ( w->isVisible() && w->isMaximized() ) { 1830 if ( w->isVisible() && w->isMaximized() ) {
1817 w->showMaximized(); 1831 w->showMaximized();
1818 } 1832 }
1819 w = l->next(); 1833 w = l->next();
1820 } 1834 }
1821 delete l; 1835 delete l;
1822 } 1836 }
1823} 1837}
1824#endif 1838#endif
1825#endif 1839#endif