summaryrefslogtreecommitdiff
path: root/library/qpeapplication.cpp
Unidiff
Diffstat (limited to 'library/qpeapplication.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp1
1 files changed, 0 insertions, 1 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index c7ef2b7..262221e 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,2100 +1,2099 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19*/ 19*/
20#define QTOPIA_INTERNAL_LANGLIST 20#define QTOPIA_INTERNAL_LANGLIST
21#include <stdlib.h> 21#include <stdlib.h>
22#include <unistd.h> 22#include <unistd.h>
23#ifndef Q_OS_MACX 23#ifndef Q_OS_MACX
24#include <linux/limits.h> // needed for some toolchains (PATH_MAX) 24#include <linux/limits.h> // needed for some toolchains (PATH_MAX)
25#endif 25#endif
26#include <qfile.h> 26#include <qfile.h>
27#include <qqueue.h> 27#include <qqueue.h>
28#ifdef Q_WS_QWS 28#ifdef Q_WS_QWS
29#ifndef QT_NO_COP 29#ifndef QT_NO_COP
30#if QT_VERSION <= 231 30#if QT_VERSION <= 231
31#define private public 31#define private public
32#define sendLocally processEvent 32#define sendLocally processEvent
33#include "qcopenvelope_qws.h" 33#include "qcopenvelope_qws.h"
34#undef private 34#undef private
35#else 35#else
36#include "qcopenvelope_qws.h" 36#include "qcopenvelope_qws.h"
37#endif 37#endif
38#endif 38#endif
39#include <qwindowsystem_qws.h> 39#include <qwindowsystem_qws.h>
40#endif 40#endif
41#include <qtextstream.h> 41#include <qtextstream.h>
42#include <qpalette.h> 42#include <qpalette.h>
43#include <qbuffer.h> 43#include <qbuffer.h>
44#include <qptrdict.h> 44#include <qptrdict.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qdir.h> 46#include <qdir.h>
47#include <qlabel.h> 47#include <qlabel.h>
48#include <qdialog.h> 48#include <qdialog.h>
49#include <qdragobject.h> 49#include <qdragobject.h>
50#include <qtextcodec.h> 50#include <qtextcodec.h>
51#include <qevent.h> 51#include <qevent.h>
52#include <qtooltip.h> 52#include <qtooltip.h>
53#include <qsignal.h> 53#include <qsignal.h>
54#include <qmainwindow.h> 54#include <qmainwindow.h>
55#include <qwidgetlist.h> 55#include <qwidgetlist.h>
56#include <qpixmapcache.h> 56#include <qpixmapcache.h>
57 57
58#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 58#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
59#define QTOPIA_INTERNAL_INITAPP 59#define QTOPIA_INTERNAL_INITAPP
60#include "qpeapplication.h" 60#include "qpeapplication.h"
61#include "qpestyle.h" 61#include "qpestyle.h"
62#include "styleinterface.h" 62#include "styleinterface.h"
63#if QT_VERSION >= 300 63#if QT_VERSION >= 300
64#include <qstylefactory.h> 64#include <qstylefactory.h>
65#else 65#else
66#include <qplatinumstyle.h> 66#include <qplatinumstyle.h>
67#include <qwindowsstyle.h> 67#include <qwindowsstyle.h>
68#include <qmotifstyle.h> 68#include <qmotifstyle.h>
69#include <qmotifplusstyle.h> 69#include <qmotifplusstyle.h>
70#include "lightstyle.h" 70#include "lightstyle.h"
71 71
72#include <qpe/qlibrary.h> 72#include <qpe/qlibrary.h>
73#endif 73#endif
74#include "global.h" 74#include "global.h"
75#include "resource.h" 75#include "resource.h"
76#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 76#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
77#include "qutfcodec.h" 77#include "qutfcodec.h"
78#endif 78#endif
79#include "config.h" 79#include "config.h"
80#include "network.h" 80#include "network.h"
81#ifdef QWS 81#ifdef QWS
82#include "fontmanager.h" 82#include "fontmanager.h"
83#endif 83#endif
84 84
85#include "alarmserver.h" 85#include "alarmserver.h"
86#include "applnk.h" 86#include "applnk.h"
87#include "qpemenubar.h" 87#include "qpemenubar.h"
88#include "textcodecinterface.h" 88#include "textcodecinterface.h"
89#include "imagecodecinterface.h" 89#include "imagecodecinterface.h"
90 90
91#include <unistd.h> 91#include <unistd.h>
92#include <sys/file.h> 92#include <sys/file.h>
93#include <sys/ioctl.h> 93#include <sys/ioctl.h>
94#ifndef QT_NO_SOUND 94#ifndef QT_NO_SOUND
95#include <sys/soundcard.h> 95#include <sys/soundcard.h>
96#endif 96#endif
97#include "qt_override_p.h" 97#include "qt_override_p.h"
98 98
99 99
100class QPEApplicationData 100class QPEApplicationData
101{ 101{
102public: 102public:
103 QPEApplicationData ( ) 103 QPEApplicationData ( )
104 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ), 104 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ),
105 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ), 105 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ),
106 keep_running( true ), qcopQok( false ), qpe_main_widget( 0 ) 106 keep_running( true ), qcopQok( false ), qpe_main_widget( 0 )
107 107
108 {} 108 {}
109 109
110 int presstimer; 110 int presstimer;
111 QWidget* presswidget; 111 QWidget* presswidget;
112 QPoint presspos; 112 QPoint presspos;
113 113
114 bool rightpressed : 1; 114 bool rightpressed : 1;
115 bool kbgrabbed : 1; 115 bool kbgrabbed : 1;
116 bool notbusysent : 1; 116 bool notbusysent : 1;
117 bool preloaded : 1; 117 bool preloaded : 1;
118 bool forceshow : 1; 118 bool forceshow : 1;
119 bool nomaximize : 1; 119 bool nomaximize : 1;
120 bool keep_running : 1; 120 bool keep_running : 1;
121 bool qcopQok : 1; 121 bool qcopQok : 1;
122 122
123 123
124 QStringList langs; 124 QStringList langs;
125 QString appName; 125 QString appName;
126 struct QCopRec 126 struct QCopRec
127 { 127 {
128 QCopRec( const QCString &ch, const QCString &msg, 128 QCopRec( const QCString &ch, const QCString &msg,
129 const QByteArray &d ) : 129 const QByteArray &d ) :
130 channel( ch ), message( msg ), data( d ) 130 channel( ch ), message( msg ), data( d )
131 { } 131 { }
132 132
133 QCString channel; 133 QCString channel;
134 QCString message; 134 QCString message;
135 QByteArray data; 135 QByteArray data;
136 }; 136 };
137 QWidget* qpe_main_widget; 137 QWidget* qpe_main_widget;
138 QGuardedPtr<QWidget> lastraised; 138 QGuardedPtr<QWidget> lastraised;
139 QQueue<QCopRec> qcopq; 139 QQueue<QCopRec> qcopq;
140 QString styleName; 140 QString styleName;
141 QString decorationName; 141 QString decorationName;
142 142
143 void enqueueQCop( const QCString &ch, const QCString &msg, 143 void enqueueQCop( const QCString &ch, const QCString &msg,
144 const QByteArray &data ) 144 const QByteArray &data )
145 { 145 {
146 qcopq.enqueue( new QCopRec( ch, msg, data ) ); 146 qcopq.enqueue( new QCopRec( ch, msg, data ) );
147 } 147 }
148 void sendQCopQ() 148 void sendQCopQ()
149 { 149 {
150 if (!qcopQok ) 150 if (!qcopQok )
151 return; 151 return;
152 152
153 QCopRec * r; 153 QCopRec * r;
154 154
155 while((r=qcopq.dequeue())) { 155 while((r=qcopq.dequeue())) {
156 // remove from queue before sending... 156 // remove from queue before sending...
157 // event loop can come around again before getting 157 // event loop can come around again before getting
158 // back from sendLocally 158 // back from sendLocally
159#ifndef QT_NO_COP 159#ifndef QT_NO_COP
160 QCopChannel::sendLocally( r->channel, r->message, r->data ); 160 QCopChannel::sendLocally( r->channel, r->message, r->data );
161#endif 161#endif
162 162
163 delete r; 163 delete r;
164 } 164 }
165 } 165 }
166 static void show_mx(QWidget* mw, bool nomaximize, const QString & = QString::null ) 166 static void show_mx(QWidget* mw, bool nomaximize, const QString & = QString::null )
167 { 167 {
168 168
169 // ugly hack, remove that later after finding a sane solution 169 // ugly hack, remove that later after finding a sane solution
170 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays, 170 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays,
171 // so this is only useful if QT_QWS_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has 171 // so this is only useful if QT_QWS_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has
172 // a (physically) large enough display to use the small icons 172 // a (physically) large enough display to use the small icons
173#if defined(OPIE_HIGH_RES_SMALL_PHY) 173#if defined(OPIE_HIGH_RES_SMALL_PHY)
174 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) { 174 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) {
175 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true ); 175 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true );
176 } 176 }
177#endif 177#endif
178 178
179 if ( mw->layout() && mw->inherits("QDialog") ) { 179 if ( mw->layout() && mw->inherits("QDialog") ) {
180 QPEApplication::showDialog((QDialog*)mw, nomaximize); 180 QPEApplication::showDialog((QDialog*)mw, nomaximize);
181 } 181 }
182 else { 182 else {
183#ifdef Q_WS_QWS 183#ifdef Q_WS_QWS
184 if ( !nomaximize ) 184 if ( !nomaximize )
185 mw->showMaximized(); 185 mw->showMaximized();
186 else 186 else
187#endif 187#endif
188 188
189 mw->show(); 189 mw->show();
190 } 190 }
191 } 191 }
192 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) 192 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
193 { 193 {
194 /* 194 /*
195 // This works but disable it for now until it is safe to apply 195 // This works but disable it for now until it is safe to apply
196 // What is does is scan the .desktop files of all the apps for 196 // What is does is scan the .desktop files of all the apps for
197 // the applnk that has the corresponding argv[0] as this program 197 // the applnk that has the corresponding argv[0] as this program
198 // then it uses the name stored in the .desktop file as the caption 198 // then it uses the name stored in the .desktop file as the caption
199 // for the main widget. This saves duplicating translations for 199 // for the main widget. This saves duplicating translations for
200 // the app name in the program and in the .desktop files. 200 // the app name in the program and in the .desktop files.
201 201
202 AppLnkSet apps( appsPath ); 202 AppLnkSet apps( appsPath );
203 203
204 QList<AppLnk> appsList = apps.children(); 204 QList<AppLnk> appsList = apps.children();
205 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { 205 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
206 if ( (*it)->exec() == appName ) { 206 if ( (*it)->exec() == appName ) {
207 mw->setCaption( (*it)->name() ); 207 mw->setCaption( (*it)->name() );
208 return TRUE; 208 return TRUE;
209 } 209 }
210 } 210 }
211 */ 211 */
212 return FALSE; 212 return FALSE;
213 } 213 }
214 214
215 215
216 void show(QWidget* mw, bool nomax) 216 void show(QWidget* mw, bool nomax)
217 { 217 {
218 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); 218 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" );
219 nomaximize = nomax; 219 nomaximize = nomax;
220 qpe_main_widget = mw; 220 qpe_main_widget = mw;
221 qcopQok = TRUE; 221 qcopQok = TRUE;
222#ifndef QT_NO_COP 222#ifndef QT_NO_COP
223 223
224 sendQCopQ(); 224 sendQCopQ();
225#endif 225#endif
226 226
227 if ( preloaded ) { 227 if ( preloaded ) {
228 if (forceshow) 228 if (forceshow)
229 show_mx(mw, nomax); 229 show_mx(mw, nomax);
230 } 230 }
231 else if ( keep_running ) { 231 else if ( keep_running ) {
232 show_mx(mw, nomax); 232 show_mx(mw, nomax);
233 } 233 }
234 } 234 }
235 235
236 void loadTextCodecs() 236 void loadTextCodecs()
237 { 237 {
238 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; 238 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs";
239#ifdef Q_OS_MACX 239#ifdef Q_OS_MACX
240 QDir dir( path, "lib*.dylib" ); 240 QDir dir( path, "lib*.dylib" );
241#else 241#else
242 QDir dir( path, "lib*.so" ); 242 QDir dir( path, "lib*.so" );
243#endif 243#endif
244 QStringList list; 244 QStringList list;
245 if ( dir. exists ( )) 245 if ( dir. exists ( ))
246 list = dir.entryList(); 246 list = dir.entryList();
247 QStringList::Iterator it; 247 QStringList::Iterator it;
248 for ( it = list.begin(); it != list.end(); ++it ) { 248 for ( it = list.begin(); it != list.end(); ++it ) {
249 TextCodecInterface *iface = 0; 249 TextCodecInterface *iface = 0;
250 QLibrary *lib = new QLibrary( path + "/" + *it ); 250 QLibrary *lib = new QLibrary( path + "/" + *it );
251 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 251 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
252 QValueList<int> mibs = iface->mibEnums(); 252 QValueList<int> mibs = iface->mibEnums();
253 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { 253 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) {
254 (void)iface->createForMib(*i); 254 (void)iface->createForMib(*i);
255 // ### it exists now; need to remember if we can delete it 255 // ### it exists now; need to remember if we can delete it
256 } 256 }
257 } 257 }
258 else { 258 else {
259 lib->unload(); 259 lib->unload();
260 delete lib; 260 delete lib;
261 } 261 }
262 } 262 }
263 } 263 }
264 264
265 void loadImageCodecs() 265 void loadImageCodecs()
266 { 266 {
267 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 267 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
268#ifdef Q_OS_MACX 268#ifdef Q_OS_MACX
269 QDir dir( path, "lib*.dylib" ); 269 QDir dir( path, "lib*.dylib" );
270#else 270#else
271 QDir dir( path, "lib*.so" ); 271 QDir dir( path, "lib*.so" );
272#endif 272#endif
273 QStringList list; 273 QStringList list;
274 if ( dir. exists ( )) 274 if ( dir. exists ( ))
275 list = dir.entryList(); 275 list = dir.entryList();
276 QStringList::Iterator it; 276 QStringList::Iterator it;
277 for ( it = list.begin(); it != list.end(); ++it ) { 277 for ( it = list.begin(); it != list.end(); ++it ) {
278 ImageCodecInterface *iface = 0; 278 ImageCodecInterface *iface = 0;
279 QLibrary *lib = new QLibrary( path + "/" + *it ); 279 QLibrary *lib = new QLibrary( path + "/" + *it );
280 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 280 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
281 QStringList formats = iface->keys(); 281 QStringList formats = iface->keys();
282 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { 282 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) {
283 (void)iface->installIOHandler(*i); 283 (void)iface->installIOHandler(*i);
284 // ### it exists now; need to remember if we can delete it 284 // ### it exists now; need to remember if we can delete it
285 } 285 }
286 } 286 }
287 else { 287 else {
288 lib->unload(); 288 lib->unload();
289 delete lib; 289 delete lib;
290 } 290 }
291 } 291 }
292 } 292 }
293}; 293};
294 294
295class ResourceMimeFactory : public QMimeSourceFactory 295class ResourceMimeFactory : public QMimeSourceFactory
296{ 296{
297public: 297public:
298 ResourceMimeFactory() : resImage( 0 ) 298 ResourceMimeFactory() : resImage( 0 )
299 { 299 {
300 setFilePath( Global::helpPath() ); 300 setFilePath( Global::helpPath() );
301 setExtensionType( "html", "text/html;charset=UTF-8" ); 301 setExtensionType( "html", "text/html;charset=UTF-8" );
302 } 302 }
303 ~ResourceMimeFactory() { 303 ~ResourceMimeFactory() {
304 delete resImage; 304 delete resImage;
305 } 305 }
306 306
307 const QMimeSource* data( const QString& abs_name ) const 307 const QMimeSource* data( const QString& abs_name ) const
308 { 308 {
309 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 309 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
310 if ( !r ) { 310 if ( !r ) {
311 int sl = abs_name.length(); 311 int sl = abs_name.length();
312 do { 312 do {
313 sl = abs_name.findRev( '/', sl - 1 ); 313 sl = abs_name.findRev( '/', sl - 1 );
314 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 314 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
315 int dot = name.findRev( '.' ); 315 int dot = name.findRev( '.' );
316 if ( dot >= 0 ) 316 if ( dot >= 0 )
317 name = name.left( dot ); 317 name = name.left( dot );
318 QImage img = Resource::loadImage( name ); 318 QImage img = Resource::loadImage( name );
319 if ( !img.isNull() ) { 319 if ( !img.isNull() ) {
320 delete resImage; 320 delete resImage;
321 resImage = new QImageDrag( img ); 321 resImage = new QImageDrag( img );
322 r = resImage; 322 r = resImage;
323 } 323 }
324 } 324 }
325 while ( !r && sl > 0 ); 325 while ( !r && sl > 0 );
326 } 326 }
327 return r; 327 return r;
328 } 328 }
329private: 329private:
330 mutable QImageDrag *resImage; 330 mutable QImageDrag *resImage;
331}; 331};
332 332
333static int& hack(int& i) 333static int& hack(int& i)
334{ 334{
335#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 335#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
336 // These should be created, but aren't in Qt 2.3.0 336 // These should be created, but aren't in Qt 2.3.0
337 (void)new QUtf8Codec; 337 (void)new QUtf8Codec;
338 (void)new QUtf16Codec; 338 (void)new QUtf16Codec;
339#endif 339#endif
340 return i; 340 return i;
341} 341}
342 342
343static int muted = 0; 343static int muted = 0;
344static int micMuted = 0; 344static int micMuted = 0;
345 345
346static void setVolume( int t = 0, int percent = -1 ) 346static void setVolume( int t = 0, int percent = -1 )
347{ 347{
348 switch ( t ) { 348 switch ( t ) {
349 case 0: { 349 case 0: {
350 Config cfg( "qpe" ); 350 Config cfg( "qpe" );
351 cfg.setGroup( "Volume" ); 351 cfg.setGroup( "Volume" );
352 if ( percent < 0 ) 352 if ( percent < 0 )
353 percent = cfg.readNumEntry( "VolumePercent", 50 ); 353 percent = cfg.readNumEntry( "VolumePercent", 50 );
354#ifndef QT_NO_SOUND 354#ifndef QT_NO_SOUND
355 int fd = 0; 355 int fd = 0;
356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
357 int vol = muted ? 0 : percent; 357 int vol = muted ? 0 : percent;
358 // set both channels to same volume 358 // set both channels to same volume
359 vol |= vol << 8; 359 vol |= vol << 8;
360 ioctl( fd, MIXER_WRITE( 0 ), &vol ); 360 ioctl( fd, MIXER_WRITE( 0 ), &vol );
361 ::close( fd ); 361 ::close( fd );
362 } 362 }
363#endif 363#endif
364 } 364 }
365 break; 365 break;
366 } 366 }
367} 367}
368 368
369static void setMic( int t = 0, int percent = -1 ) 369static void setMic( int t = 0, int percent = -1 )
370{ 370{
371 switch ( t ) { 371 switch ( t ) {
372 case 0: { 372 case 0: {
373 Config cfg( "qpe" ); 373 Config cfg( "qpe" );
374 cfg.setGroup( "Volume" ); 374 cfg.setGroup( "Volume" );
375 if ( percent < 0 ) 375 if ( percent < 0 )
376 percent = cfg.readNumEntry( "Mic", 50 ); 376 percent = cfg.readNumEntry( "Mic", 50 );
377 377
378#ifndef QT_NO_SOUND 378#ifndef QT_NO_SOUND
379 int fd = 0; 379 int fd = 0;
380 int mic = micMuted ? 0 : percent; 380 int mic = micMuted ? 0 : percent;
381 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 381 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
382 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 382 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
383 ::close( fd ); 383 ::close( fd );
384 } 384 }
385#endif 385#endif
386 } 386 }
387 break; 387 break;
388 } 388 }
389} 389}
390 390
391 391
392static void setBass( int t = 0, int percent = -1 ) 392static void setBass( int t = 0, int percent = -1 )
393{ 393{
394 switch ( t ) { 394 switch ( t ) {
395 case 0: { 395 case 0: {
396 Config cfg( "qpe" ); 396 Config cfg( "qpe" );
397 cfg.setGroup( "Volume" ); 397 cfg.setGroup( "Volume" );
398 if ( percent < 0 ) 398 if ( percent < 0 )
399 percent = cfg.readNumEntry( "BassPercent", 50 ); 399 percent = cfg.readNumEntry( "BassPercent", 50 );
400 400
401#ifndef QT_NO_SOUND 401#ifndef QT_NO_SOUND
402 int fd = 0; 402 int fd = 0;
403 int bass = percent; 403 int bass = percent;
404 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 404 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
405 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass ); 405 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass );
406 ::close( fd ); 406 ::close( fd );
407 } 407 }
408#endif 408#endif
409 } 409 }
410 break; 410 break;
411 } 411 }
412} 412}
413 413
414 414
415static void setTreble( int t = 0, int percent = -1 ) 415static void setTreble( int t = 0, int percent = -1 )
416{ 416{
417 switch ( t ) { 417 switch ( t ) {
418 case 0: { 418 case 0: {
419 Config cfg( "qpe" ); 419 Config cfg( "qpe" );
420 cfg.setGroup( "Volume" ); 420 cfg.setGroup( "Volume" );
421 if ( percent < 0 ) 421 if ( percent < 0 )
422 percent = cfg.readNumEntry( "TreblePercent", 50 ); 422 percent = cfg.readNumEntry( "TreblePercent", 50 );
423 423
424#ifndef QT_NO_SOUND 424#ifndef QT_NO_SOUND
425 int fd = 0; 425 int fd = 0;
426 int treble = percent; 426 int treble = percent;
427 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 427 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
428 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble ); 428 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble );
429 ::close( fd ); 429 ::close( fd );
430 } 430 }
431#endif 431#endif
432 } 432 }
433 break; 433 break;
434 } 434 }
435} 435}
436 436
437 437
438/** 438/**
439 \class QPEApplication 439 \class QPEApplication
440 \brief The QPEApplication class implements various system services 440 \brief The QPEApplication class implements various system services
441 that are available to all Qtopia applications. 441 that are available to all Qtopia applications.
442 442
443 Simply by using QPEApplication instead of QApplication, a standard Qt 443 Simply by using QPEApplication instead of QApplication, a standard Qt
444 application becomes a Qtopia application. It automatically follows 444 application becomes a Qtopia application. It automatically follows
445 style changes, quits and raises, and in the 445 style changes, quits and raises, and in the
446 case of \link docwidget.html document-oriented\endlink applications, 446 case of \link docwidget.html document-oriented\endlink applications,
447 changes the currently displayed document in response to the environment. 447 changes the currently displayed document in response to the environment.
448 448
449 To create a \link docwidget.html document-oriented\endlink 449 To create a \link docwidget.html document-oriented\endlink
450 application use showMainDocumentWidget(); to create a 450 application use showMainDocumentWidget(); to create a
451 non-document-oriented application use showMainWidget(). The 451 non-document-oriented application use showMainWidget(). The
452 keepRunning() function indicates whether the application will 452 keepRunning() function indicates whether the application will
453 continue running after it's processed the last \link qcop.html 453 continue running after it's processed the last \link qcop.html
454 QCop\endlink message. This can be changed using setKeepRunning(). 454 QCop\endlink message. This can be changed using setKeepRunning().
455 455
456 A variety of signals are emitted when certain events occur, for 456 A variety of signals are emitted when certain events occur, for
457 example, timeChanged(), clockChanged(), weekChanged(), 457 example, timeChanged(), clockChanged(), weekChanged(),
458 dateFormatChanged() and volumeChanged(). If the application receives 458 dateFormatChanged() and volumeChanged(). If the application receives
459 a \link qcop.html QCop\endlink message on the application's 459 a \link qcop.html QCop\endlink message on the application's
460 QPE/Application/\e{appname} channel, the appMessage() signal is 460 QPE/Application/\e{appname} channel, the appMessage() signal is
461 emitted. There are also flush() and reload() signals, which 461 emitted. There are also flush() and reload() signals, which
462 are emitted when synching begins and ends respectively - upon these 462 are emitted when synching begins and ends respectively - upon these
463 signals, the application should save and reload any data 463 signals, the application should save and reload any data
464 files that are involved in synching. Most of these signals will initially 464 files that are involved in synching. Most of these signals will initially
465 be received and unfiltered through the appMessage() signal. 465 be received and unfiltered through the appMessage() signal.
466 466
467 This class also provides a set of useful static functions. The 467 This class also provides a set of useful static functions. The
468 qpeDir() and documentDir() functions return the respective paths. 468 qpeDir() and documentDir() functions return the respective paths.
469 The grabKeyboard() and ungrabKeyboard() functions are used to 469 The grabKeyboard() and ungrabKeyboard() functions are used to
470 control whether the application takes control of the device's 470 control whether the application takes control of the device's
471 physical buttons (e.g. application launch keys). The stylus' mode of 471 physical buttons (e.g. application launch keys). The stylus' mode of
472 operation is set with setStylusOperation() and retrieved with 472 operation is set with setStylusOperation() and retrieved with
473 stylusOperation(). There are also setInputMethodHint() and 473 stylusOperation(). There are also setInputMethodHint() and
474 inputMethodHint() functions. 474 inputMethodHint() functions.
475 475
476 \ingroup qtopiaemb 476 \ingroup qtopiaemb
477*/ 477*/
478 478
479/*! 479/*!
480 \fn void QPEApplication::clientMoused() 480 \fn void QPEApplication::clientMoused()
481 481
482 \internal 482 \internal
483*/ 483*/
484 484
485/*! 485/*!
486 \fn void QPEApplication::timeChanged(); 486 \fn void QPEApplication::timeChanged();
487 This signal is emitted when the time changes outside the normal 487 This signal is emitted when the time changes outside the normal
488 passage of time, i.e. if the time is set backwards or forwards. 488 passage of time, i.e. if the time is set backwards or forwards.
489*/ 489*/
490 490
491/*! 491/*!
492 \fn void QPEApplication::clockChanged( bool ampm ); 492 \fn void QPEApplication::clockChanged( bool ampm );
493 493
494 This signal is emitted when the user changes the clock's style. If 494 This signal is emitted when the user changes the clock's style. If
495 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise, 495 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise,
496 they want a 24-hour clock. 496 they want a 24-hour clock.
497*/ 497*/
498 498
499/*! 499/*!
500 \fn void QPEApplication::volumeChanged( bool muted ) 500 \fn void QPEApplication::volumeChanged( bool muted )
501 501
502 This signal is emitted whenever the mute state is changed. If \a 502 This signal is emitted whenever the mute state is changed. If \a
503 muted is TRUE, then sound output has been muted. 503 muted is TRUE, then sound output has been muted.
504*/ 504*/
505 505
506/*! 506/*!
507 \fn void QPEApplication::weekChanged( bool startOnMonday ) 507 \fn void QPEApplication::weekChanged( bool startOnMonday )
508 508
509 This signal is emitted if the week start day is changed. If \a 509 This signal is emitted if the week start day is changed. If \a
510 startOnMonday is TRUE then the first day of the week is Monday; if 510 startOnMonday is TRUE then the first day of the week is Monday; if
511 \a startOnMonday is FALSE then the first day of the week is 511 \a startOnMonday is FALSE then the first day of the week is
512 Sunday. 512 Sunday.
513*/ 513*/
514 514
515/*! 515/*!
516 \fn void QPEApplication::dateFormatChanged(DateFormat) 516 \fn void QPEApplication::dateFormatChanged(DateFormat)
517 517
518 This signal is emitted whenever the date format is changed. 518 This signal is emitted whenever the date format is changed.
519*/ 519*/
520 520
521/*! 521/*!
522 \fn void QPEApplication::flush() 522 \fn void QPEApplication::flush()
523 523
524 ### 524 ###
525*/ 525*/
526 526
527/*! 527/*!
528 \fn void QPEApplication::reload() 528 \fn void QPEApplication::reload()
529 529
530*/ 530*/
531 531
532 532
533 533
534void QPEApplication::processQCopFile() 534void QPEApplication::processQCopFile()
535{ 535{
536 QString qcopfn("/tmp/qcop-msg-"); 536 QString qcopfn("/tmp/qcop-msg-");
537 qcopfn += d->appName; // append command name 537 qcopfn += d->appName; // append command name
538 538
539 QFile f(qcopfn); 539 QFile f(qcopfn);
540 if ( f.open(IO_ReadWrite) ) { 540 if ( f.open(IO_ReadWrite) ) {
541#ifndef Q_OS_WIN32 541#ifndef Q_OS_WIN32
542 flock(f.handle(), LOCK_EX); 542 flock(f.handle(), LOCK_EX);
543#endif 543#endif
544 QDataStream ds(&f); 544 QDataStream ds(&f);
545 QCString channel, message; 545 QCString channel, message;
546 QByteArray data; 546 QByteArray data;
547 while(!ds.atEnd()) { 547 while(!ds.atEnd()) {
548 ds >> channel >> message >> data; 548 ds >> channel >> message >> data;
549 d->enqueueQCop(channel,message,data); 549 d->enqueueQCop(channel,message,data);
550 } 550 }
551 ::ftruncate(f.handle(), 0); 551 ::ftruncate(f.handle(), 0);
552#ifndef Q_OS_WIN32 552#ifndef Q_OS_WIN32
553 f.flush(); 553 f.flush();
554 flock(f.handle(), LOCK_UN); 554 flock(f.handle(), LOCK_UN);
555#endif 555#endif
556 } 556 }
557#endif 557#endif
558} 558}
559 559
560 560
561/*! 561/*!
562 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 562 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
563 563
564 This signal is emitted when a message is received on this 564 This signal is emitted when a message is received on this
565 application's QPE/Application/<i>appname</i> \link qcop.html 565 application's QPE/Application/<i>appname</i> \link qcop.html
566 QCop\endlink channel. 566 QCop\endlink channel.
567 567
568 The slot to which you connect this signal uses \a msg and \a data 568 The slot to which you connect this signal uses \a msg and \a data
569 in the following way: 569 in the following way:
570 570
571\code 571\code
572 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 572 void MyWidget::receive( const QCString& msg, const QByteArray& data )
573 { 573 {
574 QDataStream stream( data, IO_ReadOnly ); 574 QDataStream stream( data, IO_ReadOnly );
575 if ( msg == "someMessage(int,int,int)" ) { 575 if ( msg == "someMessage(int,int,int)" ) {
576 int a,b,c; 576 int a,b,c;
577 stream >> a >> b >> c; 577 stream >> a >> b >> c;
578 ... 578 ...
579 } else if ( msg == "otherMessage(QString)" ) { 579 } else if ( msg == "otherMessage(QString)" ) {
580 ... 580 ...
581 } 581 }
582 } 582 }
583\endcode 583\endcode
584 584
585 \sa qcop.html 585 \sa qcop.html
586 Note that messages received here may be processed by qpe application 586 Note that messages received here may be processed by qpe application
587 and emitted as signals, such as flush() and reload(). 587 and emitted as signals, such as flush() and reload().
588*/ 588*/
589 589
590/*! 590/*!
591 Constructs a QPEApplication just as you would construct 591 Constructs a QPEApplication just as you would construct
592 a QApplication, passing \a argc, \a argv, and \a t. 592 a QApplication, passing \a argc, \a argv, and \a t.
593 593
594 For applications, \a t should be the default, GuiClient. Only 594 For applications, \a t should be the default, GuiClient. Only
595 the Qtopia server passes GuiServer. 595 the Qtopia server passes GuiServer.
596*/ 596*/
597QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 597QPEApplication::QPEApplication( int & argc, char **argv, Type t )
598 : QApplication( hack(argc), argv, t ), pidChannel( 0 ) 598 : QApplication( hack(argc), argv, t ), pidChannel( 0 )
599{ 599{
600 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices. 600 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices.
601 601
602 d = new QPEApplicationData; 602 d = new QPEApplicationData;
603 d->loadTextCodecs(); 603 d->loadTextCodecs();
604 d->loadImageCodecs(); 604 d->loadImageCodecs();
605 int dw = desktop() ->width(); 605 int dw = desktop() ->width();
606 606
607 if ( dw < 200 ) { 607 if ( dw < 200 ) {
608 setFont( QFont( "vera", 8 ) ); 608 setFont( QFont( "vera", 8 ) );
609 AppLnk::setSmallIconSize( 10 ); 609 AppLnk::setSmallIconSize( 10 );
610 AppLnk::setBigIconSize( 28 ); 610 AppLnk::setBigIconSize( 28 );
611 } 611 }
612#if defined(OPIE_HIGH_RES_SMALL_PHY) 612#if defined(OPIE_HIGH_RES_SMALL_PHY)
613 else if ( dw > 600 ) { 613 else if ( dw > 600 ) {
614 setFont( QFont( "vera", 16 ) ); 614 setFont( QFont( "vera", 16 ) );
615 AppLnk::setSmallIconSize( 24 ); 615 AppLnk::setSmallIconSize( 24 );
616 AppLnk::setBigIconSize( 48 ); 616 AppLnk::setBigIconSize( 48 );
617 } 617 }
618#endif 618#endif
619 else if ( dw > 200 ) { 619 else if ( dw > 200 ) {
620 setFont( QFont( "vera", 10 ) ); 620 setFont( QFont( "vera", 10 ) );
621 AppLnk::setSmallIconSize( 14 ); 621 AppLnk::setSmallIconSize( 14 );
622 AppLnk::setBigIconSize( 32 ); 622 AppLnk::setBigIconSize( 32 );
623 } 623 }
624 624
625 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 625 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
626 626
627 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 627 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
628 628
629 629
630 sysChannel = new QCopChannel( "QPE/System", this ); 630 sysChannel = new QCopChannel( "QPE/System", this );
631 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 631 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
632 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); 632 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) );
633 633
634/* COde now in initapp */ 634/* COde now in initapp */
635#if 0 635#if 0
636#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 636#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
637 637
638 QString qcopfn( "/tmp/qcop-msg-" ); 638 QString qcopfn( "/tmp/qcop-msg-" );
639 qcopfn += QString( argv[ 0 ] ); // append command name 639 qcopfn += QString( argv[ 0 ] ); // append command name
640 640
641 QFile f( qcopfn ); 641 QFile f( qcopfn );
642 if ( f.open( IO_ReadOnly ) ) { 642 if ( f.open( IO_ReadOnly ) ) {
643 flock( f.handle(), LOCK_EX ); 643 flock( f.handle(), LOCK_EX );
644 } 644 }
645 645
646 646
647 647
648 QCString channel = QCString( argv[ 0 ] ); 648 QCString channel = QCString( argv[ 0 ] );
649 channel.replace( QRegExp( ".*/" ), "" ); 649 channel.replace( QRegExp( ".*/" ), "" );
650 d->appName = channel; 650 d->appName = channel;
651 channel = "QPE/Application/" + channel; 651 channel = "QPE/Application/" + channel;
652 pidChannel = new QCopChannel( channel, this ); 652 pidChannel = new QCopChannel( channel, this );
653 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 653 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
654 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); 654 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) );
655 655
656 if ( f.isOpen() ) { 656 if ( f.isOpen() ) {
657 d->keep_running = FALSE; 657 d->keep_running = FALSE;
658 QDataStream ds( &f ); 658 QDataStream ds( &f );
659 QCString channel, message; 659 QCString channel, message;
660 QByteArray data; 660 QByteArray data;
661 while ( !ds.atEnd() ) { 661 while ( !ds.atEnd() ) {
662 ds >> channel >> message >> data; 662 ds >> channel >> message >> data;
663 d->enqueueQCop( channel, message, data ); 663 d->enqueueQCop( channel, message, data );
664 } 664 }
665 665
666 flock( f.handle(), LOCK_UN ); 666 flock( f.handle(), LOCK_UN );
667 f.close(); 667 f.close();
668 f.remove(); 668 f.remove();
669 } 669 }
670 670
671 for ( int a = 0; a < argc; a++ ) { 671 for ( int a = 0; a < argc; a++ ) {
672 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 672 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
673 argv[ a ] = argv[ a + 1 ]; 673 argv[ a ] = argv[ a + 1 ];
674 a++; 674 a++;
675 d->preloaded = TRUE; 675 d->preloaded = TRUE;
676 argc -= 1; 676 argc -= 1;
677 } 677 }
678 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 678 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
679 argv[ a ] = argv[ a + 1 ]; 679 argv[ a ] = argv[ a + 1 ];
680 a++; 680 a++;
681 d->preloaded = TRUE; 681 d->preloaded = TRUE;
682 d->forceshow = TRUE; 682 d->forceshow = TRUE;
683 argc -= 1; 683 argc -= 1;
684 } 684 }
685 } 685 }
686 686
687 /* overide stored arguments */ 687 /* overide stored arguments */
688 setArgs( argc, argv ); 688 setArgs( argc, argv );
689 689
690#endif 690#endif
691#else 691#else
692 initApp( argc, argv ); 692 initApp( argc, argv );
693#endif 693#endif
694 // qwsSetDecoration( new QPEDecoration() ); 694 // qwsSetDecoration( new QPEDecoration() );
695 695
696#ifndef QT_NO_TRANSLATION 696#ifndef QT_NO_TRANSLATION
697 697
698 d->langs = Global::languageList(); 698 d->langs = Global::languageList();
699 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) { 699 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) {
700 QString lang = *it; 700 QString lang = *it;
701 701
702 installTranslation( lang + "/libopie.qm"); 702 installTranslation( lang + "/libopie.qm");
703 installTranslation( lang + "/libqpe.qm" ); 703 installTranslation( lang + "/libqpe.qm" );
704 installTranslation( lang + "/" + d->appName + ".qm" ); 704 installTranslation( lang + "/" + d->appName + ".qm" );
705 705
706 706
707 //###language/font hack; should look it up somewhere 707 //###language/font hack; should look it up somewhere
708#ifdef QWS 708#ifdef QWS
709 709
710 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 710 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
711 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 711 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
712 setFont( fn ); 712 setFont( fn );
713 } 713 }
714#endif 714#endif
715 } 715 }
716#endif 716#endif
717 717
718 applyStyle(); 718 applyStyle();
719 719
720 if ( type() == GuiServer ) { 720 if ( type() == GuiServer ) {
721 setVolume(); 721 setVolume();
722 } 722 }
723 723
724 installEventFilter( this ); 724 installEventFilter( this );
725 725
726 QPEMenuToolFocusManager::initialize(); 726 QPEMenuToolFocusManager::initialize();
727 727
728#ifdef QT_NO_QWS_CURSOR 728#ifdef QT_NO_QWS_CURSOR
729 // if we have no cursor, probably don't want tooltips 729 // if we have no cursor, probably don't want tooltips
730 QToolTip::setEnabled( FALSE ); 730 QToolTip::setEnabled( FALSE );
731#endif 731#endif
732} 732}
733 733
734 734
735#ifdef QTOPIA_INTERNAL_INITAPP 735#ifdef QTOPIA_INTERNAL_INITAPP
736void QPEApplication::initApp( int argc, char **argv ) 736void QPEApplication::initApp( int argc, char **argv )
737{ 737{
738 delete pidChannel; 738 delete pidChannel;
739 d->keep_running = TRUE; 739 d->keep_running = TRUE;
740 d->preloaded = FALSE; 740 d->preloaded = FALSE;
741 d->forceshow = FALSE; 741 d->forceshow = FALSE;
742 742
743 QCString channel = QCString(argv[0]); 743 QCString channel = QCString(argv[0]);
744 744
745 channel.replace(QRegExp(".*/"),""); 745 channel.replace(QRegExp(".*/"),"");
746 d->appName = channel; 746 d->appName = channel;
747 747
748 #if QT_VERSION > 235 748 #if QT_VERSION > 235
749 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6 749 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6
750 #endif 750 #endif
751 751
752 channel = "QPE/Application/" + channel; 752 channel = "QPE/Application/" + channel;
753 pidChannel = new QCopChannel( channel, this); 753 pidChannel = new QCopChannel( channel, this);
754 connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)), 754 connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)),
755 this, SLOT(pidMessage(const QCString &, const QByteArray &))); 755 this, SLOT(pidMessage(const QCString &, const QByteArray &)));
756 756
757 757
758 758
759 processQCopFile(); 759 processQCopFile();
760 d->keep_running = d->qcopq.isEmpty(); 760 d->keep_running = d->qcopq.isEmpty();
761 761
762 for (int a=0; a<argc; a++) { 762 for (int a=0; a<argc; a++) {
763 if ( qstrcmp(argv[a],"-preload")==0 ) { 763 if ( qstrcmp(argv[a],"-preload")==0 ) {
764 argv[a] = argv[a+1]; 764 argv[a] = argv[a+1];
765 a++; 765 a++;
766 d->preloaded = TRUE; 766 d->preloaded = TRUE;
767 argc-=1; 767 argc-=1;
768 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) { 768 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
769 argv[a] = argv[a+1]; 769 argv[a] = argv[a+1];
770 a++; 770 a++;
771 d->preloaded = TRUE; 771 d->preloaded = TRUE;
772 d->forceshow = TRUE; 772 d->forceshow = TRUE;
773 argc-=1; 773 argc-=1;
774 } 774 }
775 } 775 }
776 776
777 /* overide stored arguments */ 777 /* overide stored arguments */
778 setArgs(argc, argv); 778 setArgs(argc, argv);
779 779
780 /* install translation here */ 780 /* install translation here */
781 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) 781 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it )
782 installTranslation( (*it) + "/" + d->appName + ".qm" ); 782 installTranslation( (*it) + "/" + d->appName + ".qm" );
783} 783}
784#endif 784#endif
785 785
786 786
787static QPtrDict<void>* inputMethodDict = 0; 787static QPtrDict<void>* inputMethodDict = 0;
788static void createInputMethodDict() 788static void createInputMethodDict()
789{ 789{
790 if ( !inputMethodDict ) 790 if ( !inputMethodDict )
791 inputMethodDict = new QPtrDict<void>; 791 inputMethodDict = new QPtrDict<void>;
792} 792}
793 793
794/*! 794/*!
795 Returns the currently set hint to the system as to whether 795 Returns the currently set hint to the system as to whether
796 widget \a w has any use for text input methods. 796 widget \a w has any use for text input methods.
797 797
798 798
799 \sa setInputMethodHint() InputMethodHint 799 \sa setInputMethodHint() InputMethodHint
800*/ 800*/
801QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 801QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
802{ 802{
803 if ( inputMethodDict && w ) 803 if ( inputMethodDict && w )
804 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 804 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
805 return Normal; 805 return Normal;
806} 806}
807 807
808/*! 808/*!
809 \enum QPEApplication::InputMethodHint 809 \enum QPEApplication::InputMethodHint
810 810
811 \value Normal the application sometimes needs text input (the default). 811 \value Normal the application sometimes needs text input (the default).
812 \value AlwaysOff the application never needs text input. 812 \value AlwaysOff the application never needs text input.
813 \value AlwaysOn the application always needs text input. 813 \value AlwaysOn the application always needs text input.
814*/ 814*/
815 815
816/*! 816/*!
817 Hints to the system that widget \a w has use for text input methods 817 Hints to the system that widget \a w has use for text input methods
818 as specified by \a mode. 818 as specified by \a mode.
819 819
820 \sa inputMethodHint() InputMethodHint 820 \sa inputMethodHint() InputMethodHint
821*/ 821*/
822void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 822void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
823{ 823{
824 createInputMethodDict(); 824 createInputMethodDict();
825 if ( mode == Normal ) { 825 if ( mode == Normal ) {
826 inputMethodDict->remove 826 inputMethodDict->remove
827 ( w ); 827 ( w );
828 } 828 }
829 else { 829 else {
830 inputMethodDict->insert( w, ( void* ) mode ); 830 inputMethodDict->insert( w, ( void* ) mode );
831 } 831 }
832} 832}
833 833
834class HackDialog : public QDialog 834class HackDialog : public QDialog
835{ 835{
836public: 836public:
837 void acceptIt() 837 void acceptIt()
838 { 838 {
839 accept(); 839 accept();
840 } 840 }
841 void rejectIt() 841 void rejectIt()
842 { 842 {
843 reject(); 843 reject();
844 } 844 }
845}; 845};
846 846
847 847
848void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 848void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
849{ 849{
850 // specialised actions for certain widgets. May want to 850 // specialised actions for certain widgets. May want to
851 // add more stuff here. 851 // add more stuff here.
852 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 852 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
853 && activePopupWidget() ->parentWidget() 853 && activePopupWidget() ->parentWidget()
854 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 854 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
855 key = Qt::Key_Return; 855 key = Qt::Key_Return;
856 856
857 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 857 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
858 key = Qt::Key_Return; 858 key = Qt::Key_Return;
859 859
860#ifdef QWS 860#ifdef QWS
861 861
862 ke->simpleData.keycode = key; 862 ke->simpleData.keycode = key;
863#endif 863#endif
864} 864}
865 865
866class HackWidget : public QWidget 866class HackWidget : public QWidget
867{ 867{
868public: 868public:
869 bool needsOk() 869 bool needsOk()
870 { 870 {
871 return ( getWState() & WState_Reserved1 ); 871 return ( getWState() & WState_Reserved1 );
872 } 872 }
873}; 873};
874 874
875/*! 875/*!
876 \internal 876 \internal
877*/ 877*/
878 878
879#ifdef QWS 879#ifdef QWS
880bool QPEApplication::qwsEventFilter( QWSEvent * e ) 880bool QPEApplication::qwsEventFilter( QWSEvent * e )
881{ 881{
882 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 882 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
883 if ( qApp->type() != QApplication::GuiServer ) { 883 if ( qApp->type() != QApplication::GuiServer ) {
884 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 884 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
885 e << d->appName; 885 e << d->appName;
886 } 886 }
887 d->notbusysent = TRUE; 887 d->notbusysent = TRUE;
888 } 888 }
889 if ( type() == GuiServer ) { 889 if ( type() == GuiServer ) {
890 switch ( e->type ) { 890 switch ( e->type ) {
891 case QWSEvent::Mouse: 891 case QWSEvent::Mouse:
892 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 892 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
893 emit clientMoused(); 893 emit clientMoused();
894 break; 894 break;
895 default: 895 default:
896 break; 896 break;
897 } 897 }
898 } 898 }
899 if ( e->type == QWSEvent::Key ) { 899 if ( e->type == QWSEvent::Key ) {
900 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 900 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
901 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 901 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
902 // Use special "OK" key to press "OK" on top level widgets 902 // Use special "OK" key to press "OK" on top level widgets
903 QWidget * active = activeWindow(); 903 QWidget * active = activeWindow();
904 QWidget *popup = 0; 904 QWidget *popup = 0;
905 if ( active && active->isPopup() ) { 905 if ( active && active->isPopup() ) {
906 popup = active; 906 popup = active;
907 active = active->parentWidget(); 907 active = active->parentWidget();
908 } 908 }
909 if ( active && ( int ) active->winId() == ke->simpleData.window && 909 if ( active && ( int ) active->winId() == ke->simpleData.window &&
910 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 910 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
911 if ( ke->simpleData.is_press ) { 911 if ( ke->simpleData.is_press ) {
912 if ( popup ) 912 if ( popup )
913 popup->close(); 913 popup->close();
914 if ( active->inherits( "QDialog" ) ) { 914 if ( active->inherits( "QDialog" ) ) {
915 HackDialog * d = ( HackDialog * ) active; 915 HackDialog * d = ( HackDialog * ) active;
916 d->acceptIt(); 916 d->acceptIt();
917 return TRUE; 917 return TRUE;
918 } 918 }
919 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 919 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
920 QSignal s; 920 QSignal s;
921 s.connect( active, SLOT( accept() ) ); 921 s.connect( active, SLOT( accept() ) );
922 s.activate(); 922 s.activate();
923 } 923 }
924 else { 924 else {
925 // do the same as with the select key: Map to the default action of the widget: 925 // do the same as with the select key: Map to the default action of the widget:
926 mapToDefaultAction( ke, Qt::Key_Return ); 926 mapToDefaultAction( ke, Qt::Key_Return );
927 } 927 }
928 } 928 }
929 } 929 }
930 } 930 }
931 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 931 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
932 // Use special "select" key to do whatever default action a widget has 932 // Use special "select" key to do whatever default action a widget has
933 mapToDefaultAction( ke, Qt::Key_Space ); 933 mapToDefaultAction( ke, Qt::Key_Space );
934 } 934 }
935 else if ( ke->simpleData.keycode == Qt::Key_Escape && 935 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
936 ke->simpleData.is_press ) { 936 ke->simpleData.is_press ) {
937 // Escape key closes app if focus on toplevel 937 // Escape key closes app if focus on toplevel
938 QWidget * active = activeWindow(); 938 QWidget * active = activeWindow();
939 if ( active && active->testWFlags( WType_TopLevel ) && 939 if ( active && active->testWFlags( WType_TopLevel ) &&
940 ( int ) active->winId() == ke->simpleData.window && 940 ( int ) active->winId() == ke->simpleData.window &&
941 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 941 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
942 if ( active->inherits( "QDialog" ) ) { 942 if ( active->inherits( "QDialog" ) ) {
943 HackDialog * d = ( HackDialog * ) active; 943 HackDialog * d = ( HackDialog * ) active;
944 d->rejectIt(); 944 d->rejectIt();
945 return TRUE; 945 return TRUE;
946 } 946 }
947 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 947 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
948 active->close(); 948 active->close();
949 } 949 }
950 } 950 }
951 } 951 }
952 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { 952 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) {
953 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) 953 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... ))
954 // but we cannot access libopie function within libqpe :( 954 // but we cannot access libopie function within libqpe :(
955 955
956 QWidget * active = activeWindow ( ); 956 QWidget * active = activeWindow ( );
957 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { 957 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) {
958 if ( d-> kbgrabbed ) { // we grabbed the keyboard 958 if ( d-> kbgrabbed ) { // we grabbed the keyboard
959 QChar ch ( ke-> simpleData.unicode ); 959 QChar ch ( ke-> simpleData.unicode );
960 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, 960 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease,
961 ke-> simpleData.keycode, 961 ke-> simpleData.keycode,
962 ch. latin1 ( ), 962 ch. latin1 ( ),
963 ke-> simpleData.modifiers, 963 ke-> simpleData.modifiers,
964 QString ( ch ), 964 QString ( ch ),
965 ke-> simpleData.is_auto_repeat, 1 ); 965 ke-> simpleData.is_auto_repeat, 1 );
966 966
967 QObject *which = QWidget::keyboardGrabber ( ); 967 QObject *which = QWidget::keyboardGrabber ( );
968 if ( !which ) 968 if ( !which )
969 which = QApplication::focusWidget ( ); 969 which = QApplication::focusWidget ( );
970 if ( !which ) 970 if ( !which )
971 which = QApplication::activeWindow ( ); 971 which = QApplication::activeWindow ( );
972 if ( !which ) 972 if ( !which )
973 which = qApp; 973 which = qApp;
974 974
975 QApplication::sendEvent ( which, &qke ); 975 QApplication::sendEvent ( which, &qke );
976 } 976 }
977 else { // we didn't grab the keyboard, so send the event to the launcher 977 else { // we didn't grab the keyboard, so send the event to the launcher
978 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); 978 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" );
979 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat ); 979 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat );
980 } 980 }
981 } 981 }
982 return true; 982 return true;
983 } 983 }
984 } 984 }
985 if ( e->type == QWSEvent::Focus ) { 985 if ( e->type == QWSEvent::Focus ) {
986 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 986 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
987 if ( !fe->simpleData.get_focus ) { 987 if ( !fe->simpleData.get_focus ) {
988 QWidget * active = activeWindow(); 988 QWidget * active = activeWindow();
989 while ( active && active->isPopup() ) { 989 while ( active && active->isPopup() ) {
990 active->close(); 990 active->close();
991 active = activeWindow(); 991 active = activeWindow();
992 } 992 }
993 } 993 }
994 else { 994 else {
995 // make sure our modal widget is ALWAYS on top 995 // make sure our modal widget is ALWAYS on top
996 QWidget *topm = activeModalWidget(); 996 QWidget *topm = activeModalWidget();
997 if ( topm ) { 997 if ( topm ) {
998 topm->raise(); 998 topm->raise();
999 } 999 }
1000 } 1000 }
1001 if ( fe->simpleData.get_focus && inputMethodDict ) { 1001 if ( fe->simpleData.get_focus && inputMethodDict ) {
1002 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 1002 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
1003 if ( m == AlwaysOff ) 1003 if ( m == AlwaysOff )
1004 Global::hideInputMethod(); 1004 Global::hideInputMethod();
1005 if ( m == AlwaysOn ) 1005 if ( m == AlwaysOn )
1006 Global::showInputMethod(); 1006 Global::showInputMethod();
1007 } 1007 }
1008 } 1008 }
1009 1009
1010 1010
1011 return QApplication::qwsEventFilter( e ); 1011 return QApplication::qwsEventFilter( e );
1012} 1012}
1013#endif 1013#endif
1014 1014
1015/*! 1015/*!
1016 Destroys the QPEApplication. 1016 Destroys the QPEApplication.
1017*/ 1017*/
1018QPEApplication::~QPEApplication() 1018QPEApplication::~QPEApplication()
1019{ 1019{
1020 ungrabKeyboard(); 1020 ungrabKeyboard();
1021#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 1021#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
1022 // Need to delete QCopChannels early, since the display will 1022 // Need to delete QCopChannels early, since the display will
1023 // be gone by the time we get to ~QObject(). 1023 // be gone by the time we get to ~QObject().
1024 delete sysChannel; 1024 delete sysChannel;
1025 delete pidChannel; 1025 delete pidChannel;
1026#endif 1026#endif
1027 1027
1028 delete d; 1028 delete d;
1029} 1029}
1030 1030
1031/*! 1031/*!
1032 Returns <tt>$OPIEDIR/</tt>. 1032 Returns <tt>$OPIEDIR/</tt>.
1033*/ 1033*/
1034QString QPEApplication::qpeDir() 1034QString QPEApplication::qpeDir()
1035{ 1035{
1036 const char * base = getenv( "OPIEDIR" ); 1036 const char * base = getenv( "OPIEDIR" );
1037 if ( base ) 1037 if ( base )
1038 return QString( base ) + "/"; 1038 return QString( base ) + "/";
1039 1039
1040 return QString( "../" ); 1040 return QString( "../" );
1041} 1041}
1042 1042
1043/*! 1043/*!
1044 Returns the user's current Document directory. There is a trailing "/". 1044 Returns the user's current Document directory. There is a trailing "/".
1045 .. well, it does now,, and there's no trailing '/' 1045 .. well, it does now,, and there's no trailing '/'
1046*/ 1046*/
1047QString QPEApplication::documentDir() 1047QString QPEApplication::documentDir()
1048{ 1048{
1049 const char* base = getenv( "HOME"); 1049 const char* base = getenv( "HOME");
1050 if ( base ) 1050 if ( base )
1051 return QString( base ) + "/Documents"; 1051 return QString( base ) + "/Documents";
1052 1052
1053 return QString( "../Documents" ); 1053 return QString( "../Documents" );
1054} 1054}
1055 1055
1056static int deforient = -1; 1056static int deforient = -1;
1057 1057
1058/*! 1058/*!
1059 \internal 1059 \internal
1060*/ 1060*/
1061int QPEApplication::defaultRotation() 1061int QPEApplication::defaultRotation()
1062{ 1062{
1063 if ( deforient < 0 ) { 1063 if ( deforient < 0 ) {
1064 QString d = getenv( "QWS_DISPLAY" ); 1064 QString d = getenv( "QWS_DISPLAY" );
1065 if ( d.contains( "Rot90" ) ) { 1065 if ( d.contains( "Rot90" ) ) {
1066 deforient = 90; 1066 deforient = 90;
1067 } 1067 }
1068 else if ( d.contains( "Rot180" ) ) { 1068 else if ( d.contains( "Rot180" ) ) {
1069 deforient = 180; 1069 deforient = 180;
1070 } 1070 }
1071 else if ( d.contains( "Rot270" ) ) { 1071 else if ( d.contains( "Rot270" ) ) {
1072 deforient = 270; 1072 deforient = 270;
1073 } 1073 }
1074 else { 1074 else {
1075 deforient = 0; 1075 deforient = 0;
1076 } 1076 }
1077 } 1077 }
1078 return deforient; 1078 return deforient;
1079} 1079}
1080 1080
1081/*! 1081/*!
1082 \internal 1082 \internal
1083*/ 1083*/
1084void QPEApplication::setDefaultRotation( int r ) 1084void QPEApplication::setDefaultRotation( int r )
1085{ 1085{
1086 if ( qApp->type() == GuiServer ) { 1086 if ( qApp->type() == GuiServer ) {
1087 deforient = r; 1087 deforient = r;
1088 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 1088 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
1089 Config config("qpe"); 1089 Config config("qpe");
1090 config.setGroup( "Rotation" ); 1090 config.setGroup( "Rotation" );
1091 config.writeEntry( "Rot", r ); 1091 config.writeEntry( "Rot", r );
1092 } 1092 }
1093 else { 1093 else {
1094#ifndef QT_NO_COP 1094#ifndef QT_NO_COP
1095 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 1095 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
1096 e << r; 1096 e << r;
1097 } 1097 }
1098#endif 1098#endif
1099 1099
1100 } 1100 }
1101} 1101}
1102 1102
1103#include <qgfx_qws.h> 1103#include <qgfx_qws.h>
1104#include <qwindowsystem_qws.h> 1104#include <qwindowsystem_qws.h>
1105#include <qpixmapcache.h>
1106 1105
1107extern void qws_clearLoadedFonts(); 1106extern void qws_clearLoadedFonts();
1108 1107
1109void QPEApplication::setCurrentMode( int x, int y, int depth ) 1108void QPEApplication::setCurrentMode( int x, int y, int depth )
1110{ 1109{
1111 // Reset the caches 1110 // Reset the caches
1112 qws_clearLoadedFonts(); 1111 qws_clearLoadedFonts();
1113 QPixmapCache::clear(); 1112 QPixmapCache::clear();
1114 1113
1115 // Change the screen mode 1114 // Change the screen mode
1116 qt_screen->setMode(x, y, depth); 1115 qt_screen->setMode(x, y, depth);
1117 1116
1118 if ( qApp->type() == GuiServer ) { 1117 if ( qApp->type() == GuiServer ) {
1119 // Reconfigure the GuiServer 1118 // Reconfigure the GuiServer
1120 qwsServer->beginDisplayReconfigure(); 1119 qwsServer->beginDisplayReconfigure();
1121 qwsServer->endDisplayReconfigure(); 1120 qwsServer->endDisplayReconfigure();
1122 1121
1123 // Get all the running apps to reset 1122 // Get all the running apps to reset
1124 QCopEnvelope env( "QPE/System", "reset()" ); 1123 QCopEnvelope env( "QPE/System", "reset()" );
1125 } 1124 }
1126} 1125}
1127 1126
1128void QPEApplication::reset() { 1127void QPEApplication::reset() {
1129 // Reconnect to the screen 1128 // Reconnect to the screen
1130 qt_screen->disconnect(); 1129 qt_screen->disconnect();
1131 qt_screen->connect( QString::null ); 1130 qt_screen->connect( QString::null );
1132 1131
1133 // Redraw everything 1132 // Redraw everything
1134 applyStyle(); 1133 applyStyle();
1135} 1134}
1136 1135
1137/*! 1136/*!
1138 \internal 1137 \internal
1139*/ 1138*/
1140void QPEApplication::applyStyle() 1139void QPEApplication::applyStyle()
1141{ 1140{
1142 Config config( "qpe" ); 1141 Config config( "qpe" );
1143 config.setGroup( "Appearance" ); 1142 config.setGroup( "Appearance" );
1144 1143
1145#if QT_VERSION > 233 1144#if QT_VERSION > 233
1146#if !defined(OPIE_NO_OVERRIDE_QT) 1145#if !defined(OPIE_NO_OVERRIDE_QT)
1147 // don't block ourselves ... 1146 // don't block ourselves ...
1148 Opie::force_appearance = 0; 1147 Opie::force_appearance = 0;
1149 1148
1150 static QString appname = Opie::binaryName ( ); 1149 static QString appname = Opie::binaryName ( );
1151 1150
1152 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 1151 QStringList ex = config. readListEntry ( "NoStyle", ';' );
1153 int nostyle = 0; 1152 int nostyle = 0;
1154 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 1153 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
1155 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 1154 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
1156 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 1155 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
1157 break; 1156 break;
1158 } 1157 }
1159 } 1158 }
1160#else 1159#else
1161 int nostyle = 0; 1160 int nostyle = 0;
1162#endif 1161#endif
1163 1162
1164 // Widget style 1163 // Widget style
1165 QString style = config.readEntry( "Style", "FlatStyle" ); 1164 QString style = config.readEntry( "Style", "FlatStyle" );
1166 1165
1167 // don't set a custom style 1166 // don't set a custom style
1168 if ( nostyle & Opie::Force_Style ) 1167 if ( nostyle & Opie::Force_Style )
1169 style = "FlatStyle"; 1168 style = "FlatStyle";
1170 1169
1171 internalSetStyle ( style ); 1170 internalSetStyle ( style );
1172 1171
1173 // Colors - from /etc/colors/Liquid.scheme 1172 // Colors - from /etc/colors/Liquid.scheme
1174 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) ); 1173 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) );
1175 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) ); 1174 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) );
1176 QPalette pal( btncolor, bgcolor ); 1175 QPalette pal( btncolor, bgcolor );
1177 QString color = config.readEntry( "Highlight", "#73adef" ); 1176 QString color = config.readEntry( "Highlight", "#73adef" );
1178 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 1177 pal.setColor( QColorGroup::Highlight, QColor( color ) );
1179 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 1178 color = config.readEntry( "HighlightedText", "#FFFFFF" );
1180 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 1179 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
1181 color = config.readEntry( "Text", "#000000" ); 1180 color = config.readEntry( "Text", "#000000" );
1182 pal.setColor( QColorGroup::Text, QColor( color ) ); 1181 pal.setColor( QColorGroup::Text, QColor( color ) );
1183 color = config.readEntry( "ButtonText", "#000000" ); 1182 color = config.readEntry( "ButtonText", "#000000" );
1184 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 1183 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
1185 color = config.readEntry( "Base", "#FFFFFF" ); 1184 color = config.readEntry( "Base", "#FFFFFF" );
1186 pal.setColor( QColorGroup::Base, QColor( color ) ); 1185 pal.setColor( QColorGroup::Base, QColor( color ) );
1187 1186
1188 pal.setColor( QPalette::Disabled, QColorGroup::Text, 1187 pal.setColor( QPalette::Disabled, QColorGroup::Text,
1189 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 1188 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
1190 1189
1191 setPalette( pal, TRUE ); 1190 setPalette( pal, TRUE );
1192 1191
1193 // Window Decoration 1192 // Window Decoration
1194 QString dec = config.readEntry( "Decoration", "Flat" ); 1193 QString dec = config.readEntry( "Decoration", "Flat" );
1195 1194
1196 // don't set a custom deco 1195 // don't set a custom deco
1197 if ( nostyle & Opie::Force_Decoration ) 1196 if ( nostyle & Opie::Force_Decoration )
1198 dec = ""; 1197 dec = "";
1199 1198
1200 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle); 1199 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
1201 1200
1202 if ( dec != d->decorationName ) { 1201 if ( dec != d->decorationName ) {
1203 qwsSetDecoration( new QPEDecoration( dec ) ); 1202 qwsSetDecoration( new QPEDecoration( dec ) );
1204 d->decorationName = dec; 1203 d->decorationName = dec;
1205 } 1204 }
1206 1205
1207 // Font 1206 // Font
1208 QString ff = config.readEntry( "FontFamily", font().family() ); 1207 QString ff = config.readEntry( "FontFamily", font().family() );
1209 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 1208 int fs = config.readNumEntry( "FontSize", font().pointSize() );
1210 1209
1211 // don't set a custom font 1210 // don't set a custom font
1212 if ( nostyle & Opie::Force_Font ) { 1211 if ( nostyle & Opie::Force_Font ) {
1213 ff = "Vera"; 1212 ff = "Vera";
1214 fs = 10; 1213 fs = 10;
1215 } 1214 }
1216 1215
1217 setFont ( QFont ( ff, fs ), true ); 1216 setFont ( QFont ( ff, fs ), true );
1218 1217
1219#if !defined(OPIE_NO_OVERRIDE_QT) 1218#if !defined(OPIE_NO_OVERRIDE_QT)
1220 // revert to global blocking policy ... 1219 // revert to global blocking policy ...
1221 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None; 1220 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None;
1222 Opie::force_appearance &= ~nostyle; 1221 Opie::force_appearance &= ~nostyle;
1223#endif 1222#endif
1224#endif 1223#endif
1225} 1224}
1226 1225
1227void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1226void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1228{ 1227{
1229#ifdef Q_WS_QWS 1228#ifdef Q_WS_QWS
1230 QDataStream stream( data, IO_ReadOnly ); 1229 QDataStream stream( data, IO_ReadOnly );
1231 if ( msg == "applyStyle()" ) { 1230 if ( msg == "applyStyle()" ) {
1232 applyStyle(); 1231 applyStyle();
1233 } 1232 }
1234 else if ( msg == "toggleApplicationMenu()" ) { 1233 else if ( msg == "toggleApplicationMenu()" ) {
1235 QWidget *active = activeWindow ( ); 1234 QWidget *active = activeWindow ( );
1236 1235
1237 if ( active ) { 1236 if ( active ) {
1238 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( ); 1237 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( );
1239 bool oldactive = man-> isActive ( ); 1238 bool oldactive = man-> isActive ( );
1240 1239
1241 man-> setActive( !man-> isActive() ); 1240 man-> setActive( !man-> isActive() );
1242 1241
1243 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu 1242 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu
1244 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" ); 1243 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" );
1245 } 1244 }
1246 } 1245 }
1247 } 1246 }
1248 else if ( msg == "setDefaultRotation(int)" ) { 1247 else if ( msg == "setDefaultRotation(int)" ) {
1249 if ( type() == GuiServer ) { 1248 if ( type() == GuiServer ) {
1250 int r; 1249 int r;
1251 stream >> r; 1250 stream >> r;
1252 setDefaultRotation( r ); 1251 setDefaultRotation( r );
1253 } 1252 }
1254 } 1253 }
1255 else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net> 1254 else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net>
1256 if ( type() == GuiServer ) { 1255 if ( type() == GuiServer ) {
1257 int x, y, depth; 1256 int x, y, depth;
1258 stream >> x; 1257 stream >> x;
1259 stream >> y; 1258 stream >> y;
1260 stream >> depth; 1259 stream >> depth;
1261 setCurrentMode( x, y, depth ); 1260 setCurrentMode( x, y, depth );
1262 } 1261 }
1263 } 1262 }
1264 else if ( msg == "reset()" ) { 1263 else if ( msg == "reset()" ) {
1265 if ( type() != GuiServer ) 1264 if ( type() != GuiServer )
1266 reset(); 1265 reset();
1267 } 1266 }
1268 else if ( msg == "setCurrentRotation(int)" ) { 1267 else if ( msg == "setCurrentRotation(int)" ) {
1269 int r; 1268 int r;
1270 stream >> r; 1269 stream >> r;
1271 setCurrentRotation( r ); 1270 setCurrentRotation( r );
1272 } 1271 }
1273 else if ( msg == "shutdown()" ) { 1272 else if ( msg == "shutdown()" ) {
1274 if ( type() == GuiServer ) 1273 if ( type() == GuiServer )
1275 shutdown(); 1274 shutdown();
1276 } 1275 }
1277 else if ( msg == "quit()" ) { 1276 else if ( msg == "quit()" ) {
1278 if ( type() != GuiServer ) 1277 if ( type() != GuiServer )
1279 tryQuit(); 1278 tryQuit();
1280 } 1279 }
1281 else if ( msg == "forceQuit()" ) { 1280 else if ( msg == "forceQuit()" ) {
1282 if ( type() != GuiServer ) 1281 if ( type() != GuiServer )
1283 quit(); 1282 quit();
1284 } 1283 }
1285 else if ( msg == "restart()" ) { 1284 else if ( msg == "restart()" ) {
1286 if ( type() == GuiServer ) 1285 if ( type() == GuiServer )
1287 restart(); 1286 restart();
1288 } 1287 }
1289 else if ( msg == "language(QString)" ) { 1288 else if ( msg == "language(QString)" ) {
1290 if ( type() == GuiServer ) { 1289 if ( type() == GuiServer ) {
1291 QString l; 1290 QString l;
1292 stream >> l; 1291 stream >> l;
1293 QString cl = getenv( "LANG" ); 1292 QString cl = getenv( "LANG" );
1294 if ( cl != l ) { 1293 if ( cl != l ) {
1295 if ( l.isNull() ) 1294 if ( l.isNull() )
1296 unsetenv( "LANG" ); 1295 unsetenv( "LANG" );
1297 else 1296 else
1298 setenv( "LANG", l.latin1(), 1 ); 1297 setenv( "LANG", l.latin1(), 1 );
1299 restart(); 1298 restart();
1300 } 1299 }
1301 } 1300 }
1302 } 1301 }
1303 else if ( msg == "timeChange(QString)" ) { 1302 else if ( msg == "timeChange(QString)" ) {
1304 QString t; 1303 QString t;
1305 stream >> t; 1304 stream >> t;
1306 if ( t.isNull() ) 1305 if ( t.isNull() )
1307 unsetenv( "TZ" ); 1306 unsetenv( "TZ" );
1308 else 1307 else
1309 setenv( "TZ", t.latin1(), 1 ); 1308 setenv( "TZ", t.latin1(), 1 );
1310 // emit the signal so everyone else knows... 1309 // emit the signal so everyone else knows...
1311 emit timeChanged(); 1310 emit timeChanged();
1312 } 1311 }
1313 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1312 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1314 if ( type() == GuiServer ) { 1313 if ( type() == GuiServer ) {
1315 QDateTime when; 1314 QDateTime when;
1316 QCString channel, message; 1315 QCString channel, message;
1317 int data; 1316 int data;
1318 stream >> when >> channel >> message >> data; 1317 stream >> when >> channel >> message >> data;
1319 AlarmServer::addAlarm( when, channel, message, data ); 1318 AlarmServer::addAlarm( when, channel, message, data );
1320 } 1319 }
1321 } 1320 }
1322 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1321 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1323 if ( type() == GuiServer ) { 1322 if ( type() == GuiServer ) {
1324 QDateTime when; 1323 QDateTime when;
1325 QCString channel, message; 1324 QCString channel, message;
1326 int data; 1325 int data;
1327 stream >> when >> channel >> message >> data; 1326 stream >> when >> channel >> message >> data;
1328 AlarmServer::deleteAlarm( when, channel, message, data ); 1327 AlarmServer::deleteAlarm( when, channel, message, data );
1329 } 1328 }
1330 } 1329 }
1331 else if ( msg == "clockChange(bool)" ) { 1330 else if ( msg == "clockChange(bool)" ) {
1332 int tmp; 1331 int tmp;
1333 stream >> tmp; 1332 stream >> tmp;
1334 emit clockChanged( tmp ); 1333 emit clockChanged( tmp );
1335 } 1334 }
1336 else if ( msg == "weekChange(bool)" ) { 1335 else if ( msg == "weekChange(bool)" ) {
1337 int tmp; 1336 int tmp;
1338 stream >> tmp; 1337 stream >> tmp;
1339 emit weekChanged( tmp ); 1338 emit weekChanged( tmp );
1340 } 1339 }
1341 else if ( msg == "setDateFormat(DateFormat)" ) { 1340 else if ( msg == "setDateFormat(DateFormat)" ) {
1342 DateFormat tmp; 1341 DateFormat tmp;
1343 stream >> tmp; 1342 stream >> tmp;
1344 emit dateFormatChanged( tmp ); 1343 emit dateFormatChanged( tmp );
1345 } 1344 }
1346 else if ( msg == "setVolume(int,int)" ) { 1345 else if ( msg == "setVolume(int,int)" ) {
1347 int t, v; 1346 int t, v;
1348 stream >> t >> v; 1347 stream >> t >> v;
1349 setVolume( t, v ); 1348 setVolume( t, v );
1350 emit volumeChanged( muted ); 1349 emit volumeChanged( muted );
1351 } 1350 }
1352 else if ( msg == "volumeChange(bool)" ) { 1351 else if ( msg == "volumeChange(bool)" ) {
1353 stream >> muted; 1352 stream >> muted;
1354 setVolume(); 1353 setVolume();
1355 emit volumeChanged( muted ); 1354 emit volumeChanged( muted );
1356 } 1355 }
1357 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1356 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1358 int t, v; 1357 int t, v;
1359 stream >> t >> v; 1358 stream >> t >> v;
1360 setMic( t, v ); 1359 setMic( t, v );
1361 emit micChanged( micMuted ); 1360 emit micChanged( micMuted );
1362 } 1361 }
1363 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1362 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1364 stream >> micMuted; 1363 stream >> micMuted;
1365 setMic(); 1364 setMic();
1366 emit micChanged( micMuted ); 1365 emit micChanged( micMuted );
1367 } 1366 }
1368 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1367 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1369 int t, v; 1368 int t, v;
1370 stream >> t >> v; 1369 stream >> t >> v;
1371 setBass( t, v ); 1370 setBass( t, v );
1372 } 1371 }
1373 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1372 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1374 setBass(); 1373 setBass();
1375 } 1374 }
1376 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1375 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1377 int t, v; 1376 int t, v;
1378 stream >> t >> v; 1377 stream >> t >> v;
1379 setTreble( t, v ); 1378 setTreble( t, v );
1380 } 1379 }
1381 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1380 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1382 setTreble(); 1381 setTreble();
1383 } else if ( msg == "getMarkedText()" ) { 1382 } else if ( msg == "getMarkedText()" ) {
1384 if ( type() == GuiServer ) { 1383 if ( type() == GuiServer ) {
1385 const ushort unicode = 'C'-'@'; 1384 const ushort unicode = 'C'-'@';
1386 const int scan = Key_C; 1385 const int scan = Key_C;
1387 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); 1386 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
1388 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); 1387 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
1389 } 1388 }
1390 } else if ( msg == "newChannel(QString)") { 1389 } else if ( msg == "newChannel(QString)") {
1391 QString myChannel = "QPE/Application/" + d->appName; 1390 QString myChannel = "QPE/Application/" + d->appName;
1392 QString channel; 1391 QString channel;
1393 stream >> channel; 1392 stream >> channel;
1394 if (channel == myChannel) { 1393 if (channel == myChannel) {
1395 processQCopFile(); 1394 processQCopFile();
1396 d->sendQCopQ(); 1395 d->sendQCopQ();
1397 } 1396 }
1398 } 1397 }
1399 1398
1400 1399
1401#endif 1400#endif
1402} 1401}
1403 1402
1404 1403
1405 1404
1406 1405
1407 1406
1408/*! 1407/*!
1409 \internal 1408 \internal
1410*/ 1409*/
1411bool QPEApplication::raiseAppropriateWindow() 1410bool QPEApplication::raiseAppropriateWindow()
1412{ 1411{
1413 bool r=FALSE; 1412 bool r=FALSE;
1414 1413
1415 // 1. Raise the main widget 1414 // 1. Raise the main widget
1416 QWidget *top = d->qpe_main_widget; 1415 QWidget *top = d->qpe_main_widget;
1417 if ( !top ) top = mainWidget(); 1416 if ( !top ) top = mainWidget();
1418 1417
1419 if ( top && d->keep_running ) { 1418 if ( top && d->keep_running ) {
1420 if ( top->isVisible() ) 1419 if ( top->isVisible() )
1421 r = TRUE; 1420 r = TRUE;
1422 else if (d->preloaded) { 1421 else if (d->preloaded) {
1423 // We are preloaded and not visible.. pretend we just started.. 1422 // We are preloaded and not visible.. pretend we just started..
1424#ifndef QT_NO_COP 1423#ifndef QT_NO_COP
1425 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1424 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1426 e << d->appName; 1425 e << d->appName;
1427#endif 1426#endif
1428 } 1427 }
1429 1428
1430 d->show_mx(top,d->nomaximize, d->appName); 1429 d->show_mx(top,d->nomaximize, d->appName);
1431 top->raise(); 1430 top->raise();
1432 } 1431 }
1433 1432
1434 QWidget *topm = activeModalWidget(); 1433 QWidget *topm = activeModalWidget();
1435 1434
1436 // 2. Raise any parentless widgets (except top and topm, as they 1435 // 2. Raise any parentless widgets (except top and topm, as they
1437 // are raised before and after this loop). Order from most 1436 // are raised before and after this loop). Order from most
1438 // recently raised as deepest to least recently as top, so 1437 // recently raised as deepest to least recently as top, so
1439 // that repeated calls cycle through widgets. 1438 // that repeated calls cycle through widgets.
1440 QWidgetList *list = topLevelWidgets(); 1439 QWidgetList *list = topLevelWidgets();
1441 if ( list ) { 1440 if ( list ) {
1442 bool foundlast = FALSE; 1441 bool foundlast = FALSE;
1443 QWidget* topsub = 0; 1442 QWidget* topsub = 0;
1444 if ( d->lastraised ) { 1443 if ( d->lastraised ) {
1445 for (QWidget* w = list->first(); w; w = list->next()) { 1444 for (QWidget* w = list->first(); w; w = list->next()) {
1446 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1445 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1447 if ( w == d->lastraised ) 1446 if ( w == d->lastraised )
1448 foundlast = TRUE; 1447 foundlast = TRUE;
1449 if ( foundlast ) { 1448 if ( foundlast ) {
1450 w->raise(); 1449 w->raise();
1451 topsub = w; 1450 topsub = w;
1452 } 1451 }
1453 } 1452 }
1454 } 1453 }
1455 } 1454 }
1456 for (QWidget* w = list->first(); w; w = list->next()) { 1455 for (QWidget* w = list->first(); w; w = list->next()) {
1457 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1456 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1458 if ( w == d->lastraised ) 1457 if ( w == d->lastraised )
1459 break; 1458 break;
1460 w->raise(); 1459 w->raise();
1461 topsub = w; 1460 topsub = w;
1462 } 1461 }
1463 } 1462 }
1464 d->lastraised = topsub; 1463 d->lastraised = topsub;
1465 delete list; 1464 delete list;
1466 } 1465 }
1467 1466
1468 // 3. Raise the active modal widget. 1467 // 3. Raise the active modal widget.
1469 if ( topm && topm != top ) { 1468 if ( topm && topm != top ) {
1470 topm->show(); 1469 topm->show();
1471 topm->raise(); 1470 topm->raise();
1472 // If we haven't already handled the fastAppShowing message 1471 // If we haven't already handled the fastAppShowing message
1473 if (!top && d->preloaded) { 1472 if (!top && d->preloaded) {
1474#ifndef QT_NO_COP 1473#ifndef QT_NO_COP
1475 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1474 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1476 e << d->appName; 1475 e << d->appName;
1477#endif 1476#endif
1478 } 1477 }
1479 r = FALSE; 1478 r = FALSE;
1480 } 1479 }
1481 1480
1482 return r; 1481 return r;
1483} 1482}
1484 1483
1485 1484
1486void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1485void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1487{ 1486{
1488#ifdef Q_WS_QWS 1487#ifdef Q_WS_QWS
1489 1488
1490 if ( msg == "quit()" ) { 1489 if ( msg == "quit()" ) {
1491 tryQuit(); 1490 tryQuit();
1492 } 1491 }
1493 else if ( msg == "quitIfInvisible()" ) { 1492 else if ( msg == "quitIfInvisible()" ) {
1494 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1493 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1495 quit(); 1494 quit();
1496 } 1495 }
1497 else if ( msg == "close()" ) { 1496 else if ( msg == "close()" ) {
1498 hideOrQuit(); 1497 hideOrQuit();
1499 } 1498 }
1500 else if ( msg == "disablePreload()" ) { 1499 else if ( msg == "disablePreload()" ) {
1501 d->preloaded = FALSE; 1500 d->preloaded = FALSE;
1502 d->keep_running = TRUE; 1501 d->keep_running = TRUE;
1503 /* so that quit will quit */ 1502 /* so that quit will quit */
1504 } 1503 }
1505 else if ( msg == "enablePreload()" ) { 1504 else if ( msg == "enablePreload()" ) {
1506 if (d->qpe_main_widget) 1505 if (d->qpe_main_widget)
1507 d->preloaded = TRUE; 1506 d->preloaded = TRUE;
1508 d->keep_running = TRUE; 1507 d->keep_running = TRUE;
1509 /* so next quit won't quit */ 1508 /* so next quit won't quit */
1510 } 1509 }
1511 else if ( msg == "raise()" ) { 1510 else if ( msg == "raise()" ) {
1512 d->keep_running = TRUE; 1511 d->keep_running = TRUE;
1513 d->notbusysent = FALSE; 1512 d->notbusysent = FALSE;
1514 raiseAppropriateWindow(); 1513 raiseAppropriateWindow();
1515 // Tell the system we're still chugging along... 1514 // Tell the system we're still chugging along...
1516 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1515 QCopEnvelope e("QPE/System", "appRaised(QString)");
1517 e << d->appName; 1516 e << d->appName;
1518 } 1517 }
1519 else if ( msg == "flush()" ) { 1518 else if ( msg == "flush()" ) {
1520 emit flush(); 1519 emit flush();
1521 // we need to tell the desktop 1520 // we need to tell the desktop
1522 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1521 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1523 e << d->appName; 1522 e << d->appName;
1524 } 1523 }
1525 else if ( msg == "reload()" ) { 1524 else if ( msg == "reload()" ) {
1526 emit reload(); 1525 emit reload();
1527 } 1526 }
1528 else if ( msg == "setDocument(QString)" ) { 1527 else if ( msg == "setDocument(QString)" ) {
1529 d->keep_running = TRUE; 1528 d->keep_running = TRUE;
1530 QDataStream stream( data, IO_ReadOnly ); 1529 QDataStream stream( data, IO_ReadOnly );
1531 QString doc; 1530 QString doc;
1532 stream >> doc; 1531 stream >> doc;
1533 QWidget *mw = mainWidget(); 1532 QWidget *mw = mainWidget();
1534 if ( !mw ) 1533 if ( !mw )
1535 mw = d->qpe_main_widget; 1534 mw = d->qpe_main_widget;
1536 if ( mw ) 1535 if ( mw )
1537 Global::setDocument( mw, doc ); 1536 Global::setDocument( mw, doc );
1538 1537
1539 } else if ( msg == "QPEProcessQCop()" ) { 1538 } else if ( msg == "QPEProcessQCop()" ) {
1540 processQCopFile(); 1539 processQCopFile();
1541 d->sendQCopQ(); 1540 d->sendQCopQ();
1542 }else 1541 }else
1543 { 1542 {
1544 bool p = d->keep_running; 1543 bool p = d->keep_running;
1545 d->keep_running = FALSE; 1544 d->keep_running = FALSE;
1546 emit appMessage( msg, data); 1545 emit appMessage( msg, data);
1547 if ( d->keep_running ) { 1546 if ( d->keep_running ) {
1548 d->notbusysent = FALSE; 1547 d->notbusysent = FALSE;
1549 raiseAppropriateWindow(); 1548 raiseAppropriateWindow();
1550 if ( !p ) { 1549 if ( !p ) {
1551 // Tell the system we're still chugging along... 1550 // Tell the system we're still chugging along...
1552#ifndef QT_NO_COP 1551#ifndef QT_NO_COP
1553 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1552 QCopEnvelope e("QPE/System", "appRaised(QString)");
1554 e << d->appName; 1553 e << d->appName;
1555#endif 1554#endif
1556 } 1555 }
1557 } 1556 }
1558 if ( p ) 1557 if ( p )
1559 d->keep_running = p; 1558 d->keep_running = p;
1560 } 1559 }
1561#endif 1560#endif
1562} 1561}
1563 1562
1564 1563
1565/*! 1564/*!
1566 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1565 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1567 consider passing TRUE for \a nomaximize rather than the default FALSE. 1566 consider passing TRUE for \a nomaximize rather than the default FALSE.
1568 1567
1569 \sa showMainDocumentWidget() 1568 \sa showMainDocumentWidget()
1570*/ 1569*/
1571void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) 1570void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
1572{ 1571{
1573 // setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit 1572 // setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit
1574 d->show(mw, nomaximize ); 1573 d->show(mw, nomaximize );
1575} 1574}
1576 1575
1577/*! 1576/*!
1578 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1577 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1579 consider passing TRUE for \a nomaximize rather than the default FALSE. 1578 consider passing TRUE for \a nomaximize rather than the default FALSE.
1580 1579
1581 This calls designates the application as 1580 This calls designates the application as
1582 a \link docwidget.html document-oriented\endlink application. 1581 a \link docwidget.html document-oriented\endlink application.
1583 1582
1584 The \a mw widget \e must have this slot: setDocument(const QString&). 1583 The \a mw widget \e must have this slot: setDocument(const QString&).
1585 1584
1586 \sa showMainWidget() 1585 \sa showMainWidget()
1587*/ 1586*/
1588void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) 1587void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1589{ 1588{
1590 if ( mw && argc() == 2 ) 1589 if ( mw && argc() == 2 )
1591 Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); 1590 Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
1592 1591
1593 1592
1594 //setMainWidget(mw); see above 1593 //setMainWidget(mw); see above
1595 d->show(mw, nomaximize ); 1594 d->show(mw, nomaximize );
1596} 1595}
1597 1596
1598 1597
1599/*! 1598/*!
1600 If an application is started via a \link qcop.html QCop\endlink 1599 If an application is started via a \link qcop.html QCop\endlink
1601 message, the application will process the \link qcop.html 1600 message, the application will process the \link qcop.html
1602 QCop\endlink message and then quit. If the application calls this 1601 QCop\endlink message and then quit. If the application calls this
1603 function while processing a \link qcop.html QCop\endlink message, 1602 function while processing a \link qcop.html QCop\endlink message,
1604 after processing its outstanding \link qcop.html QCop\endlink 1603 after processing its outstanding \link qcop.html QCop\endlink
1605 messages the application will start 'properly' and show itself. 1604 messages the application will start 'properly' and show itself.
1606 1605
1607 \sa keepRunning() 1606 \sa keepRunning()
1608*/ 1607*/
1609void QPEApplication::setKeepRunning() 1608void QPEApplication::setKeepRunning()
1610{ 1609{
1611 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1610 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1612 QPEApplication * qpeApp = ( QPEApplication* ) qApp; 1611 QPEApplication * qpeApp = ( QPEApplication* ) qApp;
1613 qpeApp->d->keep_running = TRUE; 1612 qpeApp->d->keep_running = TRUE;
1614 } 1613 }
1615} 1614}
1616 1615
1617/*! 1616/*!
1618 Returns TRUE if the application will quit after processing the 1617 Returns TRUE if the application will quit after processing the
1619 current list of qcop messages; otherwise returns FALSE. 1618 current list of qcop messages; otherwise returns FALSE.
1620 1619
1621 \sa setKeepRunning() 1620 \sa setKeepRunning()
1622*/ 1621*/
1623bool QPEApplication::keepRunning() const 1622bool QPEApplication::keepRunning() const
1624{ 1623{
1625 return d->keep_running; 1624 return d->keep_running;
1626} 1625}
1627 1626
1628/*! 1627/*!
1629 \internal 1628 \internal
1630*/ 1629*/
1631void QPEApplication::internalSetStyle( const QString &style ) 1630void QPEApplication::internalSetStyle( const QString &style )
1632{ 1631{
1633#if QT_VERSION >= 300 1632#if QT_VERSION >= 300
1634 if ( style == "QPE" ) { 1633 if ( style == "QPE" ) {
1635 setStyle( new QPEStyle ); 1634 setStyle( new QPEStyle );
1636 } 1635 }
1637 else { 1636 else {
1638 QStyle *s = QStyleFactory::create( style ); 1637 QStyle *s = QStyleFactory::create( style );
1639 if ( s ) 1638 if ( s )
1640 setStyle( s ); 1639 setStyle( s );
1641 } 1640 }
1642#else 1641#else
1643 if ( style == "Windows" ) { 1642 if ( style == "Windows" ) {
1644 setStyle( new QWindowsStyle ); 1643 setStyle( new QWindowsStyle );
1645 } 1644 }
1646 else if ( style == "QPE" ) { 1645 else if ( style == "QPE" ) {
1647 setStyle( new QPEStyle ); 1646 setStyle( new QPEStyle );
1648 } 1647 }
1649 else if ( style == "Light" ) { 1648 else if ( style == "Light" ) {
1650 setStyle( new LightStyle ); 1649 setStyle( new LightStyle );
1651 } 1650 }
1652#ifndef QT_NO_STYLE_PLATINUM 1651#ifndef QT_NO_STYLE_PLATINUM
1653 else if ( style == "Platinum" ) { 1652 else if ( style == "Platinum" ) {
1654 setStyle( new QPlatinumStyle ); 1653 setStyle( new QPlatinumStyle );
1655 } 1654 }
1656#endif 1655#endif
1657#ifndef QT_NO_STYLE_MOTIF 1656#ifndef QT_NO_STYLE_MOTIF
1658 else if ( style == "Motif" ) { 1657 else if ( style == "Motif" ) {
1659 setStyle( new QMotifStyle ); 1658 setStyle( new QMotifStyle );
1660 } 1659 }
1661#endif 1660#endif
1662#ifndef QT_NO_STYLE_MOTIFPLUS 1661#ifndef QT_NO_STYLE_MOTIFPLUS
1663 else if ( style == "MotifPlus" ) { 1662 else if ( style == "MotifPlus" ) {
1664 setStyle( new QMotifPlusStyle ); 1663 setStyle( new QMotifPlusStyle );
1665 } 1664 }
1666#endif 1665#endif
1667 1666
1668 else { 1667 else {
1669 QStyle *sty = 0; 1668 QStyle *sty = 0;
1670 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 1669 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/";
1671 1670
1672#ifdef Q_OS_MACX 1671#ifdef Q_OS_MACX
1673 if ( style. find ( ".dylib" ) > 0 ) 1672 if ( style. find ( ".dylib" ) > 0 )
1674 path += style; 1673 path += style;
1675 else 1674 else
1676 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility 1675 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility
1677#else 1676#else
1678 if ( style. find ( ".so" ) > 0 ) 1677 if ( style. find ( ".so" ) > 0 )
1679 path += style; 1678 path += style;
1680 else 1679 else
1681 path = path + "lib" + style. lower ( ) + ".so"; // compatibility 1680 path = path + "lib" + style. lower ( ) + ".so"; // compatibility
1682#endif 1681#endif
1683 static QLibrary *lastlib = 0; 1682 static QLibrary *lastlib = 0;
1684 static StyleInterface *lastiface = 0; 1683 static StyleInterface *lastiface = 0;
1685 1684
1686 QLibrary *lib = new QLibrary ( path ); 1685 QLibrary *lib = new QLibrary ( path );
1687 StyleInterface *iface = 0; 1686 StyleInterface *iface = 0;
1688 1687
1689 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) 1688 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface )
1690 sty = iface-> style ( ); 1689 sty = iface-> style ( );
1691 1690
1692 if ( sty ) { 1691 if ( sty ) {
1693 setStyle ( sty ); 1692 setStyle ( sty );
1694 1693
1695 if ( lastiface ) 1694 if ( lastiface )
1696 lastiface-> release ( ); 1695 lastiface-> release ( );
1697 lastiface = iface; 1696 lastiface = iface;
1698 1697
1699 if ( lastlib ) { 1698 if ( lastlib ) {
1700 lastlib-> unload ( ); 1699 lastlib-> unload ( );
1701 delete lastlib; 1700 delete lastlib;
1702 } 1701 }
1703 lastlib = lib; 1702 lastlib = lib;
1704 } 1703 }
1705 else { 1704 else {
1706 if ( iface ) 1705 if ( iface )
1707 iface-> release ( ); 1706 iface-> release ( );
1708 delete lib; 1707 delete lib;
1709 1708
1710 setStyle ( new LightStyle ( )); 1709 setStyle ( new LightStyle ( ));
1711 } 1710 }
1712 } 1711 }
1713#endif 1712#endif
1714} 1713}
1715 1714
1716/*! 1715/*!
1717 \internal 1716 \internal
1718*/ 1717*/
1719void QPEApplication::prepareForTermination( bool willrestart ) 1718void QPEApplication::prepareForTermination( bool willrestart )
1720{ 1719{
1721 if ( willrestart ) { 1720 if ( willrestart ) {
1722 // Draw a big wait icon, the image can be altered in later revisions 1721 // Draw a big wait icon, the image can be altered in later revisions
1723 // QWidget *d = QApplication::desktop(); 1722 // QWidget *d = QApplication::desktop();
1724 QImage img = Resource::loadImage( "launcher/new_wait" ); 1723 QImage img = Resource::loadImage( "launcher/new_wait" );
1725 QPixmap pix; 1724 QPixmap pix;
1726 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); 1725 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) );
1727 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | 1726 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize |
1728 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 1727 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
1729 lblWait->setPixmap( pix ); 1728 lblWait->setPixmap( pix );
1730 lblWait->setAlignment( QWidget::AlignCenter ); 1729 lblWait->setAlignment( QWidget::AlignCenter );
1731 lblWait->show(); 1730 lblWait->show();
1732 lblWait->showMaximized(); 1731 lblWait->showMaximized();
1733 } 1732 }
1734#ifndef SINGLE_APP 1733#ifndef SINGLE_APP
1735 { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); 1734 { QCopEnvelope envelope( "QPE/System", "forceQuit()" );
1736 } 1735 }
1737 processEvents(); // ensure the message goes out. 1736 processEvents(); // ensure the message goes out.
1738 sleep( 1 ); // You have 1 second to comply. 1737 sleep( 1 ); // You have 1 second to comply.
1739#endif 1738#endif
1740} 1739}
1741 1740
1742/*! 1741/*!
1743 \internal 1742 \internal
1744*/ 1743*/
1745void QPEApplication::shutdown() 1744void QPEApplication::shutdown()
1746{ 1745{
1747 // Implement in server's QPEApplication subclass 1746 // Implement in server's QPEApplication subclass
1748} 1747}
1749 1748
1750/*! 1749/*!
1751 \internal 1750 \internal
1752*/ 1751*/
1753void QPEApplication::restart() 1752void QPEApplication::restart()
1754{ 1753{
1755 // Implement in server's QPEApplication subclass 1754 // Implement in server's QPEApplication subclass
1756} 1755}
1757 1756
1758static QPtrDict<void>* stylusDict = 0; 1757static QPtrDict<void>* stylusDict = 0;
1759static void createDict() 1758static void createDict()
1760{ 1759{
1761 if ( !stylusDict ) 1760 if ( !stylusDict )
1762 stylusDict = new QPtrDict<void>; 1761 stylusDict = new QPtrDict<void>;
1763} 1762}
1764 1763
1765/*! 1764/*!
1766 Returns the current StylusMode for widget \a w. 1765 Returns the current StylusMode for widget \a w.
1767 1766
1768 \sa setStylusOperation() StylusMode 1767 \sa setStylusOperation() StylusMode
1769*/ 1768*/
1770QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 1769QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
1771{ 1770{
1772 if ( stylusDict ) 1771 if ( stylusDict )
1773 return ( StylusMode ) ( int ) stylusDict->find( w ); 1772 return ( StylusMode ) ( int ) stylusDict->find( w );
1774 return LeftOnly; 1773 return LeftOnly;
1775} 1774}
1776 1775
1777/*! 1776/*!
1778 \enum QPEApplication::StylusMode 1777 \enum QPEApplication::StylusMode
1779 1778
1780 \value LeftOnly the stylus only generates LeftButton 1779 \value LeftOnly the stylus only generates LeftButton
1781 events (the default). 1780 events (the default).
1782 \value RightOnHold the stylus generates RightButton events 1781 \value RightOnHold the stylus generates RightButton events
1783 if the user uses the press-and-hold gesture. 1782 if the user uses the press-and-hold gesture.
1784 1783
1785 \sa setStylusOperation() stylusOperation() 1784 \sa setStylusOperation() stylusOperation()
1786*/ 1785*/
1787 1786
1788/*! 1787/*!
1789 Causes widget \a w to receive mouse events according to the stylus 1788 Causes widget \a w to receive mouse events according to the stylus
1790 \a mode. 1789 \a mode.
1791 1790
1792 \sa stylusOperation() StylusMode 1791 \sa stylusOperation() StylusMode
1793*/ 1792*/
1794void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) 1793void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode )
1795{ 1794{
1796 createDict(); 1795 createDict();
1797 if ( mode == LeftOnly ) { 1796 if ( mode == LeftOnly ) {
1798 stylusDict->remove 1797 stylusDict->remove
1799 ( w ); 1798 ( w );
1800 w->removeEventFilter( qApp ); 1799 w->removeEventFilter( qApp );
1801 } 1800 }
1802 else { 1801 else {
1803 stylusDict->insert( w, ( void* ) mode ); 1802 stylusDict->insert( w, ( void* ) mode );
1804 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); 1803 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) );
1805 w->installEventFilter( qApp ); 1804 w->installEventFilter( qApp );
1806 } 1805 }
1807} 1806}
1808 1807
1809 1808
1810/*! 1809/*!
1811 \reimp 1810 \reimp
1812*/ 1811*/
1813bool QPEApplication::eventFilter( QObject *o, QEvent *e ) 1812bool QPEApplication::eventFilter( QObject *o, QEvent *e )
1814{ 1813{
1815 if ( !o->isWidgetType() ) 1814 if ( !o->isWidgetType() )
1816 return FALSE; 1815 return FALSE;
1817 1816
1818 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { 1817 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
1819 QMouseEvent * me = ( QMouseEvent* ) e; 1818 QMouseEvent * me = ( QMouseEvent* ) e;
1820 StylusMode mode = (StylusMode)(int)stylusDict->find(o); 1819 StylusMode mode = (StylusMode)(int)stylusDict->find(o);
1821 switch (mode) { 1820 switch (mode) {
1822 case RightOnHold: 1821 case RightOnHold:
1823 switch ( me->type() ) { 1822 switch ( me->type() ) {
1824 case QEvent::MouseButtonPress: 1823 case QEvent::MouseButtonPress:
1825 if ( me->button() == LeftButton ) { 1824 if ( me->button() == LeftButton ) {
1826 if (!d->presstimer ) 1825 if (!d->presstimer )
1827 d->presstimer = startTimer(500); // #### pref. 1826 d->presstimer = startTimer(500); // #### pref.
1828 d->presswidget = (QWidget*)o; 1827 d->presswidget = (QWidget*)o;
1829 d->presspos = me->pos(); 1828 d->presspos = me->pos();
1830 d->rightpressed = FALSE; 1829 d->rightpressed = FALSE;
1831 } 1830 }
1832 break; 1831 break;
1833 case QEvent::MouseMove: 1832 case QEvent::MouseMove:
1834 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) { 1833 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) {
1835 killTimer(d->presstimer); 1834 killTimer(d->presstimer);
1836 d->presstimer = 0; 1835 d->presstimer = 0;
1837 } 1836 }
1838 break; 1837 break;
1839 case QEvent::MouseButtonRelease: 1838 case QEvent::MouseButtonRelease:
1840 if ( me->button() == LeftButton ) { 1839 if ( me->button() == LeftButton ) {
1841 if ( d->presstimer ) { 1840 if ( d->presstimer ) {
1842 killTimer(d->presstimer); 1841 killTimer(d->presstimer);
1843 d->presstimer = 0; 1842 d->presstimer = 0;
1844 } 1843 }
1845 if ( d->rightpressed && d->presswidget ) { 1844 if ( d->rightpressed && d->presswidget ) {
1846 // Right released 1845 // Right released
1847 postEvent( d->presswidget, 1846 postEvent( d->presswidget,
1848 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), 1847 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
1849 RightButton, LeftButton + RightButton ) ); 1848 RightButton, LeftButton + RightButton ) );
1850 // Left released, off-widget 1849 // Left released, off-widget
1851 postEvent( d->presswidget, 1850 postEvent( d->presswidget,
1852 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), 1851 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1),
1853 LeftButton, LeftButton ) ); 1852 LeftButton, LeftButton ) );
1854 postEvent( d->presswidget, 1853 postEvent( d->presswidget,
1855 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), 1854 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1),
1856 LeftButton, LeftButton ) ); 1855 LeftButton, LeftButton ) );
1857 d->rightpressed = FALSE; 1856 d->rightpressed = FALSE;
1858 return TRUE; // don't send the real Left release 1857 return TRUE; // don't send the real Left release
1859 } 1858 }
1860 } 1859 }
1861 break; 1860 break;
1862 default: 1861 default:
1863 break; 1862 break;
1864 } 1863 }
1865 break; 1864 break;
1866 default: 1865 default:
1867 ; 1866 ;
1868 } 1867 }
1869 } 1868 }
1870 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 1869 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
1871 QKeyEvent *ke = (QKeyEvent *)e; 1870 QKeyEvent *ke = (QKeyEvent *)e;
1872 if ( ke->key() == Key_Enter ) { 1871 if ( ke->key() == Key_Enter ) {
1873 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 1872 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
1874 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 1873 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
1875 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 1874 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
1876 return TRUE; 1875 return TRUE;
1877 } 1876 }
1878 } 1877 }
1879 } 1878 }
1880 return FALSE; 1879 return FALSE;
1881} 1880}
1882 1881
1883/*! 1882/*!
1884 \reimp 1883 \reimp
1885*/ 1884*/
1886void QPEApplication::timerEvent( QTimerEvent *e ) 1885void QPEApplication::timerEvent( QTimerEvent *e )
1887{ 1886{
1888 if ( e->timerId() == d->presstimer && d->presswidget ) { 1887 if ( e->timerId() == d->presstimer && d->presswidget ) {
1889 // Right pressed 1888 // Right pressed
1890 postEvent( d->presswidget, 1889 postEvent( d->presswidget,
1891 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 1890 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
1892 RightButton, LeftButton ) ); 1891 RightButton, LeftButton ) );
1893 killTimer( d->presstimer ); 1892 killTimer( d->presstimer );
1894 d->presstimer = 0; 1893 d->presstimer = 0;
1895 d->rightpressed = TRUE; 1894 d->rightpressed = TRUE;
1896 } 1895 }
1897} 1896}
1898 1897
1899void QPEApplication::removeSenderFromStylusDict() 1898void QPEApplication::removeSenderFromStylusDict()
1900{ 1899{
1901 stylusDict->remove 1900 stylusDict->remove
1902 ( ( void* ) sender() ); 1901 ( ( void* ) sender() );
1903 if ( d->presswidget == sender() ) 1902 if ( d->presswidget == sender() )
1904 d->presswidget = 0; 1903 d->presswidget = 0;
1905} 1904}
1906 1905
1907/*! 1906/*!
1908 \internal 1907 \internal
1909*/ 1908*/
1910bool QPEApplication::keyboardGrabbed() const 1909bool QPEApplication::keyboardGrabbed() const
1911{ 1910{
1912 return d->kbgrabbed; 1911 return d->kbgrabbed;
1913} 1912}
1914 1913
1915 1914
1916/*! 1915/*!
1917 Reverses the effect of grabKeyboard(). This is called automatically 1916 Reverses the effect of grabKeyboard(). This is called automatically
1918 on program exit. 1917 on program exit.
1919*/ 1918*/
1920void QPEApplication::ungrabKeyboard() 1919void QPEApplication::ungrabKeyboard()
1921{ 1920{
1922 ((QPEApplication *) qApp )-> d-> kbgrabbed = false; 1921 ((QPEApplication *) qApp )-> d-> kbgrabbed = false;
1923} 1922}
1924 1923
1925/*! 1924/*!
1926 Grabs the physical keyboard keys, e.g. the application's launching 1925 Grabs the physical keyboard keys, e.g. the application's launching
1927 keys. Instead of launching applications when these keys are pressed 1926 keys. Instead of launching applications when these keys are pressed
1928 the signals emitted are sent to this application instead. Some games 1927 the signals emitted are sent to this application instead. Some games
1929 programs take over the launch keys in this way to make interaction 1928 programs take over the launch keys in this way to make interaction
1930 easier. 1929 easier.
1931 1930
1932 \sa ungrabKeyboard() 1931 \sa ungrabKeyboard()
1933*/ 1932*/
1934void QPEApplication::grabKeyboard() 1933void QPEApplication::grabKeyboard()
1935{ 1934{
1936 ((QPEApplication *) qApp )-> d-> kbgrabbed = true; 1935 ((QPEApplication *) qApp )-> d-> kbgrabbed = true;
1937} 1936}
1938 1937
1939/*! 1938/*!
1940 \reimp 1939 \reimp
1941*/ 1940*/
1942int QPEApplication::exec() 1941int QPEApplication::exec()
1943{ 1942{
1944 d->qcopQok = true; 1943 d->qcopQok = true;
1945#ifndef QT_NO_COP 1944#ifndef QT_NO_COP
1946 d->sendQCopQ(); 1945 d->sendQCopQ();
1947 if ( !d->keep_running ) 1946 if ( !d->keep_running )
1948 processEvents(); // we may have received QCop messages in the meantime. 1947 processEvents(); // we may have received QCop messages in the meantime.
1949#endif 1948#endif
1950 1949
1951 if ( d->keep_running ) 1950 if ( d->keep_running )
1952 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 1951 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
1953 return QApplication::exec(); 1952 return QApplication::exec();
1954 1953
1955#ifndef QT_NO_COP 1954#ifndef QT_NO_COP
1956 1955
1957 { 1956 {
1958 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1957 QCopEnvelope e( "QPE/System", "closing(QString)" );
1959 e << d->appName; 1958 e << d->appName;
1960 } 1959 }
1961#endif 1960#endif
1962 processEvents(); 1961 processEvents();
1963 return 0; 1962 return 0;
1964} 1963}
1965 1964
1966/*! 1965/*!
1967 \internal 1966 \internal
1968 External request for application to quit. Quits if possible without 1967 External request for application to quit. Quits if possible without
1969 loosing state. 1968 loosing state.
1970*/ 1969*/
1971void QPEApplication::tryQuit() 1970void QPEApplication::tryQuit()
1972{ 1971{
1973 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 1972 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
1974 return ; // Inside modal loop or konsole. Too hard to save state. 1973 return ; // Inside modal loop or konsole. Too hard to save state.
1975#ifndef QT_NO_COP 1974#ifndef QT_NO_COP
1976 1975
1977 { 1976 {
1978 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1977 QCopEnvelope e( "QPE/System", "closing(QString)" );
1979 e << d->appName; 1978 e << d->appName;
1980 } 1979 }
1981#endif 1980#endif
1982 processEvents(); 1981 processEvents();
1983 1982
1984 quit(); 1983 quit();
1985} 1984}
1986 1985
1987/*! 1986/*!
1988 \internal 1987 \internal
1989*/ 1988*/
1990void QPEApplication::installTranslation( const QString& baseName ) { 1989void QPEApplication::installTranslation( const QString& baseName ) {
1991 QTranslator* trans = new QTranslator(this); 1990 QTranslator* trans = new QTranslator(this);
1992 QString tfn = qpeDir() + "/i18n/"+baseName; 1991 QString tfn = qpeDir() + "/i18n/"+baseName;
1993 if ( trans->load( tfn ) ) 1992 if ( trans->load( tfn ) )
1994 installTranslator( trans ); 1993 installTranslator( trans );
1995 else 1994 else
1996 delete trans; 1995 delete trans;
1997} 1996}
1998 1997
1999/*! 1998/*!
2000 \internal 1999 \internal
2001 User initiated quit. Makes the window 'Go Away'. If preloaded this means 2000 User initiated quit. Makes the window 'Go Away'. If preloaded this means
2002 hiding the window. If not it means quitting the application. 2001 hiding the window. If not it means quitting the application.
2003 As this is user initiated we don't need to check state. 2002 As this is user initiated we don't need to check state.
2004*/ 2003*/
2005void QPEApplication::hideOrQuit() 2004void QPEApplication::hideOrQuit()
2006{ 2005{
2007 processEvents(); 2006 processEvents();
2008 2007
2009 // If we are a preloaded application we don't actually quit, so emit 2008 // If we are a preloaded application we don't actually quit, so emit
2010 // a System message indicating we're quasi-closing. 2009 // a System message indicating we're quasi-closing.
2011 if ( d->preloaded && d->qpe_main_widget ) 2010 if ( d->preloaded && d->qpe_main_widget )
2012#ifndef QT_NO_COP 2011#ifndef QT_NO_COP
2013 2012
2014 { 2013 {
2015 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 2014 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
2016 e << d->appName; 2015 e << d->appName;
2017 d->qpe_main_widget->hide(); 2016 d->qpe_main_widget->hide();
2018 } 2017 }
2019#endif 2018#endif
2020 else 2019 else
2021 quit(); 2020 quit();
2022} 2021}
2023 2022
2024#if (__GNUC__ > 2 ) 2023#if (__GNUC__ > 2 )
2025extern "C" void __cxa_pure_virtual(); 2024extern "C" void __cxa_pure_virtual();
2026 2025
2027void __cxa_pure_virtual() 2026void __cxa_pure_virtual()
2028{ 2027{
2029 fprintf( stderr, "Pure virtual called\n"); 2028 fprintf( stderr, "Pure virtual called\n");
2030 abort(); 2029 abort();
2031 2030
2032} 2031}
2033 2032
2034#endif 2033#endif
2035 2034
2036 2035
2037#if defined(OPIE_NEW_MALLOC) 2036#if defined(OPIE_NEW_MALLOC)
2038 2037
2039// The libraries with the skiff package (and possibly others) have 2038// The libraries with the skiff package (and possibly others) have
2040// completely useless implementations of builtin new and delete that 2039// completely useless implementations of builtin new and delete that
2041// use about 50% of your CPU. Here we revert to the simple libc 2040// use about 50% of your CPU. Here we revert to the simple libc
2042// functions. 2041// functions.
2043 2042
2044void* operator new[]( size_t size ) 2043void* operator new[]( size_t size )
2045{ 2044{
2046 return malloc( size ); 2045 return malloc( size );
2047} 2046}
2048 2047
2049void* operator new( size_t size ) 2048void* operator new( size_t size )
2050{ 2049{
2051 return malloc( size ); 2050 return malloc( size );
2052} 2051}
2053 2052
2054void operator delete[]( void* p ) 2053void operator delete[]( void* p )
2055{ 2054{
2056 free( p ); 2055 free( p );
2057} 2056}
2058 2057
2059void operator delete[]( void* p, size_t /*size*/ ) 2058void operator delete[]( void* p, size_t /*size*/ )
2060{ 2059{
2061 free( p ); 2060 free( p );
2062} 2061}
2063 2062
2064 2063
2065void operator delete( void* p ) 2064void operator delete( void* p )
2066{ 2065{
2067 free( p ); 2066 free( p );
2068} 2067}
2069 2068
2070void operator delete( void* p, size_t /*size*/ ) 2069void operator delete( void* p, size_t /*size*/ )
2071{ 2070{
2072 free( p ); 2071 free( p );
2073} 2072}
2074 2073
2075#endif 2074#endif
2076 2075
2077#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 2076#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
2078#include <qwidgetlist.h> 2077#include <qwidgetlist.h>
2079#ifdef QWS 2078#ifdef QWS
2080#include <qgfx_qws.h> 2079#include <qgfx_qws.h>
2081extern QRect qt_maxWindowRect; 2080extern QRect qt_maxWindowRect;
2082void qt_setMaxWindowRect(const QRect& r ) 2081void qt_setMaxWindowRect(const QRect& r )
2083{ 2082{
2084 qt_maxWindowRect = qt_screen->mapFromDevice( r, 2083 qt_maxWindowRect = qt_screen->mapFromDevice( r,
2085 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); 2084 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) );
2086 // Re-resize any maximized windows 2085 // Re-resize any maximized windows
2087 QWidgetList* l = QApplication::topLevelWidgets(); 2086 QWidgetList* l = QApplication::topLevelWidgets();
2088 if ( l ) { 2087 if ( l ) {
2089 QWidget * w = l->first(); 2088 QWidget * w = l->first();
2090 while ( w ) { 2089 while ( w ) {
2091 if ( w->isVisible() && w->isMaximized() ) { 2090 if ( w->isVisible() && w->isMaximized() ) {
2092 w->showMaximized(); 2091 w->showMaximized();
2093 } 2092 }
2094 w = l->next(); 2093 w = l->next();
2095 } 2094 }
2096 delete l; 2095 delete l;
2097 } 2096 }
2098} 2097}
2099#endif 2098#endif
2100#endif 2099#endif