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