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