summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index cf76000..755fb19 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,1715 +1,1726 @@
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 QPEApplication::showWidget( mw, nomaximize ); 179 if ( mw->layout() && mw->inherits("QDialog") ) {
180 QPEApplication::showDialog((QDialog*)mw, nomaximize);
181 }
182 else {
183#ifdef Q_WS_QWS
184 if ( !nomaximize )
185 mw->showMaximized();
186 else
187#endif
188
189 mw->show();
190 }
180 } 191 }
181 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) 192 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
182 { 193 {
183 /* 194 /*
184 // 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
185 // 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
186 // the applnk that has the corresponding argv[0] as this program 197 // the applnk that has the corresponding argv[0] as this program
187 // 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
188 // for the main widget. This saves duplicating translations for 199 // for the main widget. This saves duplicating translations for
189 // the app name in the program and in the .desktop files. 200 // the app name in the program and in the .desktop files.
190 201
191 AppLnkSet apps( appsPath ); 202 AppLnkSet apps( appsPath );
192 203
193 QList<AppLnk> appsList = apps.children(); 204 QList<AppLnk> appsList = apps.children();
194 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { 205 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
195 if ( (*it)->exec() == appName ) { 206 if ( (*it)->exec() == appName ) {
196 mw->setCaption( (*it)->name() ); 207 mw->setCaption( (*it)->name() );
197 return TRUE; 208 return TRUE;
198 } 209 }
199 } 210 }
200 */ 211 */
201 return FALSE; 212 return FALSE;
202 } 213 }
203 214
204 215
205 void show(QWidget* mw, bool nomax) 216 void show(QWidget* mw, bool nomax)
206 { 217 {
207 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); 218 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" );
208 nomaximize = nomax; 219 nomaximize = nomax;
209 qpe_main_widget = mw; 220 qpe_main_widget = mw;
210 qcopQok = TRUE; 221 qcopQok = TRUE;
211#ifndef QT_NO_COP 222#ifndef QT_NO_COP
212 223
213 sendQCopQ(); 224 sendQCopQ();
214#endif 225#endif
215 226
216 if ( preloaded ) { 227 if ( preloaded ) {
217 if (forceshow) 228 if (forceshow)
218 show_mx(mw, nomax); 229 show_mx(mw, nomax);
219 } 230 }
220 else if ( keep_running ) { 231 else if ( keep_running ) {
221 show_mx(mw, nomax); 232 show_mx(mw, nomax);
222 } 233 }
223 } 234 }
224 235
225 void loadTextCodecs() 236 void loadTextCodecs()
226 { 237 {
227 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; 238 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs";
228#ifdef Q_OS_MACX 239#ifdef Q_OS_MACX
229 QDir dir( path, "lib*.dylib" ); 240 QDir dir( path, "lib*.dylib" );
230#else 241#else
231 QDir dir( path, "lib*.so" ); 242 QDir dir( path, "lib*.so" );
232#endif 243#endif
233 QStringList list; 244 QStringList list;
234 if ( dir. exists ( )) 245 if ( dir. exists ( ))
235 list = dir.entryList(); 246 list = dir.entryList();
236 QStringList::Iterator it; 247 QStringList::Iterator it;
237 for ( it = list.begin(); it != list.end(); ++it ) { 248 for ( it = list.begin(); it != list.end(); ++it ) {
238 TextCodecInterface *iface = 0; 249 TextCodecInterface *iface = 0;
239 QLibrary *lib = new QLibrary( path + "/" + *it ); 250 QLibrary *lib = new QLibrary( path + "/" + *it );
240 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 251 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
241 QValueList<int> mibs = iface->mibEnums(); 252 QValueList<int> mibs = iface->mibEnums();
242 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { 253 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) {
243 (void)iface->createForMib(*i); 254 (void)iface->createForMib(*i);
244 // ### it exists now; need to remember if we can delete it 255 // ### it exists now; need to remember if we can delete it
245 } 256 }
246 } 257 }
247 else { 258 else {
248 lib->unload(); 259 lib->unload();
249 delete lib; 260 delete lib;
250 } 261 }
251 } 262 }
252 } 263 }
253 264
254 void loadImageCodecs() 265 void loadImageCodecs()
255 { 266 {
256 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 267 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
257#ifdef Q_OS_MACX 268#ifdef Q_OS_MACX
258 QDir dir( path, "lib*.dylib" ); 269 QDir dir( path, "lib*.dylib" );
259#else 270#else
260 QDir dir( path, "lib*.so" ); 271 QDir dir( path, "lib*.so" );
261#endif 272#endif
262 QStringList list; 273 QStringList list;
263 if ( dir. exists ( )) 274 if ( dir. exists ( ))
264 list = dir.entryList(); 275 list = dir.entryList();
265 QStringList::Iterator it; 276 QStringList::Iterator it;
266 for ( it = list.begin(); it != list.end(); ++it ) { 277 for ( it = list.begin(); it != list.end(); ++it ) {
267 ImageCodecInterface *iface = 0; 278 ImageCodecInterface *iface = 0;
268 QLibrary *lib = new QLibrary( path + "/" + *it ); 279 QLibrary *lib = new QLibrary( path + "/" + *it );
269 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 280 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
270 QStringList formats = iface->keys(); 281 QStringList formats = iface->keys();
271 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { 282 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) {
272 (void)iface->installIOHandler(*i); 283 (void)iface->installIOHandler(*i);
273 // ### it exists now; need to remember if we can delete it 284 // ### it exists now; need to remember if we can delete it
274 } 285 }
275 } 286 }
276 else { 287 else {
277 lib->unload(); 288 lib->unload();
278 delete lib; 289 delete lib;
279 } 290 }
280 } 291 }
281 } 292 }
282}; 293};
283 294
284class ResourceMimeFactory : public QMimeSourceFactory 295class ResourceMimeFactory : public QMimeSourceFactory
285{ 296{
286public: 297public:
287 ResourceMimeFactory() : resImage( 0 ) 298 ResourceMimeFactory() : resImage( 0 )
288 { 299 {
289 setFilePath( Global::helpPath() ); 300 setFilePath( Global::helpPath() );
290 setExtensionType( "html", "text/html;charset=UTF-8" ); 301 setExtensionType( "html", "text/html;charset=UTF-8" );
291 } 302 }
292 ~ResourceMimeFactory() { 303 ~ResourceMimeFactory() {
293 delete resImage; 304 delete resImage;
294 } 305 }
295 306
296 const QMimeSource* data( const QString& abs_name ) const 307 const QMimeSource* data( const QString& abs_name ) const
297 { 308 {
298 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 309 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
299 if ( !r ) { 310 if ( !r ) {
300 int sl = abs_name.length(); 311 int sl = abs_name.length();
301 do { 312 do {
302 sl = abs_name.findRev( '/', sl - 1 ); 313 sl = abs_name.findRev( '/', sl - 1 );
303 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 314 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
304 int dot = name.findRev( '.' ); 315 int dot = name.findRev( '.' );
305 if ( dot >= 0 ) 316 if ( dot >= 0 )
306 name = name.left( dot ); 317 name = name.left( dot );
307 QImage img = Resource::loadImage( name ); 318 QImage img = Resource::loadImage( name );
308 if ( !img.isNull() ) { 319 if ( !img.isNull() ) {
309 delete resImage; 320 delete resImage;
310 resImage = new QImageDrag( img ); 321 resImage = new QImageDrag( img );
311 r = resImage; 322 r = resImage;
312 } 323 }
313 } 324 }
314 while ( !r && sl > 0 ); 325 while ( !r && sl > 0 );
315 } 326 }
316 return r; 327 return r;
317 } 328 }
318private: 329private:
319 mutable QImageDrag *resImage; 330 mutable QImageDrag *resImage;
320}; 331};
321 332
322static int& hack(int& i) 333static int& hack(int& i)
323{ 334{
324#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 335#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
325 // 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
326 (void)new QUtf8Codec; 337 (void)new QUtf8Codec;
327 (void)new QUtf16Codec; 338 (void)new QUtf16Codec;
328#endif 339#endif
329 return i; 340 return i;
330} 341}
331 342
332static int muted = 0; 343static int muted = 0;
333static int micMuted = 0; 344static int micMuted = 0;
334 345
335static void setVolume( int t = 0, int percent = -1 ) 346static void setVolume( int t = 0, int percent = -1 )
336{ 347{
337 switch ( t ) { 348 switch ( t ) {
338 case 0: { 349 case 0: {
339 Config cfg( "qpe" ); 350 Config cfg( "qpe" );
340 cfg.setGroup( "Volume" ); 351 cfg.setGroup( "Volume" );
341 if ( percent < 0 ) 352 if ( percent < 0 )
342 percent = cfg.readNumEntry( "VolumePercent", 50 ); 353 percent = cfg.readNumEntry( "VolumePercent", 50 );
343#ifndef QT_NO_SOUND 354#ifndef QT_NO_SOUND
344 int fd = 0; 355 int fd = 0;
345 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
346 int vol = muted ? 0 : percent; 357 int vol = muted ? 0 : percent;
347 // set both channels to same volume 358 // set both channels to same volume
348 vol |= vol << 8; 359 vol |= vol << 8;
349 ioctl( fd, MIXER_WRITE( SOUND_MIXER_VOLUME ), &vol ); 360 ioctl( fd, MIXER_WRITE( SOUND_MIXER_VOLUME ), &vol );
350 ::close( fd ); 361 ::close( fd );
351 } 362 }
352#endif 363#endif
353 } 364 }
354 break; 365 break;
355 } 366 }
356} 367}
357 368
358static void setMic( int t = 0, int percent = -1 ) 369static void setMic( int t = 0, int percent = -1 )
359{ 370{
360 switch ( t ) { 371 switch ( t ) {
361 case 0: { 372 case 0: {
362 Config cfg( "qpe" ); 373 Config cfg( "qpe" );
363 cfg.setGroup( "Volume" ); 374 cfg.setGroup( "Volume" );
364 if ( percent < 0 ) 375 if ( percent < 0 )
365 percent = cfg.readNumEntry( "Mic", 50 ); 376 percent = cfg.readNumEntry( "Mic", 50 );
366 377
367#ifndef QT_NO_SOUND 378#ifndef QT_NO_SOUND
368 int fd = 0; 379 int fd = 0;
369 int mic = micMuted ? 0 : percent; 380 int mic = micMuted ? 0 : percent;
370 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 381 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
371 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 382 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
372 ::close( fd ); 383 ::close( fd );
373 } 384 }
374#endif 385#endif
375 } 386 }
376 break; 387 break;
377 } 388 }
378} 389}
379 390
380 391
381static void setBass( int t = 0, int percent = -1 ) 392static void setBass( int t = 0, int percent = -1 )
382{ 393{
383 switch ( t ) { 394 switch ( t ) {
384 case 0: { 395 case 0: {
385 Config cfg( "qpe" ); 396 Config cfg( "qpe" );
386 cfg.setGroup( "Volume" ); 397 cfg.setGroup( "Volume" );
387 if ( percent < 0 ) 398 if ( percent < 0 )
388 percent = cfg.readNumEntry( "BassPercent", 50 ); 399 percent = cfg.readNumEntry( "BassPercent", 50 );
389 400
390#ifndef QT_NO_SOUND 401#ifndef QT_NO_SOUND
391 int fd = 0; 402 int fd = 0;
392 int bass = percent; 403 int bass = percent;
393 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 404 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
394 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass ); 405 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass );
395 ::close( fd ); 406 ::close( fd );
396 } 407 }
397#endif 408#endif
398 } 409 }
399 break; 410 break;
400 } 411 }
401} 412}
402 413
403 414
404static void setTreble( int t = 0, int percent = -1 ) 415static void setTreble( int t = 0, int percent = -1 )
405{ 416{
406 switch ( t ) { 417 switch ( t ) {
407 case 0: { 418 case 0: {
408 Config cfg( "qpe" ); 419 Config cfg( "qpe" );
409 cfg.setGroup( "Volume" ); 420 cfg.setGroup( "Volume" );
410 if ( percent < 0 ) 421 if ( percent < 0 )
411 percent = cfg.readNumEntry( "TreblePercent", 50 ); 422 percent = cfg.readNumEntry( "TreblePercent", 50 );
412 423
413#ifndef QT_NO_SOUND 424#ifndef QT_NO_SOUND
414 int fd = 0; 425 int fd = 0;
415 int treble = percent; 426 int treble = percent;
416 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 427 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
417 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble ); 428 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble );
418 ::close( fd ); 429 ::close( fd );
419 } 430 }
420#endif 431#endif
421 } 432 }
422 break; 433 break;
423 } 434 }
424} 435}
425 436
426 437
427/** 438/**
428 \class QPEApplication 439 \class QPEApplication
429 \brief The QPEApplication class implements various system services 440 \brief The QPEApplication class implements various system services
430 that are available to all Qtopia applications. 441 that are available to all Qtopia applications.
431 442
432 Simply by using QPEApplication instead of QApplication, a standard Qt 443 Simply by using QPEApplication instead of QApplication, a standard Qt
433 application becomes a Qtopia application. It automatically follows 444 application becomes a Qtopia application. It automatically follows
434 style changes, quits and raises, and in the 445 style changes, quits and raises, and in the
435 case of \link docwidget.html document-oriented\endlink applications, 446 case of \link docwidget.html document-oriented\endlink applications,
436 changes the currently displayed document in response to the environment. 447 changes the currently displayed document in response to the environment.
437 448
438 To create a \link docwidget.html document-oriented\endlink 449 To create a \link docwidget.html document-oriented\endlink
439 application use showMainDocumentWidget(); to create a 450 application use showMainDocumentWidget(); to create a
440 non-document-oriented application use showMainWidget(). The 451 non-document-oriented application use showMainWidget(). The
441 keepRunning() function indicates whether the application will 452 keepRunning() function indicates whether the application will
442 continue running after it's processed the last \link qcop.html 453 continue running after it's processed the last \link qcop.html
443 QCop\endlink message. This can be changed using setKeepRunning(). 454 QCop\endlink message. This can be changed using setKeepRunning().
444 455
445 A variety of signals are emitted when certain events occur, for 456 A variety of signals are emitted when certain events occur, for
446 example, timeChanged(), clockChanged(), weekChanged(), 457 example, timeChanged(), clockChanged(), weekChanged(),
447 dateFormatChanged() and volumeChanged(). If the application receives 458 dateFormatChanged() and volumeChanged(). If the application receives
448 a \link qcop.html QCop\endlink message on the application's 459 a \link qcop.html QCop\endlink message on the application's
449 QPE/Application/\e{appname} channel, the appMessage() signal is 460 QPE/Application/\e{appname} channel, the appMessage() signal is
450 emitted. There are also flush() and reload() signals, which 461 emitted. There are also flush() and reload() signals, which
451 are emitted when synching begins and ends respectively - upon these 462 are emitted when synching begins and ends respectively - upon these
452 signals, the application should save and reload any data 463 signals, the application should save and reload any data
453 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
454 be received and unfiltered through the appMessage() signal. 465 be received and unfiltered through the appMessage() signal.
455 466
456 This class also provides a set of useful static functions. The 467 This class also provides a set of useful static functions. The
457 qpeDir() and documentDir() functions return the respective paths. 468 qpeDir() and documentDir() functions return the respective paths.
458 The grabKeyboard() and ungrabKeyboard() functions are used to 469 The grabKeyboard() and ungrabKeyboard() functions are used to
459 control whether the application takes control of the device's 470 control whether the application takes control of the device's
460 physical buttons (e.g. application launch keys). The stylus' mode of 471 physical buttons (e.g. application launch keys). The stylus' mode of
461 operation is set with setStylusOperation() and retrieved with 472 operation is set with setStylusOperation() and retrieved with
462 stylusOperation(). There are also setInputMethodHint() and 473 stylusOperation(). There are also setInputMethodHint() and
463 inputMethodHint() functions. 474 inputMethodHint() functions.
464 475
465 \ingroup qtopiaemb 476 \ingroup qtopiaemb
466*/ 477*/
467 478
468/*! 479/*!
469 \fn void QPEApplication::clientMoused() 480 \fn void QPEApplication::clientMoused()
470 481
471 \internal 482 \internal
472*/ 483*/
473 484
474/*! 485/*!
475 \fn void QPEApplication::timeChanged(); 486 \fn void QPEApplication::timeChanged();
476 This signal is emitted when the time changes outside the normal 487 This signal is emitted when the time changes outside the normal
477 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.
478*/ 489*/
479 490
480/*! 491/*!
481 \fn void QPEApplication::clockChanged( bool ampm ); 492 \fn void QPEApplication::clockChanged( bool ampm );
482 493
483 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
484 \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,
485 they want a 24-hour clock. 496 they want a 24-hour clock.
486*/ 497*/
487 498
488/*! 499/*!
489 \fn void QPEApplication::volumeChanged( bool muted ) 500 \fn void QPEApplication::volumeChanged( bool muted )
490 501
491 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
492 muted is TRUE, then sound output has been muted. 503 muted is TRUE, then sound output has been muted.
493*/ 504*/
494 505
495/*! 506/*!
496 \fn void QPEApplication::weekChanged( bool startOnMonday ) 507 \fn void QPEApplication::weekChanged( bool startOnMonday )
497 508
498 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
499 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
500 \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
501 Sunday. 512 Sunday.
502*/ 513*/
503 514
504/*! 515/*!
505 \fn void QPEApplication::dateFormatChanged(DateFormat) 516 \fn void QPEApplication::dateFormatChanged(DateFormat)
506 517
507 This signal is emitted whenever the date format is changed. 518 This signal is emitted whenever the date format is changed.
508*/ 519*/
509 520
510/*! 521/*!
511 \fn void QPEApplication::flush() 522 \fn void QPEApplication::flush()
512 523
513 ### 524 ###
514*/ 525*/
515 526
516/*! 527/*!
517 \fn void QPEApplication::reload() 528 \fn void QPEApplication::reload()
518 529
519*/ 530*/
520 531
521 532
522 533
523void QPEApplication::processQCopFile() 534void QPEApplication::processQCopFile()
524{ 535{
525 QString qcopfn("/tmp/qcop-msg-"); 536 QString qcopfn("/tmp/qcop-msg-");
526 qcopfn += d->appName; // append command name 537 qcopfn += d->appName; // append command name
527 538
528 QFile f(qcopfn); 539 QFile f(qcopfn);
529 if ( f.open(IO_ReadWrite) ) { 540 if ( f.open(IO_ReadWrite) ) {
530#ifndef Q_OS_WIN32 541#ifndef Q_OS_WIN32
531 flock(f.handle(), LOCK_EX); 542 flock(f.handle(), LOCK_EX);
532#endif 543#endif
533 QDataStream ds(&f); 544 QDataStream ds(&f);
534 QCString channel, message; 545 QCString channel, message;
535 QByteArray data; 546 QByteArray data;
536 while(!ds.atEnd()) { 547 while(!ds.atEnd()) {
537 ds >> channel >> message >> data; 548 ds >> channel >> message >> data;
538 d->enqueueQCop(channel,message,data); 549 d->enqueueQCop(channel,message,data);
539 } 550 }
540 ::ftruncate(f.handle(), 0); 551 ::ftruncate(f.handle(), 0);
541#ifndef Q_OS_WIN32 552#ifndef Q_OS_WIN32
542 f.flush(); 553 f.flush();
543 flock(f.handle(), LOCK_UN); 554 flock(f.handle(), LOCK_UN);
544#endif 555#endif
545 } 556 }
546#endif 557#endif
547} 558}
548 559
549 560
550/*! 561/*!
551 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 562 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
552 563
553 This signal is emitted when a message is received on this 564 This signal is emitted when a message is received on this
554 application's QPE/Application/<i>appname</i> \link qcop.html 565 application's QPE/Application/<i>appname</i> \link qcop.html
555 QCop\endlink channel. 566 QCop\endlink channel.
556 567
557 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
558 in the following way: 569 in the following way:
559 570
560\code 571\code
561 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 572 void MyWidget::receive( const QCString& msg, const QByteArray& data )
562 { 573 {
563 QDataStream stream( data, IO_ReadOnly ); 574 QDataStream stream( data, IO_ReadOnly );
564 if ( msg == "someMessage(int,int,int)" ) { 575 if ( msg == "someMessage(int,int,int)" ) {
565 int a,b,c; 576 int a,b,c;
566 stream >> a >> b >> c; 577 stream >> a >> b >> c;
567 ... 578 ...
568 } else if ( msg == "otherMessage(QString)" ) { 579 } else if ( msg == "otherMessage(QString)" ) {
569 ... 580 ...
570 } 581 }
571 } 582 }
572\endcode 583\endcode
573 584
574 \sa qcop.html 585 \sa qcop.html
575 Note that messages received here may be processed by qpe application 586 Note that messages received here may be processed by qpe application
576 and emitted as signals, such as flush() and reload(). 587 and emitted as signals, such as flush() and reload().
577*/ 588*/
578 589
579/*! 590/*!
580 Constructs a QPEApplication just as you would construct 591 Constructs a QPEApplication just as you would construct
581 a QApplication, passing \a argc, \a argv, and \a t. 592 a QApplication, passing \a argc, \a argv, and \a t.
582 593
583 For applications, \a t should be the default, GuiClient. Only 594 For applications, \a t should be the default, GuiClient. Only
584 the Qtopia server passes GuiServer. 595 the Qtopia server passes GuiServer.
585*/ 596*/
586QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 597QPEApplication::QPEApplication( int & argc, char **argv, Type t )
587 : QApplication( hack(argc), argv, t ), pidChannel( 0 ) 598 : QApplication( hack(argc), argv, t ), pidChannel( 0 )
588{ 599{
589 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices. 600 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices.
590 601
591 d = new QPEApplicationData; 602 d = new QPEApplicationData;
592 d->loadTextCodecs(); 603 d->loadTextCodecs();
593 d->loadImageCodecs(); 604 d->loadImageCodecs();
594 int dw = desktop() ->width(); 605 int dw = desktop() ->width();
595 606
596 if ( dw < 200 ) { 607 if ( dw < 200 ) {
597 setFont( QFont( "vera", 8 ) ); 608 setFont( QFont( "vera", 8 ) );
598 AppLnk::setSmallIconSize( 10 ); 609 AppLnk::setSmallIconSize( 10 );
599 AppLnk::setBigIconSize( 28 ); 610 AppLnk::setBigIconSize( 28 );
600 } 611 }
601#if defined(OPIE_HIGH_RES_SMALL_PHY) 612#if defined(OPIE_HIGH_RES_SMALL_PHY)
602 else if ( dw > 600 ) { 613 else if ( dw > 600 ) {
603 setFont( QFont( "vera", 16 ) ); 614 setFont( QFont( "vera", 16 ) );
604 AppLnk::setSmallIconSize( 24 ); 615 AppLnk::setSmallIconSize( 24 );
605 AppLnk::setBigIconSize( 48 ); 616 AppLnk::setBigIconSize( 48 );
606 } 617 }
607#endif 618#endif
608 else if ( dw > 200 ) { 619 else if ( dw > 200 ) {
609 setFont( QFont( "vera", 10 ) ); 620 setFont( QFont( "vera", 10 ) );
610 AppLnk::setSmallIconSize( 14 ); 621 AppLnk::setSmallIconSize( 14 );
611 AppLnk::setBigIconSize( 32 ); 622 AppLnk::setBigIconSize( 32 );
612 } 623 }
613 624
614 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 625 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
615 626
616 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 627 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
617 628
618 629
619 sysChannel = new QCopChannel( "QPE/System", this ); 630 sysChannel = new QCopChannel( "QPE/System", this );
620 connect( sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ), 631 connect( sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
621 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) ); 632 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) );
622 633
623/* COde now in initapp */ 634/* COde now in initapp */
624#if 0 635#if 0
625#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 636#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
626 637
627 QString qcopfn( "/tmp/qcop-msg-" ); 638 QString qcopfn( "/tmp/qcop-msg-" );
628 qcopfn += QString( argv[ 0 ] ); // append command name 639 qcopfn += QString( argv[ 0 ] ); // append command name
629 640
630 QFile f( qcopfn ); 641 QFile f( qcopfn );
631 if ( f.open( IO_ReadOnly ) ) { 642 if ( f.open( IO_ReadOnly ) ) {
632 flock( f.handle(), LOCK_EX ); 643 flock( f.handle(), LOCK_EX );
633 } 644 }
634 645
635 646
636 647
637 QCString channel = QCString( argv[ 0 ] ); 648 QCString channel = QCString( argv[ 0 ] );
638 channel.replace( QRegExp( ".*/" ), "" ); 649 channel.replace( QRegExp( ".*/" ), "" );
639 d->appName = channel; 650 d->appName = channel;
640 channel = "QPE/Application/" + channel; 651 channel = "QPE/Application/" + channel;
641 pidChannel = new QCopChannel( channel, this ); 652 pidChannel = new QCopChannel( channel, this );
642 connect( pidChannel, SIGNAL( received(const QCString&,const QByteArray&) ), 653 connect( pidChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
643 this, SLOT( pidMessage(const QCString&,const QByteArray&) ) ); 654 this, SLOT( pidMessage(const QCString&,const QByteArray&) ) );
644 655
645 if ( f.isOpen() ) { 656 if ( f.isOpen() ) {
646 d->keep_running = FALSE; 657 d->keep_running = FALSE;
647 QDataStream ds( &f ); 658 QDataStream ds( &f );
648 QCString channel, message; 659 QCString channel, message;
649 QByteArray data; 660 QByteArray data;
650 while ( !ds.atEnd() ) { 661 while ( !ds.atEnd() ) {
651 ds >> channel >> message >> data; 662 ds >> channel >> message >> data;
652 d->enqueueQCop( channel, message, data ); 663 d->enqueueQCop( channel, message, data );
653 } 664 }
654 665
655 flock( f.handle(), LOCK_UN ); 666 flock( f.handle(), LOCK_UN );
656 f.close(); 667 f.close();
657 f.remove(); 668 f.remove();
658 } 669 }
659 670
660 for ( int a = 0; a < argc; a++ ) { 671 for ( int a = 0; a < argc; a++ ) {
661 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 672 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
662 argv[ a ] = argv[ a + 1 ]; 673 argv[ a ] = argv[ a + 1 ];
663 a++; 674 a++;
664 d->preloaded = TRUE; 675 d->preloaded = TRUE;
665 argc -= 1; 676 argc -= 1;
666 } 677 }
667 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 678 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
668 argv[ a ] = argv[ a + 1 ]; 679 argv[ a ] = argv[ a + 1 ];
669 a++; 680 a++;
670 d->preloaded = TRUE; 681 d->preloaded = TRUE;
671 d->forceshow = TRUE; 682 d->forceshow = TRUE;
672 argc -= 1; 683 argc -= 1;
673 } 684 }
674 } 685 }
675 686
676 /* overide stored arguments */ 687 /* overide stored arguments */
677 setArgs( argc, argv ); 688 setArgs( argc, argv );
678 689
679#endif 690#endif
680#else 691#else
681 initApp( argc, argv ); 692 initApp( argc, argv );
682#endif 693#endif
683 // qwsSetDecoration( new QPEDecoration() ); 694 // qwsSetDecoration( new QPEDecoration() );
684 695
685#ifndef QT_NO_TRANSLATION 696#ifndef QT_NO_TRANSLATION
686 697
687 d->langs = Global::languageList(); 698 d->langs = Global::languageList();
688 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 ) {
689 QString lang = *it; 700 QString lang = *it;
690 701
691 installTranslation( lang + "/libopie.qm"); 702 installTranslation( lang + "/libopie.qm");
692 installTranslation( lang + "/libqpe.qm" ); 703 installTranslation( lang + "/libqpe.qm" );
693 installTranslation( lang + "/" + d->appName + ".qm" ); 704 installTranslation( lang + "/" + d->appName + ".qm" );
694 705
695 706
696 //###language/font hack; should look it up somewhere 707 //###language/font hack; should look it up somewhere
697#ifdef QWS 708#ifdef QWS
698 709
699 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 710 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
700 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 711 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
701 setFont( fn ); 712 setFont( fn );
702 } 713 }
703#endif 714#endif
704 } 715 }
705#endif 716#endif
706 717
707 applyStyle(); 718 applyStyle();
708 719
709 if ( type() == GuiServer ) { 720 if ( type() == GuiServer ) {
710 setVolume(); 721 setVolume();
711 } 722 }
712 723
713 installEventFilter( this ); 724 installEventFilter( this );
714 725
715 QPEMenuToolFocusManager::initialize(); 726 QPEMenuToolFocusManager::initialize();
716 727
717#ifdef QT_NO_QWS_CURSOR 728#ifdef QT_NO_QWS_CURSOR
718 // if we have no cursor, probably don't want tooltips 729 // if we have no cursor, probably don't want tooltips
719 QToolTip::setEnabled( FALSE ); 730 QToolTip::setEnabled( FALSE );
720#endif 731#endif
721} 732}
722 733
723 734
724#ifdef QTOPIA_INTERNAL_INITAPP 735#ifdef QTOPIA_INTERNAL_INITAPP
725void QPEApplication::initApp( int argc, char **argv ) 736void QPEApplication::initApp( int argc, char **argv )
726{ 737{
727 delete pidChannel; 738 delete pidChannel;
728 d->keep_running = TRUE; 739 d->keep_running = TRUE;
729 d->preloaded = FALSE; 740 d->preloaded = FALSE;
730 d->forceshow = FALSE; 741 d->forceshow = FALSE;
731 742
732 QCString channel = QCString(argv[0]); 743 QCString channel = QCString(argv[0]);
733 744
734 channel.replace(QRegExp(".*/"),""); 745 channel.replace(QRegExp(".*/"),"");
735 d->appName = channel; 746 d->appName = channel;
736 747
737 #if QT_VERSION > 235 748 #if QT_VERSION > 235
738 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6 749 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6
739 #endif 750 #endif
740 751
741 channel = "QPE/Application/" + channel; 752 channel = "QPE/Application/" + channel;
742 pidChannel = new QCopChannel( channel, this); 753 pidChannel = new QCopChannel( channel, this);
743 connect( pidChannel, SIGNAL(received(const QCString&,const QByteArray&)), 754 connect( pidChannel, SIGNAL(received(const QCString&,const QByteArray&)),
744 this, SLOT(pidMessage(const QCString&,const QByteArray&))); 755 this, SLOT(pidMessage(const QCString&,const QByteArray&)));
745 756
746 757
747 758
748 processQCopFile(); 759 processQCopFile();
749 d->keep_running = d->qcopq.isEmpty(); 760 d->keep_running = d->qcopq.isEmpty();
750 761
751 for (int a=0; a<argc; a++) { 762 for (int a=0; a<argc; a++) {
752 if ( qstrcmp(argv[a],"-preload")==0 ) { 763 if ( qstrcmp(argv[a],"-preload")==0 ) {
753 argv[a] = argv[a+1]; 764 argv[a] = argv[a+1];
754 a++; 765 a++;
755 d->preloaded = TRUE; 766 d->preloaded = TRUE;
756 argc-=1; 767 argc-=1;
757 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) { 768 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
758 argv[a] = argv[a+1]; 769 argv[a] = argv[a+1];
759 a++; 770 a++;
760 d->preloaded = TRUE; 771 d->preloaded = TRUE;
761 d->forceshow = TRUE; 772 d->forceshow = TRUE;
762 argc-=1; 773 argc-=1;
763 } 774 }
764 } 775 }
765 776
766 /* overide stored arguments */ 777 /* overide stored arguments */
767 setArgs(argc, argv); 778 setArgs(argc, argv);
768 779
769 /* install translation here */ 780 /* install translation here */
770 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 )
771 installTranslation( (*it) + "/" + d->appName + ".qm" ); 782 installTranslation( (*it) + "/" + d->appName + ".qm" );
772} 783}
773#endif 784#endif
774 785
775 786
776static QPtrDict<void>* inputMethodDict = 0; 787static QPtrDict<void>* inputMethodDict = 0;
777static void createInputMethodDict() 788static void createInputMethodDict()
778{ 789{
779 if ( !inputMethodDict ) 790 if ( !inputMethodDict )
780 inputMethodDict = new QPtrDict<void>; 791 inputMethodDict = new QPtrDict<void>;
781} 792}
782 793
783/*! 794/*!
784 Returns the currently set hint to the system as to whether 795 Returns the currently set hint to the system as to whether
785 widget \a w has any use for text input methods. 796 widget \a w has any use for text input methods.
786 797
787 798
788 \sa setInputMethodHint() InputMethodHint 799 \sa setInputMethodHint() InputMethodHint
789*/ 800*/
790QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 801QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
791{ 802{
792 if ( inputMethodDict && w ) 803 if ( inputMethodDict && w )
793 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 804 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
794 return Normal; 805 return Normal;
795} 806}
796 807
797/*! 808/*!
798 \enum QPEApplication::InputMethodHint 809 \enum QPEApplication::InputMethodHint
799 810
800 \value Normal the application sometimes needs text input (the default). 811 \value Normal the application sometimes needs text input (the default).
801 \value AlwaysOff the application never needs text input. 812 \value AlwaysOff the application never needs text input.
802 \value AlwaysOn the application always needs text input. 813 \value AlwaysOn the application always needs text input.
803*/ 814*/
804 815
805/*! 816/*!
806 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
807 as specified by \a mode. 818 as specified by \a mode.
808 819
809 \sa inputMethodHint() InputMethodHint 820 \sa inputMethodHint() InputMethodHint
810*/ 821*/
811void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 822void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
812{ 823{
813 createInputMethodDict(); 824 createInputMethodDict();
814 if ( mode == Normal ) { 825 if ( mode == Normal ) {
815 inputMethodDict->remove 826 inputMethodDict->remove
816 ( w ); 827 ( w );
817 } 828 }
818 else { 829 else {
819 inputMethodDict->insert( w, ( void* ) mode ); 830 inputMethodDict->insert( w, ( void* ) mode );
820 } 831 }
821} 832}
822 833
823class HackDialog : public QDialog 834class HackDialog : public QDialog
824{ 835{
825public: 836public:
826 void acceptIt() 837 void acceptIt()
827 { 838 {
828 accept(); 839 accept();
829 } 840 }
830 void rejectIt() 841 void rejectIt()
831 { 842 {
832 reject(); 843 reject();
833 } 844 }
834}; 845};
835 846
836 847
837void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 848void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
838{ 849{
839 // specialised actions for certain widgets. May want to 850 // specialised actions for certain widgets. May want to
840 // add more stuff here. 851 // add more stuff here.
841 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 852 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
842 && activePopupWidget() ->parentWidget() 853 && activePopupWidget() ->parentWidget()
843 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 854 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
844 key = Qt::Key_Return; 855 key = Qt::Key_Return;
845 856
846 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 857 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
847 key = Qt::Key_Return; 858 key = Qt::Key_Return;
848 859
849#ifdef QWS 860#ifdef QWS
850 861
851 ke->simpleData.keycode = key; 862 ke->simpleData.keycode = key;
852#endif 863#endif
853} 864}
854 865
855class HackWidget : public QWidget 866class HackWidget : public QWidget
856{ 867{
857public: 868public:
858 bool needsOk() 869 bool needsOk()
859 { 870 {
860 return ( getWState() & WState_Reserved1 ); 871 return ( getWState() & WState_Reserved1 );
861 } 872 }
862}; 873};
863 874
864/*! 875/*!
865 \internal 876 \internal
866*/ 877*/
867 878
868#ifdef QWS 879#ifdef QWS
869bool QPEApplication::qwsEventFilter( QWSEvent * e ) 880bool QPEApplication::qwsEventFilter( QWSEvent * e )
870{ 881{
871 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 882 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
872 if ( qApp->type() != QApplication::GuiServer ) { 883 if ( qApp->type() != QApplication::GuiServer ) {
873 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 884 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
874 e << d->appName; 885 e << d->appName;
875 } 886 }
876 d->notbusysent = TRUE; 887 d->notbusysent = TRUE;
877 } 888 }
878 if ( type() == GuiServer ) { 889 if ( type() == GuiServer ) {
879 switch ( e->type ) { 890 switch ( e->type ) {
880 case QWSEvent::Mouse: 891 case QWSEvent::Mouse:
881 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 892 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
882 emit clientMoused(); 893 emit clientMoused();
883 break; 894 break;
884 default: 895 default:
885 break; 896 break;
886 } 897 }
887 } 898 }
888 if ( e->type == QWSEvent::Key ) { 899 if ( e->type == QWSEvent::Key ) {
889 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 900 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
890 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 901 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
891 // Use special "OK" key to press "OK" on top level widgets 902 // Use special "OK" key to press "OK" on top level widgets
892 QWidget * active = activeWindow(); 903 QWidget * active = activeWindow();
893 QWidget *popup = 0; 904 QWidget *popup = 0;
894 if ( active && active->isPopup() ) { 905 if ( active && active->isPopup() ) {
895 popup = active; 906 popup = active;
896 active = active->parentWidget(); 907 active = active->parentWidget();
897 } 908 }
898 if ( active && ( int ) active->winId() == ke->simpleData.window && 909 if ( active && ( int ) active->winId() == ke->simpleData.window &&
899 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 910 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
900 if ( ke->simpleData.is_press ) { 911 if ( ke->simpleData.is_press ) {
901 if ( popup ) 912 if ( popup )
902 popup->close(); 913 popup->close();
903 if ( active->inherits( "QDialog" ) ) { 914 if ( active->inherits( "QDialog" ) ) {
904 HackDialog * d = ( HackDialog * ) active; 915 HackDialog * d = ( HackDialog * ) active;
905 d->acceptIt(); 916 d->acceptIt();
906 return TRUE; 917 return TRUE;
907 } 918 }
908 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 919 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
909 QSignal s; 920 QSignal s;
910 s.connect( active, SLOT( accept() ) ); 921 s.connect( active, SLOT( accept() ) );
911 s.activate(); 922 s.activate();
912 } 923 }
913 else { 924 else {
914 // 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:
915 mapToDefaultAction( ke, Qt::Key_Return ); 926 mapToDefaultAction( ke, Qt::Key_Return );
916 } 927 }
917 } 928 }
918 } 929 }
919 } 930 }
920 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 931 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
921 // 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
922 mapToDefaultAction( ke, Qt::Key_Space ); 933 mapToDefaultAction( ke, Qt::Key_Space );
923 } 934 }
924 else if ( ke->simpleData.keycode == Qt::Key_Escape && 935 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
925 ke->simpleData.is_press ) { 936 ke->simpleData.is_press ) {
926 // Escape key closes app if focus on toplevel 937 // Escape key closes app if focus on toplevel
927 QWidget * active = activeWindow(); 938 QWidget * active = activeWindow();
928 if ( active && active->testWFlags( WType_TopLevel ) && 939 if ( active && active->testWFlags( WType_TopLevel ) &&
929 ( int ) active->winId() == ke->simpleData.window && 940 ( int ) active->winId() == ke->simpleData.window &&
930 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 941 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
931 if ( active->inherits( "QDialog" ) ) { 942 if ( active->inherits( "QDialog" ) ) {
932 HackDialog * d = ( HackDialog * ) active; 943 HackDialog * d = ( HackDialog * ) active;
933 d->rejectIt(); 944 d->rejectIt();
934 return TRUE; 945 return TRUE;
935 } 946 }
936 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 947 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
937 active->close(); 948 active->close();
938 } 949 }
939 } 950 }
940 } 951 }
941 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 ) {
942 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) 953 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... ))
943 // but we cannot access libopie function within libqpe :( 954 // but we cannot access libopie function within libqpe :(
944 955
945 QWidget * active = activeWindow ( ); 956 QWidget * active = activeWindow ( );
946 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { 957 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) {
947 if ( d-> kbgrabbed ) { // we grabbed the keyboard 958 if ( d-> kbgrabbed ) { // we grabbed the keyboard
948 QChar ch ( ke-> simpleData.unicode ); 959 QChar ch ( ke-> simpleData.unicode );
949 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, 960 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease,
950 ke-> simpleData.keycode, 961 ke-> simpleData.keycode,
951 ch. latin1 ( ), 962 ch. latin1 ( ),
952 ke-> simpleData.modifiers, 963 ke-> simpleData.modifiers,
953 QString ( ch ), 964 QString ( ch ),
954 ke-> simpleData.is_auto_repeat, 1 ); 965 ke-> simpleData.is_auto_repeat, 1 );
955 966
956 QObject *which = QWidget::keyboardGrabber ( ); 967 QObject *which = QWidget::keyboardGrabber ( );
957 if ( !which ) 968 if ( !which )
958 which = QApplication::focusWidget ( ); 969 which = QApplication::focusWidget ( );
959 if ( !which ) 970 if ( !which )
960 which = QApplication::activeWindow ( ); 971 which = QApplication::activeWindow ( );
961 if ( !which ) 972 if ( !which )
962 which = qApp; 973 which = qApp;
963 974
964 QApplication::sendEvent ( which, &qke ); 975 QApplication::sendEvent ( which, &qke );
965 } 976 }
966 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
967 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); 978 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" );
968 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 );
969 } 980 }
970 } 981 }
971 return true; 982 return true;
972 } 983 }
973 } 984 }
974 if ( e->type == QWSEvent::Focus ) { 985 if ( e->type == QWSEvent::Focus ) {
975 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 986 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
976 if ( !fe->simpleData.get_focus ) { 987 if ( !fe->simpleData.get_focus ) {
977 QWidget * active = activeWindow(); 988 QWidget * active = activeWindow();
978 while ( active && active->isPopup() ) { 989 while ( active && active->isPopup() ) {
979 active->close(); 990 active->close();
980 active = activeWindow(); 991 active = activeWindow();
981 } 992 }
982 } 993 }
983 else { 994 else {
984 // make sure our modal widget is ALWAYS on top 995 // make sure our modal widget is ALWAYS on top
985 QWidget *topm = activeModalWidget(); 996 QWidget *topm = activeModalWidget();
986 if ( topm && static_cast<int>( topm->winId() ) != fe->simpleData.window) { 997 if ( topm && static_cast<int>( topm->winId() ) != fe->simpleData.window) {
987 topm->raise(); 998 topm->raise();
988 } 999 }
989 } 1000 }
990 if ( fe->simpleData.get_focus && inputMethodDict ) { 1001 if ( fe->simpleData.get_focus && inputMethodDict ) {
991 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 1002 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
992 if ( m == AlwaysOff ) 1003 if ( m == AlwaysOff )
993 Global::hideInputMethod(); 1004 Global::hideInputMethod();
994 if ( m == AlwaysOn ) 1005 if ( m == AlwaysOn )
995 Global::showInputMethod(); 1006 Global::showInputMethod();
996 } 1007 }
997 } 1008 }
998 1009
999 1010
1000 return QApplication::qwsEventFilter( e ); 1011 return QApplication::qwsEventFilter( e );
1001} 1012}
1002#endif 1013#endif
1003 1014
1004/*! 1015/*!
1005 Destroys the QPEApplication. 1016 Destroys the QPEApplication.
1006*/ 1017*/
1007QPEApplication::~QPEApplication() 1018QPEApplication::~QPEApplication()
1008{ 1019{
1009 ungrabKeyboard(); 1020 ungrabKeyboard();
1010#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 1021#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
1011 // Need to delete QCopChannels early, since the display will 1022 // Need to delete QCopChannels early, since the display will
1012 // be gone by the time we get to ~QObject(). 1023 // be gone by the time we get to ~QObject().
1013 delete sysChannel; 1024 delete sysChannel;
1014 delete pidChannel; 1025 delete pidChannel;
1015#endif 1026#endif
1016 1027
1017 delete d; 1028 delete d;
1018} 1029}
1019 1030
1020/*! 1031/*!
1021 Returns <tt>$OPIEDIR/</tt>. 1032 Returns <tt>$OPIEDIR/</tt>.
1022*/ 1033*/
1023QString QPEApplication::qpeDir() 1034QString QPEApplication::qpeDir()
1024{ 1035{
1025 const char * base = getenv( "OPIEDIR" ); 1036 const char * base = getenv( "OPIEDIR" );
1026 if ( base ) 1037 if ( base )
1027 return QString( base ) + "/"; 1038 return QString( base ) + "/";
1028 1039
1029 return QString( "../" ); 1040 return QString( "../" );
1030} 1041}
1031 1042
1032/*! 1043/*!
1033 Returns the user's current Document directory. There is a trailing "/". 1044 Returns the user's current Document directory. There is a trailing "/".
1034 .. well, it does now,, and there's no trailing '/' 1045 .. well, it does now,, and there's no trailing '/'
1035*/ 1046*/
1036QString QPEApplication::documentDir() 1047QString QPEApplication::documentDir()
1037{ 1048{
1038 const char* base = getenv( "HOME"); 1049 const char* base = getenv( "HOME");
1039 if ( base ) 1050 if ( base )
1040 return QString( base ) + "/Documents"; 1051 return QString( base ) + "/Documents";
1041 1052
1042 return QString( "../Documents" ); 1053 return QString( "../Documents" );
1043} 1054}
1044 1055
1045static int deforient = -1; 1056static int deforient = -1;
1046 1057
1047/*! 1058/*!
1048 \internal 1059 \internal
1049*/ 1060*/
1050int QPEApplication::defaultRotation() 1061int QPEApplication::defaultRotation()
1051{ 1062{
1052 if ( deforient < 0 ) { 1063 if ( deforient < 0 ) {
1053 QString d = getenv( "QWS_DISPLAY" ); 1064 QString d = getenv( "QWS_DISPLAY" );
1054 if ( d.contains( "Rot90" ) ) { 1065 if ( d.contains( "Rot90" ) ) {
1055 deforient = 90; 1066 deforient = 90;
1056 } 1067 }
1057 else if ( d.contains( "Rot180" ) ) { 1068 else if ( d.contains( "Rot180" ) ) {
1058 deforient = 180; 1069 deforient = 180;
1059 } 1070 }
1060 else if ( d.contains( "Rot270" ) ) { 1071 else if ( d.contains( "Rot270" ) ) {
1061 deforient = 270; 1072 deforient = 270;
1062 } 1073 }
1063 else { 1074 else {
1064 deforient = 0; 1075 deforient = 0;
1065 } 1076 }
1066 } 1077 }
1067 return deforient; 1078 return deforient;
1068} 1079}
1069 1080
1070/*! 1081/*!
1071 \internal 1082 \internal
1072*/ 1083*/
1073void QPEApplication::setDefaultRotation( int r ) 1084void QPEApplication::setDefaultRotation( int r )
1074{ 1085{
1075 if ( qApp->type() == GuiServer ) { 1086 if ( qApp->type() == GuiServer ) {
1076 deforient = r; 1087 deforient = r;
1077 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 );
1078 Config config("qpe"); 1089 Config config("qpe");
1079 config.setGroup( "Rotation" ); 1090 config.setGroup( "Rotation" );
1080 config.writeEntry( "Rot", r ); 1091 config.writeEntry( "Rot", r );
1081 } 1092 }
1082 else { 1093 else {
1083#ifndef QT_NO_COP 1094#ifndef QT_NO_COP
1084 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 1095 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
1085 e << r; 1096 e << r;
1086 } 1097 }
1087#endif 1098#endif
1088 1099
1089 } 1100 }
1090} 1101}
1091 1102
1092#include <qgfx_qws.h> 1103#include <qgfx_qws.h>
1093#include <qwindowsystem_qws.h> 1104#include <qwindowsystem_qws.h>
1094 1105
1095extern void qws_clearLoadedFonts(); 1106extern void qws_clearLoadedFonts();
1096 1107
1097void QPEApplication::setCurrentMode( int x, int y, int depth ) 1108void QPEApplication::setCurrentMode( int x, int y, int depth )
1098{ 1109{
1099 // Reset the caches 1110 // Reset the caches
1100 qws_clearLoadedFonts(); 1111 qws_clearLoadedFonts();
1101 QPixmapCache::clear(); 1112 QPixmapCache::clear();
1102 1113
1103 // Change the screen mode 1114 // Change the screen mode
1104 qt_screen->setMode(x, y, depth); 1115 qt_screen->setMode(x, y, depth);
1105 1116
1106 if ( qApp->type() == GuiServer ) { 1117 if ( qApp->type() == GuiServer ) {
1107 // Reconfigure the GuiServer 1118 // Reconfigure the GuiServer
1108 qwsServer->beginDisplayReconfigure(); 1119 qwsServer->beginDisplayReconfigure();
1109 qwsServer->endDisplayReconfigure(); 1120 qwsServer->endDisplayReconfigure();
1110 1121
1111 // Get all the running apps to reset 1122 // Get all the running apps to reset
1112 QCopEnvelope env( "QPE/System", "reset()" ); 1123 QCopEnvelope env( "QPE/System", "reset()" );
1113 } 1124 }
1114} 1125}
1115 1126
1116void QPEApplication::reset() { 1127void QPEApplication::reset() {
1117 // Reconnect to the screen 1128 // Reconnect to the screen
1118 qt_screen->disconnect(); 1129 qt_screen->disconnect();
1119 qt_screen->connect( QString::null ); 1130 qt_screen->connect( QString::null );
1120 1131
1121 // Redraw everything 1132 // Redraw everything
1122 applyStyle(); 1133 applyStyle();
1123} 1134}
1124 1135
1125/*! 1136/*!
1126 \internal 1137 \internal
1127*/ 1138*/
1128void QPEApplication::applyStyle() 1139void QPEApplication::applyStyle()
1129{ 1140{
1130 Config config( "qpe" ); 1141 Config config( "qpe" );
1131 config.setGroup( "Appearance" ); 1142 config.setGroup( "Appearance" );
1132 1143
1133#if QT_VERSION > 233 1144#if QT_VERSION > 233
1134#if !defined(OPIE_NO_OVERRIDE_QT) 1145#if !defined(OPIE_NO_OVERRIDE_QT)
1135 // don't block ourselves ... 1146 // don't block ourselves ...
1136 Opie::force_appearance = 0; 1147 Opie::force_appearance = 0;
1137 1148
1138 static QString appname = Opie::binaryName ( ); 1149 static QString appname = Opie::binaryName ( );
1139 1150
1140 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 1151 QStringList ex = config. readListEntry ( "NoStyle", ';' );
1141 int nostyle = 0; 1152 int nostyle = 0;
1142 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 1153 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
1143 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 1154 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
1144 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 1155 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
1145 break; 1156 break;
1146 } 1157 }
1147 } 1158 }
1148#else 1159#else
1149 int nostyle = 0; 1160 int nostyle = 0;
1150#endif 1161#endif
1151 1162
1152 // Widget style 1163 // Widget style
1153 QString style = config.readEntry( "Style", "FlatStyle" ); 1164 QString style = config.readEntry( "Style", "FlatStyle" );
1154 1165
1155 // don't set a custom style 1166 // don't set a custom style
1156 if ( nostyle & Opie::Force_Style ) 1167 if ( nostyle & Opie::Force_Style )
1157 style = "FlatStyle"; 1168 style = "FlatStyle";
1158 1169
1159 internalSetStyle ( style ); 1170 internalSetStyle ( style );
1160 1171
1161 // Colors - from /etc/colors/Liquid.scheme 1172 // Colors - from /etc/colors/Liquid.scheme
1162 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) ); 1173 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) );
1163 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) ); 1174 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) );
1164 QPalette pal( btncolor, bgcolor ); 1175 QPalette pal( btncolor, bgcolor );
1165 QString color = config.readEntry( "Highlight", "#73adef" ); 1176 QString color = config.readEntry( "Highlight", "#73adef" );
1166 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 1177 pal.setColor( QColorGroup::Highlight, QColor( color ) );
1167 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 1178 color = config.readEntry( "HighlightedText", "#FFFFFF" );
1168 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 1179 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
1169 color = config.readEntry( "Text", "#000000" ); 1180 color = config.readEntry( "Text", "#000000" );
1170 pal.setColor( QColorGroup::Text, QColor( color ) ); 1181 pal.setColor( QColorGroup::Text, QColor( color ) );
1171 color = config.readEntry( "ButtonText", "#000000" ); 1182 color = config.readEntry( "ButtonText", "#000000" );
1172 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 1183 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
1173 color = config.readEntry( "Base", "#FFFFFF" ); 1184 color = config.readEntry( "Base", "#FFFFFF" );
1174 pal.setColor( QColorGroup::Base, QColor( color ) ); 1185 pal.setColor( QColorGroup::Base, QColor( color ) );
1175 1186
1176 pal.setColor( QPalette::Disabled, QColorGroup::Text, 1187 pal.setColor( QPalette::Disabled, QColorGroup::Text,
1177 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 1188 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
1178 1189
1179 setPalette( pal, TRUE ); 1190 setPalette( pal, TRUE );
1180 1191
1181 // Window Decoration 1192 // Window Decoration
1182 QString dec = config.readEntry( "Decoration", "Flat" ); 1193 QString dec = config.readEntry( "Decoration", "Flat" );
1183 1194
1184 // don't set a custom deco 1195 // don't set a custom deco
1185 if ( nostyle & Opie::Force_Decoration ) 1196 if ( nostyle & Opie::Force_Decoration )
1186 dec = ""; 1197 dec = "";
1187 1198
1188 //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);
1189 1200
1190 if ( dec != d->decorationName ) { 1201 if ( dec != d->decorationName ) {
1191 qwsSetDecoration( new QPEDecoration( dec ) ); 1202 qwsSetDecoration( new QPEDecoration( dec ) );
1192 d->decorationName = dec; 1203 d->decorationName = dec;
1193 } 1204 }
1194 1205
1195 // Font 1206 // Font
1196 QString ff = config.readEntry( "FontFamily", font().family() ); 1207 QString ff = config.readEntry( "FontFamily", font().family() );
1197 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 1208 int fs = config.readNumEntry( "FontSize", font().pointSize() );
1198 1209
1199 // don't set a custom font 1210 // don't set a custom font
1200 if ( nostyle & Opie::Force_Font ) { 1211 if ( nostyle & Opie::Force_Font ) {
1201 ff = "Vera"; 1212 ff = "Vera";
1202 fs = 10; 1213 fs = 10;
1203 } 1214 }
1204 1215
1205 setFont ( QFont ( ff, fs ), true ); 1216 setFont ( QFont ( ff, fs ), true );
1206 1217
1207#if !defined(OPIE_NO_OVERRIDE_QT) 1218#if !defined(OPIE_NO_OVERRIDE_QT)
1208 // revert to global blocking policy ... 1219 // revert to global blocking policy ...
1209 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;
1210 Opie::force_appearance &= ~nostyle; 1221 Opie::force_appearance &= ~nostyle;
1211#endif 1222#endif
1212#endif 1223#endif
1213} 1224}
1214 1225
1215void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1226void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1216{ 1227{
1217#ifdef Q_WS_QWS 1228#ifdef Q_WS_QWS
1218 QDataStream stream( data, IO_ReadOnly ); 1229 QDataStream stream( data, IO_ReadOnly );
1219 if ( msg == "applyStyle()" ) { 1230 if ( msg == "applyStyle()" ) {
1220 applyStyle(); 1231 applyStyle();
1221 } 1232 }
1222 else if ( msg == "toggleApplicationMenu()" ) { 1233 else if ( msg == "toggleApplicationMenu()" ) {
1223 QWidget *active = activeWindow ( ); 1234 QWidget *active = activeWindow ( );
1224 1235
1225 if ( active ) { 1236 if ( active ) {
1226 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( ); 1237 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( );
1227 bool oldactive = man-> isActive ( ); 1238 bool oldactive = man-> isActive ( );
1228 1239
1229 man-> setActive( !man-> isActive() ); 1240 man-> setActive( !man-> isActive() );
1230 1241
1231 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu 1242 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu
1232 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" ); 1243 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" );
1233 } 1244 }
1234 } 1245 }
1235 } 1246 }
1236 else if ( msg == "setDefaultRotation(int)" ) { 1247 else if ( msg == "setDefaultRotation(int)" ) {
1237 if ( type() == GuiServer ) { 1248 if ( type() == GuiServer ) {
1238 int r; 1249 int r;
1239 stream >> r; 1250 stream >> r;
1240 setDefaultRotation( r ); 1251 setDefaultRotation( r );
1241 } 1252 }
1242 } 1253 }
1243 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>
1244 if ( type() == GuiServer ) { 1255 if ( type() == GuiServer ) {
1245 int x, y, depth; 1256 int x, y, depth;
1246 stream >> x; 1257 stream >> x;
1247 stream >> y; 1258 stream >> y;
1248 stream >> depth; 1259 stream >> depth;
1249 setCurrentMode( x, y, depth ); 1260 setCurrentMode( x, y, depth );
1250 } 1261 }
1251 } 1262 }
1252 else if ( msg == "reset()" ) { 1263 else if ( msg == "reset()" ) {
1253 if ( type() != GuiServer ) 1264 if ( type() != GuiServer )
1254 reset(); 1265 reset();
1255 } 1266 }
1256 else if ( msg == "setCurrentRotation(int)" ) { 1267 else if ( msg == "setCurrentRotation(int)" ) {
1257 int r; 1268 int r;
1258 stream >> r; 1269 stream >> r;
1259 setCurrentRotation( r ); 1270 setCurrentRotation( r );
1260 } 1271 }
1261 else if ( msg == "shutdown()" ) { 1272 else if ( msg == "shutdown()" ) {
1262 if ( type() == GuiServer ) 1273 if ( type() == GuiServer )
1263 shutdown(); 1274 shutdown();
1264 } 1275 }
1265 else if ( msg == "quit()" ) { 1276 else if ( msg == "quit()" ) {
1266 if ( type() != GuiServer ) 1277 if ( type() != GuiServer )
1267 tryQuit(); 1278 tryQuit();
1268 } 1279 }
1269 else if ( msg == "forceQuit()" ) { 1280 else if ( msg == "forceQuit()" ) {
1270 if ( type() != GuiServer ) 1281 if ( type() != GuiServer )
1271 quit(); 1282 quit();
1272 } 1283 }
1273 else if ( msg == "restart()" ) { 1284 else if ( msg == "restart()" ) {
1274 if ( type() == GuiServer ) 1285 if ( type() == GuiServer )
1275 restart(); 1286 restart();
1276 } 1287 }
1277 else if ( msg == "language(QString)" ) { 1288 else if ( msg == "language(QString)" ) {
1278 if ( type() == GuiServer ) { 1289 if ( type() == GuiServer ) {
1279 QString l; 1290 QString l;
1280 stream >> l; 1291 stream >> l;
1281 QString cl = getenv( "LANG" ); 1292 QString cl = getenv( "LANG" );
1282 if ( cl != l ) { 1293 if ( cl != l ) {
1283 if ( l.isNull() ) 1294 if ( l.isNull() )
1284 unsetenv( "LANG" ); 1295 unsetenv( "LANG" );
1285 else 1296 else
1286 setenv( "LANG", l.latin1(), 1 ); 1297 setenv( "LANG", l.latin1(), 1 );
1287 restart(); 1298 restart();
1288 } 1299 }
1289 } 1300 }
1290 } 1301 }
1291 else if ( msg == "timeChange(QString)" ) { 1302 else if ( msg == "timeChange(QString)" ) {
1292 QString t; 1303 QString t;
1293 stream >> t; 1304 stream >> t;
1294 if ( t.isNull() ) 1305 if ( t.isNull() )
1295 unsetenv( "TZ" ); 1306 unsetenv( "TZ" );
1296 else 1307 else
1297 setenv( "TZ", t.latin1(), 1 ); 1308 setenv( "TZ", t.latin1(), 1 );
1298 // emit the signal so everyone else knows... 1309 // emit the signal so everyone else knows...
1299 emit timeChanged(); 1310 emit timeChanged();
1300 } 1311 }
1301 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1312 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1302 if ( type() == GuiServer ) { 1313 if ( type() == GuiServer ) {
1303 QDateTime when; 1314 QDateTime when;
1304 QCString channel, message; 1315 QCString channel, message;
1305 int data; 1316 int data;
1306 stream >> when >> channel >> message >> data; 1317 stream >> when >> channel >> message >> data;
1307 AlarmServer::addAlarm( when, channel, message, data ); 1318 AlarmServer::addAlarm( when, channel, message, data );
1308 } 1319 }
1309 } 1320 }
1310 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1321 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1311 if ( type() == GuiServer ) { 1322 if ( type() == GuiServer ) {
1312 QDateTime when; 1323 QDateTime when;
1313 QCString channel, message; 1324 QCString channel, message;
1314 int data; 1325 int data;
1315 stream >> when >> channel >> message >> data; 1326 stream >> when >> channel >> message >> data;
1316 AlarmServer::deleteAlarm( when, channel, message, data ); 1327 AlarmServer::deleteAlarm( when, channel, message, data );
1317 } 1328 }
1318 } 1329 }
1319 else if ( msg == "clockChange(bool)" ) { 1330 else if ( msg == "clockChange(bool)" ) {
1320 int tmp; 1331 int tmp;
1321 stream >> tmp; 1332 stream >> tmp;
1322 emit clockChanged( tmp ); 1333 emit clockChanged( tmp );
1323 } 1334 }
1324 else if ( msg == "weekChange(bool)" ) { 1335 else if ( msg == "weekChange(bool)" ) {
1325 int tmp; 1336 int tmp;
1326 stream >> tmp; 1337 stream >> tmp;
1327 emit weekChanged( tmp ); 1338 emit weekChanged( tmp );
1328 } 1339 }
1329 else if ( msg == "setDateFormat(DateFormat)" ) { 1340 else if ( msg == "setDateFormat(DateFormat)" ) {
1330 DateFormat tmp; 1341 DateFormat tmp;
1331 stream >> tmp; 1342 stream >> tmp;
1332 emit dateFormatChanged( tmp ); 1343 emit dateFormatChanged( tmp );
1333 } 1344 }
1334 else if ( msg == "setVolume(int,int)" ) { 1345 else if ( msg == "setVolume(int,int)" ) {
1335 int t, v; 1346 int t, v;
1336 stream >> t >> v; 1347 stream >> t >> v;
1337 setVolume( t, v ); 1348 setVolume( t, v );
1338 emit volumeChanged( muted ); 1349 emit volumeChanged( muted );
1339 } 1350 }
1340 else if ( msg == "volumeChange(bool)" ) { 1351 else if ( msg == "volumeChange(bool)" ) {
1341 stream >> muted; 1352 stream >> muted;
1342 setVolume(); 1353 setVolume();
1343 emit volumeChanged( muted ); 1354 emit volumeChanged( muted );
1344 } 1355 }
1345 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>
1346 int t, v; 1357 int t, v;
1347 stream >> t >> v; 1358 stream >> t >> v;
1348 setMic( t, v ); 1359 setMic( t, v );
1349 emit micChanged( micMuted ); 1360 emit micChanged( micMuted );
1350 } 1361 }
1351 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>
1352 stream >> micMuted; 1363 stream >> micMuted;
1353 setMic(); 1364 setMic();
1354 emit micChanged( micMuted ); 1365 emit micChanged( micMuted );
1355 } 1366 }
1356 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>
1357 int t, v; 1368 int t, v;
1358 stream >> t >> v; 1369 stream >> t >> v;
1359 setBass( t, v ); 1370 setBass( t, v );
1360 } 1371 }
1361 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>
1362 setBass(); 1373 setBass();
1363 } 1374 }
1364 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>
1365 int t, v; 1376 int t, v;
1366 stream >> t >> v; 1377 stream >> t >> v;
1367 setTreble( t, v ); 1378 setTreble( t, v );
1368 } 1379 }
1369 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>
1370 setTreble(); 1381 setTreble();
1371 } else if ( msg == "getMarkedText()" ) { 1382 } else if ( msg == "getMarkedText()" ) {
1372 if ( type() == GuiServer ) { 1383 if ( type() == GuiServer ) {
1373 const ushort unicode = 'C'-'@'; 1384 const ushort unicode = 'C'-'@';
1374 const int scan = Key_C; 1385 const int scan = Key_C;
1375 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); 1386 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
1376 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); 1387 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
1377 } 1388 }
1378 } else if ( msg == "newChannel(QString)") { 1389 } else if ( msg == "newChannel(QString)") {
1379 QString myChannel = "QPE/Application/" + d->appName; 1390 QString myChannel = "QPE/Application/" + d->appName;
1380 QString channel; 1391 QString channel;
1381 stream >> channel; 1392 stream >> channel;
1382 if (channel == myChannel) { 1393 if (channel == myChannel) {
1383 processQCopFile(); 1394 processQCopFile();
1384 d->sendQCopQ(); 1395 d->sendQCopQ();
1385 } 1396 }
1386 } 1397 }
1387 1398
1388 1399
1389#endif 1400#endif
1390} 1401}
1391 1402
1392 1403
1393 1404
1394 1405
1395 1406
1396/*! 1407/*!
1397 \internal 1408 \internal
1398*/ 1409*/
1399bool QPEApplication::raiseAppropriateWindow() 1410bool QPEApplication::raiseAppropriateWindow()
1400{ 1411{
1401 bool r=FALSE; 1412 bool r=FALSE;
1402 1413
1403 // 1. Raise the main widget 1414 // 1. Raise the main widget
1404 QWidget *top = d->qpe_main_widget; 1415 QWidget *top = d->qpe_main_widget;
1405 if ( !top ) top = mainWidget(); 1416 if ( !top ) top = mainWidget();
1406 1417
1407 if ( top && d->keep_running ) { 1418 if ( top && d->keep_running ) {
1408 if ( top->isVisible() ) 1419 if ( top->isVisible() )
1409 r = TRUE; 1420 r = TRUE;
1410 else if (d->preloaded) { 1421 else if (d->preloaded) {
1411 // We are preloaded and not visible.. pretend we just started.. 1422 // We are preloaded and not visible.. pretend we just started..
1412#ifndef QT_NO_COP 1423#ifndef QT_NO_COP
1413 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1424 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1414 e << d->appName; 1425 e << d->appName;
1415#endif 1426#endif
1416 } 1427 }
1417 1428
1418 d->show_mx(top,d->nomaximize, d->appName); 1429 d->show_mx(top,d->nomaximize, d->appName);
1419 top->raise(); 1430 top->raise();
1420 } 1431 }
1421 1432
1422 QWidget *topm = activeModalWidget(); 1433 QWidget *topm = activeModalWidget();
1423 1434
1424 // 2. Raise any parentless widgets (except top and topm, as they 1435 // 2. Raise any parentless widgets (except top and topm, as they
1425 // are raised before and after this loop). Order from most 1436 // are raised before and after this loop). Order from most
1426 // recently raised as deepest to least recently as top, so 1437 // recently raised as deepest to least recently as top, so
1427 // that repeated calls cycle through widgets. 1438 // that repeated calls cycle through widgets.
1428 QWidgetList *list = topLevelWidgets(); 1439 QWidgetList *list = topLevelWidgets();
1429 if ( list ) { 1440 if ( list ) {
1430 bool foundlast = FALSE; 1441 bool foundlast = FALSE;
1431 QWidget* topsub = 0; 1442 QWidget* topsub = 0;
1432 if ( d->lastraised ) { 1443 if ( d->lastraised ) {
1433 for (QWidget* w = list->first(); w; w = list->next()) { 1444 for (QWidget* w = list->first(); w; w = list->next()) {
1434 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1445 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1435 if ( w == d->lastraised ) 1446 if ( w == d->lastraised )
1436 foundlast = TRUE; 1447 foundlast = TRUE;
1437 if ( foundlast ) { 1448 if ( foundlast ) {
1438 w->raise(); 1449 w->raise();
1439 topsub = w; 1450 topsub = w;
1440 } 1451 }
1441 } 1452 }
1442 } 1453 }
1443 } 1454 }
1444 for (QWidget* w = list->first(); w; w = list->next()) { 1455 for (QWidget* w = list->first(); w; w = list->next()) {
1445 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1456 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1446 if ( w == d->lastraised ) 1457 if ( w == d->lastraised )
1447 break; 1458 break;
1448 w->raise(); 1459 w->raise();
1449 topsub = w; 1460 topsub = w;
1450 } 1461 }
1451 } 1462 }
1452 d->lastraised = topsub; 1463 d->lastraised = topsub;
1453 delete list; 1464 delete list;
1454 } 1465 }
1455 1466
1456 // 3. Raise the active modal widget. 1467 // 3. Raise the active modal widget.
1457 if ( topm ) { 1468 if ( topm ) {
1458 topm->show(); 1469 topm->show();
1459 topm->raise(); 1470 topm->raise();
1460 // If we haven't already handled the fastAppShowing message 1471 // If we haven't already handled the fastAppShowing message
1461 if (!top && d->preloaded) { 1472 if (!top && d->preloaded) {
1462#ifndef QT_NO_COP 1473#ifndef QT_NO_COP
1463 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1474 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1464 e << d->appName; 1475 e << d->appName;
1465#endif 1476#endif
1466 } 1477 }
1467 r = FALSE; 1478 r = FALSE;
1468 } 1479 }
1469 1480
1470 return r; 1481 return r;
1471} 1482}
1472 1483
1473 1484
1474void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1485void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1475{ 1486{
1476#ifdef Q_WS_QWS 1487#ifdef Q_WS_QWS
1477 1488
1478 if ( msg == "quit()" ) { 1489 if ( msg == "quit()" ) {
1479 tryQuit(); 1490 tryQuit();
1480 } 1491 }
1481 else if ( msg == "quitIfInvisible()" ) { 1492 else if ( msg == "quitIfInvisible()" ) {
1482 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1493 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1483 quit(); 1494 quit();
1484 } 1495 }
1485 else if ( msg == "close()" ) { 1496 else if ( msg == "close()" ) {
1486 hideOrQuit(); 1497 hideOrQuit();
1487 } 1498 }
1488 else if ( msg == "disablePreload()" ) { 1499 else if ( msg == "disablePreload()" ) {
1489 d->preloaded = FALSE; 1500 d->preloaded = FALSE;
1490 d->keep_running = TRUE; 1501 d->keep_running = TRUE;
1491 /* so that quit will quit */ 1502 /* so that quit will quit */
1492 } 1503 }
1493 else if ( msg == "enablePreload()" ) { 1504 else if ( msg == "enablePreload()" ) {
1494 if (d->qpe_main_widget) 1505 if (d->qpe_main_widget)
1495 d->preloaded = TRUE; 1506 d->preloaded = TRUE;
1496 d->keep_running = TRUE; 1507 d->keep_running = TRUE;
1497 /* so next quit won't quit */ 1508 /* so next quit won't quit */
1498 } 1509 }
1499 else if ( msg == "raise()" ) { 1510 else if ( msg == "raise()" ) {
1500 d->keep_running = TRUE; 1511 d->keep_running = TRUE;
1501 d->notbusysent = FALSE; 1512 d->notbusysent = FALSE;
1502 raiseAppropriateWindow(); 1513 raiseAppropriateWindow();
1503 // Tell the system we're still chugging along... 1514 // Tell the system we're still chugging along...
1504 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1515 QCopEnvelope e("QPE/System", "appRaised(QString)");
1505 e << d->appName; 1516 e << d->appName;
1506 } 1517 }
1507 else if ( msg == "flush()" ) { 1518 else if ( msg == "flush()" ) {
1508 emit flush(); 1519 emit flush();
1509 // we need to tell the desktop 1520 // we need to tell the desktop
1510 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1521 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1511 e << d->appName; 1522 e << d->appName;
1512 } 1523 }
1513 else if ( msg == "reload()" ) { 1524 else if ( msg == "reload()" ) {
1514 emit reload(); 1525 emit reload();
1515 } 1526 }
1516 else if ( msg == "setDocument(QString)" ) { 1527 else if ( msg == "setDocument(QString)" ) {
1517 d->keep_running = TRUE; 1528 d->keep_running = TRUE;
1518 QDataStream stream( data, IO_ReadOnly ); 1529 QDataStream stream( data, IO_ReadOnly );
1519 QString doc; 1530 QString doc;
1520 stream >> doc; 1531 stream >> doc;
1521 QWidget *mw = mainWidget(); 1532 QWidget *mw = mainWidget();
1522 if ( !mw ) 1533 if ( !mw )
1523 mw = d->qpe_main_widget; 1534 mw = d->qpe_main_widget;
1524 if ( mw ) 1535 if ( mw )
1525 Global::setDocument( mw, doc ); 1536 Global::setDocument( mw, doc );
1526 1537
1527 } else if ( msg == "QPEProcessQCop()" ) { 1538 } else if ( msg == "QPEProcessQCop()" ) {
1528 processQCopFile(); 1539 processQCopFile();
1529 d->sendQCopQ(); 1540 d->sendQCopQ();
1530 }else 1541 }else
1531 { 1542 {
1532 bool p = d->keep_running; 1543 bool p = d->keep_running;
1533 d->keep_running = FALSE; 1544 d->keep_running = FALSE;
1534 emit appMessage( msg, data); 1545 emit appMessage( msg, data);
1535 if ( d->keep_running ) { 1546 if ( d->keep_running ) {
1536 d->notbusysent = FALSE; 1547 d->notbusysent = FALSE;
1537 raiseAppropriateWindow(); 1548 raiseAppropriateWindow();
1538 if ( !p ) { 1549 if ( !p ) {
1539 // Tell the system we're still chugging along... 1550 // Tell the system we're still chugging along...
1540#ifndef QT_NO_COP 1551#ifndef QT_NO_COP
1541 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1552 QCopEnvelope e("QPE/System", "appRaised(QString)");
1542 e << d->appName; 1553 e << d->appName;
1543#endif 1554#endif
1544 } 1555 }
1545 } 1556 }
1546 if ( p ) 1557 if ( p )
1547 d->keep_running = p; 1558 d->keep_running = p;
1548 } 1559 }
1549#endif 1560#endif
1550} 1561}
1551 1562
1552 1563
1553/*! 1564/*!
1554 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,
1555 consider passing TRUE for \a nomaximize rather than the default FALSE. 1566 consider passing TRUE for \a nomaximize rather than the default FALSE.
1556 1567
1557 \sa showMainDocumentWidget() 1568 \sa showMainDocumentWidget()
1558*/ 1569*/
1559void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) 1570void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
1560{ 1571{
1561 // setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit 1572 // setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit
1562 d->show(mw, nomaximize ); 1573 d->show(mw, nomaximize );
1563} 1574}
1564 1575
1565/*! 1576/*!
1566 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,
1567 consider passing TRUE for \a nomaximize rather than the default FALSE. 1578 consider passing TRUE for \a nomaximize rather than the default FALSE.
1568 1579
1569 This calls designates the application as 1580 This calls designates the application as
1570 a \link docwidget.html document-oriented\endlink application. 1581 a \link docwidget.html document-oriented\endlink application.
1571 1582
1572 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&).
1573 1584
1574 \sa showMainWidget() 1585 \sa showMainWidget()
1575*/ 1586*/
1576void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) 1587void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1577{ 1588{
1578 if ( mw && argc() == 2 ) 1589 if ( mw && argc() == 2 )
1579 Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); 1590 Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
1580 1591
1581 1592
1582 //setMainWidget(mw); see above 1593 //setMainWidget(mw); see above
1583 d->show(mw, nomaximize ); 1594 d->show(mw, nomaximize );
1584} 1595}
1585 1596
1586 1597
1587/*! 1598/*!
1588 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
1589 message, the application will process the \link qcop.html 1600 message, the application will process the \link qcop.html
1590 QCop\endlink message and then quit. If the application calls this 1601 QCop\endlink message and then quit. If the application calls this
1591 function while processing a \link qcop.html QCop\endlink message, 1602 function while processing a \link qcop.html QCop\endlink message,
1592 after processing its outstanding \link qcop.html QCop\endlink 1603 after processing its outstanding \link qcop.html QCop\endlink
1593 messages the application will start 'properly' and show itself. 1604 messages the application will start 'properly' and show itself.
1594 1605
1595 \sa keepRunning() 1606 \sa keepRunning()
1596*/ 1607*/
1597void QPEApplication::setKeepRunning() 1608void QPEApplication::setKeepRunning()
1598{ 1609{
1599 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1610 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1600 QPEApplication * qpeApp = ( QPEApplication* ) qApp; 1611 QPEApplication * qpeApp = ( QPEApplication* ) qApp;
1601 qpeApp->d->keep_running = TRUE; 1612 qpeApp->d->keep_running = TRUE;
1602 } 1613 }
1603} 1614}
1604 1615
1605/*! 1616/*!
1606 Returns TRUE if the application will quit after processing the 1617 Returns TRUE if the application will quit after processing the
1607 current list of qcop messages; otherwise returns FALSE. 1618 current list of qcop messages; otherwise returns FALSE.
1608 1619
1609 \sa setKeepRunning() 1620 \sa setKeepRunning()
1610*/ 1621*/
1611bool QPEApplication::keepRunning() const 1622bool QPEApplication::keepRunning() const
1612{ 1623{
1613 return d->keep_running; 1624 return d->keep_running;
1614} 1625}
1615 1626
1616/*! 1627/*!
1617 \internal 1628 \internal
1618*/ 1629*/
1619void QPEApplication::internalSetStyle( const QString &style ) 1630void QPEApplication::internalSetStyle( const QString &style )
1620{ 1631{
1621#if QT_VERSION >= 300 1632#if QT_VERSION >= 300
1622 if ( style == "QPE" ) { 1633 if ( style == "QPE" ) {
1623 setStyle( new QPEStyle ); 1634 setStyle( new QPEStyle );
1624 } 1635 }
1625 else { 1636 else {
1626 QStyle *s = QStyleFactory::create( style ); 1637 QStyle *s = QStyleFactory::create( style );
1627 if ( s ) 1638 if ( s )
1628 setStyle( s ); 1639 setStyle( s );
1629 } 1640 }
1630#else 1641#else
1631 if ( style == "Windows" ) { 1642 if ( style == "Windows" ) {
1632 setStyle( new QWindowsStyle ); 1643 setStyle( new QWindowsStyle );
1633 } 1644 }
1634 else if ( style == "QPE" ) { 1645 else if ( style == "QPE" ) {
1635 setStyle( new QPEStyle ); 1646 setStyle( new QPEStyle );
1636 } 1647 }
1637 else if ( style == "Light" ) { 1648 else if ( style == "Light" ) {
1638 setStyle( new LightStyle ); 1649 setStyle( new LightStyle );
1639 } 1650 }
1640#ifndef QT_NO_STYLE_PLATINUM 1651#ifndef QT_NO_STYLE_PLATINUM
1641 else if ( style == "Platinum" ) { 1652 else if ( style == "Platinum" ) {
1642 setStyle( new QPlatinumStyle ); 1653 setStyle( new QPlatinumStyle );
1643 } 1654 }
1644#endif 1655#endif
1645#ifndef QT_NO_STYLE_MOTIF 1656#ifndef QT_NO_STYLE_MOTIF
1646 else if ( style == "Motif" ) { 1657 else if ( style == "Motif" ) {
1647 setStyle( new QMotifStyle ); 1658 setStyle( new QMotifStyle );
1648 } 1659 }
1649#endif 1660#endif
1650#ifndef QT_NO_STYLE_MOTIFPLUS 1661#ifndef QT_NO_STYLE_MOTIFPLUS
1651 else if ( style == "MotifPlus" ) { 1662 else if ( style == "MotifPlus" ) {
1652 setStyle( new QMotifPlusStyle ); 1663 setStyle( new QMotifPlusStyle );
1653 } 1664 }
1654#endif 1665#endif
1655 1666
1656 else { 1667 else {
1657 QStyle *sty = 0; 1668 QStyle *sty = 0;
1658 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 1669 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/";
1659 1670
1660#ifdef Q_OS_MACX 1671#ifdef Q_OS_MACX
1661 if ( style. find ( ".dylib" ) > 0 ) 1672 if ( style. find ( ".dylib" ) > 0 )
1662 path += style; 1673 path += style;
1663 else 1674 else
1664 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility 1675 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility
1665#else 1676#else
1666 if ( style. find ( ".so" ) > 0 ) 1677 if ( style. find ( ".so" ) > 0 )
1667 path += style; 1678 path += style;
1668 else 1679 else
1669 path = path + "lib" + style. lower ( ) + ".so"; // compatibility 1680 path = path + "lib" + style. lower ( ) + ".so"; // compatibility
1670#endif 1681#endif
1671 static QLibrary *lastlib = 0; 1682 static QLibrary *lastlib = 0;
1672 static StyleInterface *lastiface = 0; 1683 static StyleInterface *lastiface = 0;
1673 1684
1674 QLibrary *lib = new QLibrary ( path ); 1685 QLibrary *lib = new QLibrary ( path );
1675 StyleInterface *iface = 0; 1686 StyleInterface *iface = 0;
1676 1687
1677 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) 1688 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface )
1678 sty = iface-> style ( ); 1689 sty = iface-> style ( );
1679 1690
1680 if ( sty ) { 1691 if ( sty ) {
1681 setStyle ( sty ); 1692 setStyle ( sty );
1682 1693
1683 if ( lastiface ) 1694 if ( lastiface )
1684 lastiface-> release ( ); 1695 lastiface-> release ( );
1685 lastiface = iface; 1696 lastiface = iface;
1686 1697
1687 if ( lastlib ) { 1698 if ( lastlib ) {
1688 lastlib-> unload ( ); 1699 lastlib-> unload ( );
1689 delete lastlib; 1700 delete lastlib;
1690 } 1701 }
1691 lastlib = lib; 1702 lastlib = lib;
1692 } 1703 }
1693 else { 1704 else {
1694 if ( iface ) 1705 if ( iface )
1695 iface-> release ( ); 1706 iface-> release ( );
1696 delete lib; 1707 delete lib;
1697 1708
1698 setStyle ( new LightStyle ( )); 1709 setStyle ( new LightStyle ( ));
1699 } 1710 }
1700 } 1711 }
1701#endif 1712#endif
1702} 1713}
1703 1714
1704/*! 1715/*!
1705 \internal 1716 \internal
1706*/ 1717*/
1707void QPEApplication::prepareForTermination( bool willrestart ) 1718void QPEApplication::prepareForTermination( bool willrestart )
1708{ 1719{
1709 if ( willrestart ) { 1720 if ( willrestart ) {
1710 // 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
1711 // QWidget *d = QApplication::desktop(); 1722 // QWidget *d = QApplication::desktop();
1712 QImage img = Resource::loadImage( "launcher/new_wait" ); 1723 QImage img = Resource::loadImage( "launcher/new_wait" );
1713 QPixmap pix; 1724 QPixmap pix;
1714 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); 1725 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) );
1715 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | 1726 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize |