summaryrefslogtreecommitdiff
path: root/library
Unidiff
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 3ca6d73..c107a08 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -62,777 +62,778 @@
62#include "lightstyle.h" 62#include "lightstyle.h"
63 63
64#include <qpe/qlibrary.h> 64#include <qpe/qlibrary.h>
65#endif 65#endif
66#include "global.h" 66#include "global.h"
67#include "resource.h" 67#include "resource.h"
68#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 68#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
69#include "qutfcodec.h" 69#include "qutfcodec.h"
70#endif 70#endif
71#include "config.h" 71#include "config.h"
72#include "network.h" 72#include "network.h"
73#ifdef QWS 73#ifdef QWS
74#include "fontmanager.h" 74#include "fontmanager.h"
75#endif 75#endif
76 76
77#include "alarmserver.h" 77#include "alarmserver.h"
78#include "applnk.h" 78#include "applnk.h"
79#include "qpemenubar.h" 79#include "qpemenubar.h"
80#include "textcodecinterface.h" 80#include "textcodecinterface.h"
81#include "imagecodecinterface.h" 81#include "imagecodecinterface.h"
82 82
83#include <unistd.h> 83#include <unistd.h>
84#include <sys/file.h> 84#include <sys/file.h>
85#include <sys/ioctl.h> 85#include <sys/ioctl.h>
86#include <sys/soundcard.h> 86#include <sys/soundcard.h>
87 87
88 88
89class QPEApplicationData { 89class QPEApplicationData {
90public: 90public:
91 QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ), 91 QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ),
92 kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ), 92 kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ),
93 forceshow( FALSE ), nomaximize( FALSE ), qpe_main_widget( 0 ), 93 forceshow( FALSE ), nomaximize( FALSE ), qpe_main_widget( 0 ),
94 keep_running( TRUE ) 94 keep_running( TRUE )
95 { 95 {
96 qcopq.setAutoDelete( TRUE ); 96 qcopq.setAutoDelete( TRUE );
97 } 97 }
98 98
99 int presstimer; 99 int presstimer;
100 QWidget* presswidget; 100 QWidget* presswidget;
101 QPoint presspos; 101 QPoint presspos;
102 bool rightpressed : 1; // AEH why not use uint foobar :1; if it's tt style -zecke 102 bool rightpressed : 1; // AEH why not use uint foobar :1; if it's tt style -zecke
103 int kbgrabber; 103 int kbgrabber;
104 bool kbregrab : 1; 104 bool kbregrab : 1;
105 bool notbusysent : 1; 105 bool notbusysent : 1;
106 QString appName; 106 QString appName;
107 struct QCopRec { 107 struct QCopRec {
108 QCopRec( const QCString &ch, const QCString &msg, 108 QCopRec( const QCString &ch, const QCString &msg,
109 const QByteArray &d ) : 109 const QByteArray &d ) :
110 channel( ch ), message( msg ), data( d ) { } 110 channel( ch ), message( msg ), data( d ) { }
111 111
112 QCString channel; 112 QCString channel;
113 QCString message; 113 QCString message;
114 QByteArray data; 114 QByteArray data;
115 }; 115 };
116 bool preloaded : 1; 116 bool preloaded : 1;
117 bool forceshow : 1; 117 bool forceshow : 1;
118 bool nomaximize : 1; 118 bool nomaximize : 1;
119 QWidget* qpe_main_widget; 119 QWidget* qpe_main_widget;
120 bool keep_running : 1; 120 bool keep_running : 1;
121 QList<QCopRec> qcopq; 121 QList<QCopRec> qcopq;
122 122
123 void enqueueQCop( const QCString &ch, const QCString &msg, 123 void enqueueQCop( const QCString &ch, const QCString &msg,
124 const QByteArray &data ) 124 const QByteArray &data )
125 { 125 {
126 qcopq.append( new QCopRec( ch, msg, data ) ); 126 qcopq.append( new QCopRec( ch, msg, data ) );
127 } 127 }
128 void sendQCopQ() { 128 void sendQCopQ() {
129 QCopRec * r; 129 QCopRec * r;
130#ifndef QT_NO_COP 130#ifndef QT_NO_COP
131 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it ) 131 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it )
132 QCopChannel::sendLocally( r->channel, r->message, r->data ); 132 QCopChannel::sendLocally( r->channel, r->message, r->data );
133#endif 133#endif
134 qcopq.clear(); 134 qcopq.clear();
135 } 135 }
136 static void show_mx(QWidget* mw, bool nomaximize) { 136 static void show_mx(QWidget* mw, bool nomaximize) {
137 if ( mw->layout() && mw->inherits("QDialog") ) { 137 if ( mw->layout() && mw->inherits("QDialog") ) {
138 QPEApplication::showDialog((QDialog*)mw,nomaximize); 138 QPEApplication::showDialog((QDialog*)mw,nomaximize);
139 } else { 139 } else {
140#ifdef Q_WS_QWS 140#ifdef Q_WS_QWS
141 if ( !nomaximize ) 141 if ( !nomaximize )
142 mw->showMaximized(); 142 mw->showMaximized();
143 else 143 else
144#endif 144#endif
145 mw->show(); 145 mw->show();
146 } 146 }
147 } 147 }
148 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) 148 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
149 { 149 {
150 /* 150 /*
151 // This works but disable it for now until it is safe to apply 151 // This works but disable it for now until it is safe to apply
152 // What is does is scan the .desktop files of all the apps for 152 // What is does is scan the .desktop files of all the apps for
153 // the applnk that has the corresponding argv[0] as this program 153 // the applnk that has the corresponding argv[0] as this program
154 // then it uses the name stored in the .desktop file as the caption 154 // then it uses the name stored in the .desktop file as the caption
155 // for the main widget. This saves duplicating translations for 155 // for the main widget. This saves duplicating translations for
156 // the app name in the program and in the .desktop files. 156 // the app name in the program and in the .desktop files.
157 157
158 AppLnkSet apps( appsPath ); 158 AppLnkSet apps( appsPath );
159 159
160 QList<AppLnk> appsList = apps.children(); 160 QList<AppLnk> appsList = apps.children();
161 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { 161 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
162 if ( (*it)->exec() == appName ) { 162 if ( (*it)->exec() == appName ) {
163 mw->setCaption( (*it)->name() ); 163 mw->setCaption( (*it)->name() );
164 return TRUE; 164 return TRUE;
165 } 165 }
166 } 166 }
167 */ 167 */
168 return FALSE; 168 return FALSE;
169 } 169 }
170 170
171 171
172 void show(QWidget* mw, bool nomax) 172 void show(QWidget* mw, bool nomax)
173 { 173 {
174 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); 174 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" );
175 nomaximize = nomax; 175 nomaximize = nomax;
176 qpe_main_widget = mw; 176 qpe_main_widget = mw;
177#ifndef QT_NO_COP 177#ifndef QT_NO_COP
178 sendQCopQ(); 178 sendQCopQ();
179#endif 179#endif
180 if ( preloaded ) { 180 if ( preloaded ) {
181 if(forceshow) 181 if(forceshow)
182 show_mx(mw,nomax); 182 show_mx(mw,nomax);
183 } else if ( keep_running ) { 183 } else if ( keep_running ) {
184 show_mx(mw,nomax); 184 show_mx(mw,nomax);
185 } 185 }
186 } 186 }
187 187
188 void loadTextCodecs() 188 void loadTextCodecs()
189 { 189 {
190 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; 190 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs";
191 QDir dir( path, "lib*.so" ); 191 QDir dir( path, "lib*.so" );
192 QStringList list = dir.entryList(); 192 QStringList list = dir.entryList();
193 QStringList::Iterator it; 193 QStringList::Iterator it;
194 for ( it = list.begin(); it != list.end(); ++it ) { 194 for ( it = list.begin(); it != list.end(); ++it ) {
195 TextCodecInterface *iface = 0; 195 TextCodecInterface *iface = 0;
196 QLibrary *lib = new QLibrary( path + "/" + *it ); 196 QLibrary *lib = new QLibrary( path + "/" + *it );
197 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 197 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
198 QValueList<int> mibs = iface->mibEnums(); 198 QValueList<int> mibs = iface->mibEnums();
199 for (QValueList<int>::ConstIterator i=mibs.begin(); i!=mibs.end(); ++i) { 199 for (QValueList<int>::ConstIterator i=mibs.begin(); i!=mibs.end(); ++i) {
200 (void)iface->createForMib(*i); 200 (void)iface->createForMib(*i);
201 // ### it exists now; need to remember if we can delete it 201 // ### it exists now; need to remember if we can delete it
202 } 202 }
203 } else { 203 } else {
204 lib->unload(); 204 lib->unload();
205 delete lib; 205 delete lib;
206 } 206 }
207 } 207 }
208 } 208 }
209 209
210 void loadImageCodecs() 210 void loadImageCodecs()
211 { 211 {
212 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 212 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
213 QDir dir( path, "lib*.so" ); 213 QDir dir( path, "lib*.so" );
214 QStringList list = dir.entryList(); 214 QStringList list = dir.entryList();
215 QStringList::Iterator it; 215 QStringList::Iterator it;
216 for ( it = list.begin(); it != list.end(); ++it ) { 216 for ( it = list.begin(); it != list.end(); ++it ) {
217 ImageCodecInterface *iface = 0; 217 ImageCodecInterface *iface = 0;
218 QLibrary *lib = new QLibrary( path + "/" + *it ); 218 QLibrary *lib = new QLibrary( path + "/" + *it );
219 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 219 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
220 QStringList formats = iface->keys(); 220 QStringList formats = iface->keys();
221 for (QStringList::ConstIterator i=formats.begin(); i!=formats.end(); ++i) { 221 for (QStringList::ConstIterator i=formats.begin(); i!=formats.end(); ++i) {
222 (void)iface->installIOHandler(*i); 222 (void)iface->installIOHandler(*i);
223 // ### it exists now; need to remember if we can delete it 223 // ### it exists now; need to remember if we can delete it
224 } 224 }
225 } else { 225 } else {
226 lib->unload(); 226 lib->unload();
227 delete lib; 227 delete lib;
228 } 228 }
229 } 229 }
230 } 230 }
231 QString styleName; 231 QString styleName;
232 QString decorationName; 232 QString decorationName;
233}; 233};
234 234
235class ResourceMimeFactory : public QMimeSourceFactory { 235class ResourceMimeFactory : public QMimeSourceFactory {
236public: 236public:
237 ResourceMimeFactory() 237 ResourceMimeFactory()
238 { 238 {
239 setFilePath( Global::helpPath() ); 239 setFilePath( Global::helpPath() );
240 setExtensionType( "html", "text/html;charset=UTF-8" ); 240 setExtensionType( "html", "text/html;charset=UTF-8" );
241 } 241 }
242 242
243 const QMimeSource* data( const QString& abs_name ) const 243 const QMimeSource* data( const QString& abs_name ) const
244 { 244 {
245 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 245 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
246 if ( !r ) { 246 if ( !r ) {
247 int sl = abs_name.length(); 247 int sl = abs_name.length();
248 do { 248 do {
249 sl = abs_name.findRev( '/', sl - 1 ); 249 sl = abs_name.findRev( '/', sl - 1 );
250 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 250 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
251 int dot = name.findRev( '.' ); 251 int dot = name.findRev( '.' );
252 if ( dot >= 0 ) 252 if ( dot >= 0 )
253 name = name.left( dot ); 253 name = name.left( dot );
254 QImage img = Resource::loadImage( name ); 254 QImage img = Resource::loadImage( name );
255 if ( !img.isNull() ) 255 if ( !img.isNull() )
256 r = new QImageDrag( img ); 256 r = new QImageDrag( img );
257 } 257 }
258 while ( !r && sl > 0 ); 258 while ( !r && sl > 0 );
259 } 259 }
260 return r; 260 return r;
261 } 261 }
262}; 262};
263 263
264static int muted = 0; 264static int muted = 0;
265static int micMuted = 0; 265static int micMuted = 0;
266 266
267static void setVolume( int t = 0, int percent = -1 ) 267static void setVolume( int t = 0, int percent = -1 )
268{ 268{
269 switch ( t ) { 269 switch ( t ) {
270 case 0: { 270 case 0: {
271 Config cfg( "qpe" ); 271 Config cfg( "qpe" );
272 cfg.setGroup( "Volume" ); 272 cfg.setGroup( "Volume" );
273 if ( percent < 0 ) 273 if ( percent < 0 )
274 percent = cfg.readNumEntry( "VolumePercent", 50 ); 274 percent = cfg.readNumEntry( "VolumePercent", 50 );
275 int fd = 0; 275 int fd = 0;
276 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 276 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
277 int vol = muted ? 0 : percent; 277 int vol = muted ? 0 : percent;
278 // set both channels to same volume 278 // set both channels to same volume
279 vol |= vol << 8; 279 vol |= vol << 8;
280 ioctl( fd, MIXER_WRITE( 0 ), &vol ); 280 ioctl( fd, MIXER_WRITE( 0 ), &vol );
281 ::close( fd ); 281 ::close( fd );
282 } 282 }
283 } 283 }
284 break; 284 break;
285 } 285 }
286} 286}
287 287
288static void setMic( int t = 0, int percent = -1 ) 288static void setMic( int t = 0, int percent = -1 )
289{ 289{
290 switch ( t ) { 290 switch ( t ) {
291 case 0: { 291 case 0: {
292 Config cfg( "qpe" ); 292 Config cfg( "qpe" );
293 cfg.setGroup( "Volume" ); 293 cfg.setGroup( "Volume" );
294 if ( percent < 0 ) 294 if ( percent < 0 )
295 percent = cfg.readNumEntry( "Mic", 50 ); 295 percent = cfg.readNumEntry( "Mic", 50 );
296 296
297 int fd = 0; 297 int fd = 0;
298 int mic = micMuted ? 0 : percent; 298 int mic = micMuted ? 0 : percent;
299 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 299 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
300 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 300 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
301 ::close( fd ); 301 ::close( fd );
302 } 302 }
303 } 303 }
304 break; 304 break;
305 } 305 }
306} 306}
307 307
308 308
309/*! 309/*!
310 \class QPEApplication qpeapplication.h 310 \class QPEApplication qpeapplication.h
311 \brief The QPEApplication class implements various system services 311 \brief The QPEApplication class implements various system services
312 that are available to all Qtopia applications. 312 that are available to all Qtopia applications.
313 313
314 Simply by using QPEApplication instead of QApplication, a standard Qt 314 Simply by using QPEApplication instead of QApplication, a standard Qt
315 application becomes a Qtopia application. It automatically follows 315 application becomes a Qtopia application. It automatically follows
316 style changes, quits and raises, and in the 316 style changes, quits and raises, and in the
317 case of \link docwidget.html document-oriented\endlink applications, 317 case of \link docwidget.html document-oriented\endlink applications,
318 changes the currently displayed document in response to the environment. 318 changes the currently displayed document in response to the environment.
319 319
320 To create a \link docwidget.html document-oriented\endlink 320 To create a \link docwidget.html document-oriented\endlink
321 application use showMainDocumentWidget(); to create a 321 application use showMainDocumentWidget(); to create a
322 non-document-oriented application use showMainWidget(). The 322 non-document-oriented application use showMainWidget(). The
323 keepRunning() function indicates whether the application will 323 keepRunning() function indicates whether the application will
324 continue running after it's processed the last \link qcop.html 324 continue running after it's processed the last \link qcop.html
325 QCop\endlink message. This can be changed using setKeepRunning(). 325 QCop\endlink message. This can be changed using setKeepRunning().
326 326
327 A variety of signals are emitted when certain events occur, for 327 A variety of signals are emitted when certain events occur, for
328 example, timeChanged(), clockChanged(), weekChanged(), 328 example, timeChanged(), clockChanged(), weekChanged(),
329 dateFormatChanged() and volumeChanged(). If the application receives 329 dateFormatChanged() and volumeChanged(). If the application receives
330 a \link qcop.html QCop\endlink message on the application's 330 a \link qcop.html QCop\endlink message on the application's
331 QPE/Application/\e{appname} channel, the appMessage() signal is 331 QPE/Application/\e{appname} channel, the appMessage() signal is
332 emitted. There are also flush() and reload() signals, which 332 emitted. There are also flush() and reload() signals, which
333 are emitted when synching begins and ends respectively - upon these 333 are emitted when synching begins and ends respectively - upon these
334 signals, the application should save and reload any data 334 signals, the application should save and reload any data
335 files that are involved in synching. Most of these signals will initially 335 files that are involved in synching. Most of these signals will initially
336 be received and unfiltered through the appMessage() signal. 336 be received and unfiltered through the appMessage() signal.
337 337
338 This class also provides a set of useful static functions. The 338 This class also provides a set of useful static functions. The
339 qpeDir() and documentDir() functions return the respective paths. 339 qpeDir() and documentDir() functions return the respective paths.
340 The grabKeyboard() and ungrabKeyboard() functions are used to 340 The grabKeyboard() and ungrabKeyboard() functions are used to
341 control whether the application takes control of the device's 341 control whether the application takes control of the device's
342 physical buttons (e.g. application launch keys). The stylus' mode of 342 physical buttons (e.g. application launch keys). The stylus' mode of
343 operation is set with setStylusOperation() and retrieved with 343 operation is set with setStylusOperation() and retrieved with
344 stylusOperation(). There are also setInputMethodHint() and 344 stylusOperation(). There are also setInputMethodHint() and
345 inputMethodHint() functions. 345 inputMethodHint() functions.
346 346
347 \ingroup qtopiaemb 347 \ingroup qtopiaemb
348*/ 348*/
349 349
350/*! 350/*!
351 \fn void QPEApplication::clientMoused() 351 \fn void QPEApplication::clientMoused()
352 352
353 \internal 353 \internal
354*/ 354*/
355 355
356/*! 356/*!
357 \fn void QPEApplication::timeChanged(); 357 \fn void QPEApplication::timeChanged();
358 This signal is emitted when the time changes outside the normal 358 This signal is emitted when the time changes outside the normal
359 passage of time, i.e. if the time is set backwards or forwards. 359 passage of time, i.e. if the time is set backwards or forwards.
360*/ 360*/
361 361
362/*! 362/*!
363 \fn void QPEApplication::clockChanged( bool ampm ); 363 \fn void QPEApplication::clockChanged( bool ampm );
364 364
365 This signal is emitted when the user changes the clock's style. If 365 This signal is emitted when the user changes the clock's style. If
366 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise, 366 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise,
367 they want a 24-hour clock. 367 they want a 24-hour clock.
368*/ 368*/
369 369
370/*! 370/*!
371 \fn void QPEApplication::volumeChanged( bool muted ) 371 \fn void QPEApplication::volumeChanged( bool muted )
372 372
373 This signal is emitted whenever the mute state is changed. If \a 373 This signal is emitted whenever the mute state is changed. If \a
374 muted is TRUE, then sound output has been muted. 374 muted is TRUE, then sound output has been muted.
375*/ 375*/
376 376
377/*! 377/*!
378 \fn void QPEApplication::weekChanged( bool startOnMonday ) 378 \fn void QPEApplication::weekChanged( bool startOnMonday )
379 379
380 This signal is emitted if the week start day is changed. If \a 380 This signal is emitted if the week start day is changed. If \a
381 startOnMonday is TRUE then the first day of the week is Monday; if 381 startOnMonday is TRUE then the first day of the week is Monday; if
382 \a startOnMonday is FALSE then the first day of the week is 382 \a startOnMonday is FALSE then the first day of the week is
383 Sunday. 383 Sunday.
384*/ 384*/
385 385
386/*! 386/*!
387 \fn void QPEApplication::dateFormatChanged() 387 \fn void QPEApplication::dateFormatChanged()
388 388
389 This signal is emitted whenever the date format is changed. 389 This signal is emitted whenever the date format is changed.
390*/ 390*/
391 391
392/*! 392/*!
393 \fn void QPEApplication::flush() 393 \fn void QPEApplication::flush()
394 394
395 ### 395 ###
396*/ 396*/
397 397
398/*! 398/*!
399 \fn void QPEApplication::reload() 399 \fn void QPEApplication::reload()
400 400
401*/ 401*/
402 402
403/*! 403/*!
404 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 404 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
405 405
406 This signal is emitted when a message is received on this 406 This signal is emitted when a message is received on this
407 application's QPE/Application/<i>appname</i> \link qcop.html 407 application's QPE/Application/<i>appname</i> \link qcop.html
408 QCop\endlink channel. 408 QCop\endlink channel.
409 409
410 The slot to which you connect this signal uses \a msg and \a data 410 The slot to which you connect this signal uses \a msg and \a data
411 in the following way: 411 in the following way:
412 412
413\code 413\code
414 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 414 void MyWidget::receive( const QCString& msg, const QByteArray& data )
415 { 415 {
416 QDataStream stream( data, IO_ReadOnly ); 416 QDataStream stream( data, IO_ReadOnly );
417 if ( msg == "someMessage(int,int,int)" ) { 417 if ( msg == "someMessage(int,int,int)" ) {
418 int a,b,c; 418 int a,b,c;
419 stream >> a >> b >> c; 419 stream >> a >> b >> c;
420 ... 420 ...
421 } else if ( msg == "otherMessage(QString)" ) { 421 } else if ( msg == "otherMessage(QString)" ) {
422 ... 422 ...
423 } 423 }
424 } 424 }
425\endcode 425\endcode
426 426
427 \sa qcop.html 427 \sa qcop.html
428 Note that messages received here may be processed by qpe application 428 Note that messages received here may be processed by qpe application
429 and emitted as signals, such as flush() and reload(). 429 and emitted as signals, such as flush() and reload().
430*/ 430*/
431 431
432/*! 432/*!
433 Constructs a QPEApplication just as you would construct 433 Constructs a QPEApplication just as you would construct
434 a QApplication, passing \a argc, \a argv, and \a t. 434 a QApplication, passing \a argc, \a argv, and \a t.
435 435
436 For applications, \a t should be the default, GuiClient. Only 436 For applications, \a t should be the default, GuiClient. Only
437 the Qtopia server passes GuiServer. 437 the Qtopia server passes GuiServer.
438*/ 438*/
439QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 439QPEApplication::QPEApplication( int & argc, char **argv, Type t )
440 : QApplication( argc, argv, t ) 440 : QApplication( argc, argv, t )
441{ 441{
442 d = new QPEApplicationData; 442 d = new QPEApplicationData;
443 d->loadTextCodecs(); 443 d->loadTextCodecs();
444 d->loadImageCodecs(); 444 d->loadImageCodecs();
445 int dw = desktop() ->width(); 445 int dw = desktop() ->width();
446 qWarning( "Width %d", dw );
446 if ( dw < 200 ) { 447 if ( dw < 200 ) {
447 setFont( QFont( "helvetica", 8 ) ); 448 setFont( QFont( "helvetica", 8 ) );
448 AppLnk::setSmallIconSize( 10 ); 449 AppLnk::setSmallIconSize( 10 );
449 AppLnk::setBigIconSize( 28 ); 450 AppLnk::setBigIconSize( 28 );
450 }else if ( dw > 600 ) { 451 }else if ( dw > 600 ) {
451 setFont( QFont( "helvetica", 12 ) ); 452 setFont( QFont( "helvetica", 12 ) );
452 AppLnk::setSmallIconSize( 24 ); 453 AppLnk::setSmallIconSize( 24 );
453 AppLnk::setBigIconSize( 48 ); 454 AppLnk::setBigIconSize( 48 );
454 }else if ( dw > 400 ) { 455 }else if ( dw > 200 ) {
455 setFont( QFont( "helvetica", 12 ) ); 456 setFont( QFont( "helvetica", 12 ) );
456 AppLnk::setSmallIconSize( 16 ); 457 AppLnk::setSmallIconSize( 16 );
457 AppLnk::setBigIconSize( 32 ); 458 AppLnk::setBigIconSize( 32 );
458 } 459 }
459 460
460 461
461 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 462 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
462 463
463 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 464 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
464#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 465#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
465 466
466 QString qcopfn( "/tmp/qcop-msg-" ); 467 QString qcopfn( "/tmp/qcop-msg-" );
467 qcopfn += QString( argv[ 0 ] ); // append command name 468 qcopfn += QString( argv[ 0 ] ); // append command name
468 469
469 QFile f( qcopfn ); 470 QFile f( qcopfn );
470 if ( f.open( IO_ReadOnly ) ) { 471 if ( f.open( IO_ReadOnly ) ) {
471 flock( f.handle(), LOCK_EX ); 472 flock( f.handle(), LOCK_EX );
472 } 473 }
473 474
474 sysChannel = new QCopChannel( "QPE/System", this ); 475 sysChannel = new QCopChannel( "QPE/System", this );
475 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 476 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
476 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); 477 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) );
477 478
478 QCString channel = QCString( argv[ 0 ] ); 479 QCString channel = QCString( argv[ 0 ] );
479 channel.replace( QRegExp( ".*/" ), "" ); 480 channel.replace( QRegExp( ".*/" ), "" );
480 d->appName = channel; 481 d->appName = channel;
481 channel = "QPE/Application/" + channel; 482 channel = "QPE/Application/" + channel;
482 pidChannel = new QCopChannel( channel, this ); 483 pidChannel = new QCopChannel( channel, this );
483 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 484 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
484 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); 485 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) );
485 486
486 if ( f.isOpen() ) { 487 if ( f.isOpen() ) {
487 d->keep_running = FALSE; 488 d->keep_running = FALSE;
488 QDataStream ds( &f ); 489 QDataStream ds( &f );
489 QCString channel, message; 490 QCString channel, message;
490 QByteArray data; 491 QByteArray data;
491 while ( !ds.atEnd() ) { 492 while ( !ds.atEnd() ) {
492 ds >> channel >> message >> data; 493 ds >> channel >> message >> data;
493 d->enqueueQCop( channel, message, data ); 494 d->enqueueQCop( channel, message, data );
494 } 495 }
495 496
496 flock( f.handle(), LOCK_UN ); 497 flock( f.handle(), LOCK_UN );
497 f.close(); 498 f.close();
498 f.remove(); 499 f.remove();
499 } 500 }
500 501
501 for ( int a = 0; a < argc; a++ ) { 502 for ( int a = 0; a < argc; a++ ) {
502 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 503 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
503 argv[ a ] = argv[ a + 1 ]; 504 argv[ a ] = argv[ a + 1 ];
504 a++; 505 a++;
505 d->preloaded = TRUE; 506 d->preloaded = TRUE;
506 argc -= 1; 507 argc -= 1;
507 } 508 }
508 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 509 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
509 argv[ a ] = argv[ a + 1 ]; 510 argv[ a ] = argv[ a + 1 ];
510 a++; 511 a++;
511 d->preloaded = TRUE; 512 d->preloaded = TRUE;
512 d->forceshow = TRUE; 513 d->forceshow = TRUE;
513 argc -= 1; 514 argc -= 1;
514 } 515 }
515 } 516 }
516 517
517 /* overide stored arguments */ 518 /* overide stored arguments */
518 setArgs( argc, argv ); 519 setArgs( argc, argv );
519 520
520#endif 521#endif
521 522
522 //qwsSetDecoration( new QPEDecoration() ); 523 //qwsSetDecoration( new QPEDecoration() );
523 524
524#ifndef QT_NO_TRANSLATION 525#ifndef QT_NO_TRANSLATION
525 526
526 QStringList langs = Global::languageList(); 527 QStringList langs = Global::languageList();
527 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) { 528 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) {
528 QString lang = *it; 529 QString lang = *it;
529 530
530 QTranslator * trans; 531 QTranslator * trans;
531 QString tfn; 532 QString tfn;
532 533
533 trans = new QTranslator( this ); 534 trans = new QTranslator( this );
534 tfn = qpeDir() + "/i18n/" + lang + "/libqpe.qm"; 535 tfn = qpeDir() + "/i18n/" + lang + "/libqpe.qm";
535 if ( trans->load( tfn ) ) 536 if ( trans->load( tfn ) )
536 installTranslator( trans ); 537 installTranslator( trans );
537 else 538 else
538 delete trans; 539 delete trans;
539 540
540 trans = new QTranslator( this ); 541 trans = new QTranslator( this );
541 tfn = qpeDir() + "/i18n/" + lang + "/" + d->appName + ".qm"; 542 tfn = qpeDir() + "/i18n/" + lang + "/" + d->appName + ".qm";
542 if ( trans->load( tfn ) ) 543 if ( trans->load( tfn ) )
543 installTranslator( trans ); 544 installTranslator( trans );
544 else 545 else
545 delete trans; 546 delete trans;
546 547
547 //###language/font hack; should look it up somewhere 548 //###language/font hack; should look it up somewhere
548#ifdef QWS 549#ifdef QWS
549 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 550 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
550 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 551 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
551 setFont( fn ); 552 setFont( fn );
552 } 553 }
553#endif 554#endif
554 } 555 }
555#endif 556#endif
556 557
557 applyStyle(); 558 applyStyle();
558 559
559 if ( type() == GuiServer ) { 560 if ( type() == GuiServer ) {
560 setVolume(); 561 setVolume();
561 } 562 }
562 563
563 installEventFilter( this ); 564 installEventFilter( this );
564 565
565 QPEMenuToolFocusManager::initialize(); 566 QPEMenuToolFocusManager::initialize();
566 567
567#ifdef QT_NO_QWS_CURSOR 568#ifdef QT_NO_QWS_CURSOR
568 // if we have no cursor, probably don't want tooltips 569 // if we have no cursor, probably don't want tooltips
569 QToolTip::setEnabled( FALSE ); 570 QToolTip::setEnabled( FALSE );
570#endif 571#endif
571} 572}
572 573
573static QPtrDict<void>* inputMethodDict = 0; 574static QPtrDict<void>* inputMethodDict = 0;
574static void createInputMethodDict() 575static void createInputMethodDict()
575{ 576{
576 if ( !inputMethodDict ) 577 if ( !inputMethodDict )
577 inputMethodDict = new QPtrDict<void>; 578 inputMethodDict = new QPtrDict<void>;
578} 579}
579 580
580/*! 581/*!
581 Returns the currently set hint to the system as to whether 582 Returns the currently set hint to the system as to whether
582 widget \a w has any use for text input methods. 583 widget \a w has any use for text input methods.
583 584
584 585
585 \sa setInputMethodHint() InputMethodHint 586 \sa setInputMethodHint() InputMethodHint
586*/ 587*/
587QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 588QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
588{ 589{
589 if ( inputMethodDict && w ) 590 if ( inputMethodDict && w )
590 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 591 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
591 return Normal; 592 return Normal;
592} 593}
593 594
594/*! 595/*!
595 \enum QPEApplication::InputMethodHint 596 \enum QPEApplication::InputMethodHint
596 597
597 \value Normal the application sometimes needs text input (the default). 598 \value Normal the application sometimes needs text input (the default).
598 \value AlwaysOff the application never needs text input. 599 \value AlwaysOff the application never needs text input.
599 \value AlwaysOn the application always needs text input. 600 \value AlwaysOn the application always needs text input.
600*/ 601*/
601 602
602/*! 603/*!
603 Hints to the system that widget \a w has use for text input methods 604 Hints to the system that widget \a w has use for text input methods
604 as specified by \a mode. 605 as specified by \a mode.
605 606
606 \sa inputMethodHint() InputMethodHint 607 \sa inputMethodHint() InputMethodHint
607*/ 608*/
608void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 609void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
609{ 610{
610 createInputMethodDict(); 611 createInputMethodDict();
611 if ( mode == Normal ) { 612 if ( mode == Normal ) {
612 inputMethodDict->remove 613 inputMethodDict->remove
613 ( w ); 614 ( w );
614 } 615 }
615 else { 616 else {
616 inputMethodDict->insert( w, ( void* ) mode ); 617 inputMethodDict->insert( w, ( void* ) mode );
617 } 618 }
618} 619}
619 620
620class HackDialog : public QDialog 621class HackDialog : public QDialog
621{ 622{
622public: 623public:
623 void acceptIt() { accept(); } 624 void acceptIt() { accept(); }
624 void rejectIt() { reject(); } 625 void rejectIt() { reject(); }
625}; 626};
626 627
627 628
628void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 629void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
629{ 630{
630 // specialised actions for certain widgets. May want to 631 // specialised actions for certain widgets. May want to
631 // add more stuff here. 632 // add more stuff here.
632 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 633 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
633 && activePopupWidget() ->parentWidget() 634 && activePopupWidget() ->parentWidget()
634 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 635 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
635 key = Qt::Key_Return; 636 key = Qt::Key_Return;
636 637
637 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 638 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
638 key = Qt::Key_Return; 639 key = Qt::Key_Return;
639 640
640#ifdef QWS 641#ifdef QWS
641 ke->simpleData.keycode = key; 642 ke->simpleData.keycode = key;
642#endif 643#endif
643} 644}
644 645
645class HackWidget : public QWidget 646class HackWidget : public QWidget
646{ 647{
647public: 648public:
648 bool needsOk() 649 bool needsOk()
649 { return ( getWState() & WState_Reserved1 ); } 650 { return ( getWState() & WState_Reserved1 ); }
650}; 651};
651 652
652/*! 653/*!
653 \internal 654 \internal
654*/ 655*/
655 656
656#ifdef QWS 657#ifdef QWS
657bool QPEApplication::qwsEventFilter( QWSEvent * e ) 658bool QPEApplication::qwsEventFilter( QWSEvent * e )
658{ 659{
659 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 660 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
660 if ( qApp->type() != QApplication::GuiServer ) { 661 if ( qApp->type() != QApplication::GuiServer ) {
661 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 662 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
662 e << d->appName; 663 e << d->appName;
663 } 664 }
664 d->notbusysent = TRUE; 665 d->notbusysent = TRUE;
665 } 666 }
666 if ( type() == GuiServer ) { 667 if ( type() == GuiServer ) {
667 switch ( e->type ) { 668 switch ( e->type ) {
668 case QWSEvent::Mouse: 669 case QWSEvent::Mouse:
669 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 670 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
670 emit clientMoused(); 671 emit clientMoused();
671 break; 672 break;
672 default: 673 default:
673 break; 674 break;
674 } 675 }
675 } 676 }
676 if ( e->type == QWSEvent::Key ) { 677 if ( e->type == QWSEvent::Key ) {
677 if ( d->kbgrabber == 1 ) 678 if ( d->kbgrabber == 1 )
678 return TRUE; 679 return TRUE;
679 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 680 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
680 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 681 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
681 // Use special "OK" key to press "OK" on top level widgets 682 // Use special "OK" key to press "OK" on top level widgets
682 QWidget * active = activeWindow(); 683 QWidget * active = activeWindow();
683 QWidget *popup = 0; 684 QWidget *popup = 0;
684 if ( active && active->isPopup() ) { 685 if ( active && active->isPopup() ) {
685 popup = active; 686 popup = active;
686 active = active->parentWidget(); 687 active = active->parentWidget();
687 } 688 }
688 if ( active && ( int ) active->winId() == ke->simpleData.window && 689 if ( active && ( int ) active->winId() == ke->simpleData.window &&
689 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 690 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
690 if ( ke->simpleData.is_press ) { 691 if ( ke->simpleData.is_press ) {
691 if ( popup ) 692 if ( popup )
692 popup->close(); 693 popup->close();
693 if ( active->inherits( "QDialog" ) ) { 694 if ( active->inherits( "QDialog" ) ) {
694 HackDialog * d = ( HackDialog * ) active; 695 HackDialog * d = ( HackDialog * ) active;
695 d->acceptIt(); 696 d->acceptIt();
696 return TRUE; 697 return TRUE;
697 } 698 }
698 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 699 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
699 QSignal s; 700 QSignal s;
700 s.connect( active, SLOT( accept() ) ); 701 s.connect( active, SLOT( accept() ) );
701 s.activate(); 702 s.activate();
702 } 703 }
703 else { 704 else {
704 // do the same as with the select key: Map to the default action of the widget: 705 // do the same as with the select key: Map to the default action of the widget:
705 mapToDefaultAction( ke, Qt::Key_Return ); 706 mapToDefaultAction( ke, Qt::Key_Return );
706 } 707 }
707 } 708 }
708 } 709 }
709 } else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 710 } else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
710 // Use special "select" key to do whatever default action a widget has 711 // Use special "select" key to do whatever default action a widget has
711 mapToDefaultAction( ke, Qt::Key_Space ); 712 mapToDefaultAction( ke, Qt::Key_Space );
712 } 713 }
713 else if ( ke->simpleData.keycode == Qt::Key_Escape && 714 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
714 ke->simpleData.is_press ) { 715 ke->simpleData.is_press ) {
715 // Escape key closes app if focus on toplevel 716 // Escape key closes app if focus on toplevel
716 QWidget * active = activeWindow(); 717 QWidget * active = activeWindow();
717 if ( active && active->testWFlags( WType_TopLevel ) && 718 if ( active && active->testWFlags( WType_TopLevel ) &&
718 ( int ) active->winId() == ke->simpleData.window && 719 ( int ) active->winId() == ke->simpleData.window &&
719 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 720 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
720 if ( active->inherits( "QDialog" ) ) { 721 if ( active->inherits( "QDialog" ) ) {
721 HackDialog * d = ( HackDialog * ) active; 722 HackDialog * d = ( HackDialog * ) active;
722 d->rejectIt(); 723 d->rejectIt();
723 return TRUE; 724 return TRUE;
724 } 725 }
725 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 726 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
726 active->close(); 727 active->close();
727 } 728 }
728 } 729 }
729 } 730 }
730 731
731#if QT_VERSION < 231 732#if QT_VERSION < 231
732 // Filter out the F4/Launcher key from apps 733 // Filter out the F4/Launcher key from apps
733 // ### The launcher key may not always be F4 on all devices 734 // ### The launcher key may not always be F4 on all devices
734 if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 ) 735 if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 )
735 return TRUE; 736 return TRUE;
736#endif 737#endif
737 738
738 } 739 }
739 if ( e->type == QWSEvent::Focus ) { 740 if ( e->type == QWSEvent::Focus ) {
740 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 741 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
741 QWidget* nfw = QWidget::find( e->window() ); 742 QWidget* nfw = QWidget::find( e->window() );
742 if ( !fe->simpleData.get_focus ) { 743 if ( !fe->simpleData.get_focus ) {
743 QWidget * active = activeWindow(); 744 QWidget * active = activeWindow();
744 while ( active && active->isPopup() ) { 745 while ( active && active->isPopup() ) {
745 active->close(); 746 active->close();
746 active = activeWindow(); 747 active = activeWindow();
747 } 748 }
748 if ( !nfw && d->kbgrabber == 2 ) { 749 if ( !nfw && d->kbgrabber == 2 ) {
749 ungrabKeyboard(); 750 ungrabKeyboard();
750 d->kbregrab = TRUE; // want kb back when we're active 751 d->kbregrab = TRUE; // want kb back when we're active
751 } 752 }
752 } 753 }
753 else { 754 else {
754 // make sure our modal widget is ALWAYS on top 755 // make sure our modal widget is ALWAYS on top
755 QWidget *topm = activeModalWidget(); 756 QWidget *topm = activeModalWidget();
756 if ( topm ) { 757 if ( topm ) {
757 topm->raise(); 758 topm->raise();
758 } 759 }
759 if ( d->kbregrab ) { 760 if ( d->kbregrab ) {
760 grabKeyboard(); 761 grabKeyboard();
761 d->kbregrab = FALSE; 762 d->kbregrab = FALSE;
762 } 763 }
763 } 764 }
764 if ( fe->simpleData.get_focus && inputMethodDict ) { 765 if ( fe->simpleData.get_focus && inputMethodDict ) {
765 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 766 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
766 if ( m == AlwaysOff ) 767 if ( m == AlwaysOff )
767 Global::hideInputMethod(); 768 Global::hideInputMethod();
768 if ( m == AlwaysOn ) 769 if ( m == AlwaysOn )
769 Global::showInputMethod(); 770 Global::showInputMethod();
770 } 771 }
771 } 772 }
772 return QApplication::qwsEventFilter( e ); 773 return QApplication::qwsEventFilter( e );
773} 774}
774#endif 775#endif
775 776
776/*! 777/*!
777 Destroys the QPEApplication. 778 Destroys the QPEApplication.
778*/ 779*/
779QPEApplication::~QPEApplication() 780QPEApplication::~QPEApplication()
780{ 781{
781 ungrabKeyboard(); 782 ungrabKeyboard();
782#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 783#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
783 // Need to delete QCopChannels early, since the display will 784 // Need to delete QCopChannels early, since the display will
784 // be gone by the time we get to ~QObject(). 785 // be gone by the time we get to ~QObject().
785 delete sysChannel; 786 delete sysChannel;
786 delete pidChannel; 787 delete pidChannel;
787#endif 788#endif
788 789
789 delete d; 790 delete d;
790} 791}
791 792
792/*! 793/*!
793 Returns <tt>$OPIEDIR/</tt>. 794 Returns <tt>$OPIEDIR/</tt>.
794*/ 795*/
795QString QPEApplication::qpeDir() 796QString QPEApplication::qpeDir()
796{ 797{
797 const char * base = getenv( "OPIEDIR" ); 798 const char * base = getenv( "OPIEDIR" );
798 if ( base ) 799 if ( base )
799 return QString( base ) + "/"; 800 return QString( base ) + "/";
800 801
801 return QString( "../" ); 802 return QString( "../" );
802} 803}
803 804
804/*! 805/*!
805 Returns the user's current Document directory. There is a trailing "/". 806 Returns the user's current Document directory. There is a trailing "/".
806*/ 807*/
807QString QPEApplication::documentDir() 808QString QPEApplication::documentDir()
808{ 809{
809 return QString( qpeDir() + "Documents"); 810 return QString( qpeDir() + "Documents");
810} 811}
811 812
812static int deforient = -1; 813static int deforient = -1;
813 814
814/*! 815/*!
815 \internal 816 \internal
816*/ 817*/
817int QPEApplication::defaultRotation() 818int QPEApplication::defaultRotation()
818{ 819{
819 if ( deforient < 0 ) { 820 if ( deforient < 0 ) {
820 QString d = getenv( "QWS_DISPLAY" ); 821 QString d = getenv( "QWS_DISPLAY" );
821 if ( d.contains( "Rot90" ) ) { 822 if ( d.contains( "Rot90" ) ) {
822 deforient = 90; 823 deforient = 90;
823 } 824 }
824 else if ( d.contains( "Rot180" ) ) { 825 else if ( d.contains( "Rot180" ) ) {
825 deforient = 180; 826 deforient = 180;
826 } 827 }
827 else if ( d.contains( "Rot270" ) ) { 828 else if ( d.contains( "Rot270" ) ) {
828 deforient = 270; 829 deforient = 270;
829 } 830 }
830 else { 831 else {
831 deforient = 0; 832 deforient = 0;
832 } 833 }
833 } 834 }
834 return deforient; 835 return deforient;
835} 836}
836 837
837/*! 838/*!
838 \internal 839 \internal