summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 6f2e43b..c7ef2b7 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -247,707 +247,706 @@ public:
247 QStringList::Iterator it; 247 QStringList::Iterator it;
248 for ( it = list.begin(); it != list.end(); ++it ) { 248 for ( it = list.begin(); it != list.end(); ++it ) {
249 TextCodecInterface *iface = 0; 249 TextCodecInterface *iface = 0;
250 QLibrary *lib = new QLibrary( path + "/" + *it ); 250 QLibrary *lib = new QLibrary( path + "/" + *it );
251 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 251 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
252 QValueList<int> mibs = iface->mibEnums(); 252 QValueList<int> mibs = iface->mibEnums();
253 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { 253 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) {
254 (void)iface->createForMib(*i); 254 (void)iface->createForMib(*i);
255 // ### it exists now; need to remember if we can delete it 255 // ### it exists now; need to remember if we can delete it
256 } 256 }
257 } 257 }
258 else { 258 else {
259 lib->unload(); 259 lib->unload();
260 delete lib; 260 delete lib;
261 } 261 }
262 } 262 }
263 } 263 }
264 264
265 void loadImageCodecs() 265 void loadImageCodecs()
266 { 266 {
267 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 267 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
268#ifdef Q_OS_MACX 268#ifdef Q_OS_MACX
269 QDir dir( path, "lib*.dylib" ); 269 QDir dir( path, "lib*.dylib" );
270#else 270#else
271 QDir dir( path, "lib*.so" ); 271 QDir dir( path, "lib*.so" );
272#endif 272#endif
273 QStringList list; 273 QStringList list;
274 if ( dir. exists ( )) 274 if ( dir. exists ( ))
275 list = dir.entryList(); 275 list = dir.entryList();
276 QStringList::Iterator it; 276 QStringList::Iterator it;
277 for ( it = list.begin(); it != list.end(); ++it ) { 277 for ( it = list.begin(); it != list.end(); ++it ) {
278 ImageCodecInterface *iface = 0; 278 ImageCodecInterface *iface = 0;
279 QLibrary *lib = new QLibrary( path + "/" + *it ); 279 QLibrary *lib = new QLibrary( path + "/" + *it );
280 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 280 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
281 QStringList formats = iface->keys(); 281 QStringList formats = iface->keys();
282 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { 282 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) {
283 (void)iface->installIOHandler(*i); 283 (void)iface->installIOHandler(*i);
284 // ### it exists now; need to remember if we can delete it 284 // ### it exists now; need to remember if we can delete it
285 } 285 }
286 } 286 }
287 else { 287 else {
288 lib->unload(); 288 lib->unload();
289 delete lib; 289 delete lib;
290 } 290 }
291 } 291 }
292 } 292 }
293}; 293};
294 294
295class ResourceMimeFactory : public QMimeSourceFactory 295class ResourceMimeFactory : public QMimeSourceFactory
296{ 296{
297public: 297public:
298 ResourceMimeFactory() : resImage( 0 ) 298 ResourceMimeFactory() : resImage( 0 )
299 { 299 {
300 setFilePath( Global::helpPath() ); 300 setFilePath( Global::helpPath() );
301 setExtensionType( "html", "text/html;charset=UTF-8" ); 301 setExtensionType( "html", "text/html;charset=UTF-8" );
302 } 302 }
303 ~ResourceMimeFactory() { 303 ~ResourceMimeFactory() {
304 delete resImage; 304 delete resImage;
305 } 305 }
306 306
307 const QMimeSource* data( const QString& abs_name ) const 307 const QMimeSource* data( const QString& abs_name ) const
308 { 308 {
309 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 309 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
310 if ( !r ) { 310 if ( !r ) {
311 int sl = abs_name.length(); 311 int sl = abs_name.length();
312 do { 312 do {
313 sl = abs_name.findRev( '/', sl - 1 ); 313 sl = abs_name.findRev( '/', sl - 1 );
314 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 314 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
315 int dot = name.findRev( '.' ); 315 int dot = name.findRev( '.' );
316 if ( dot >= 0 ) 316 if ( dot >= 0 )
317 name = name.left( dot ); 317 name = name.left( dot );
318 QImage img = Resource::loadImage( name ); 318 QImage img = Resource::loadImage( name );
319 if ( !img.isNull() ) { 319 if ( !img.isNull() ) {
320 delete resImage; 320 delete resImage;
321 resImage = new QImageDrag( img ); 321 resImage = new QImageDrag( img );
322 r = resImage; 322 r = resImage;
323 } 323 }
324 } 324 }
325 while ( !r && sl > 0 ); 325 while ( !r && sl > 0 );
326 } 326 }
327 return r; 327 return r;
328 } 328 }
329private: 329private:
330 mutable QImageDrag *resImage; 330 mutable QImageDrag *resImage;
331}; 331};
332 332
333static int& hack(int& i) 333static int& hack(int& i)
334{ 334{
335#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 335#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
336 // These should be created, but aren't in Qt 2.3.0 336 // These should be created, but aren't in Qt 2.3.0
337 (void)new QUtf8Codec; 337 (void)new QUtf8Codec;
338 (void)new QUtf16Codec; 338 (void)new QUtf16Codec;
339#endif 339#endif
340 return i; 340 return i;
341} 341}
342 342
343static int muted = 0; 343static int muted = 0;
344static int micMuted = 0; 344static int micMuted = 0;
345 345
346static void setVolume( int t = 0, int percent = -1 ) 346static void setVolume( int t = 0, int percent = -1 )
347{ 347{
348 switch ( t ) { 348 switch ( t ) {
349 case 0: { 349 case 0: {
350 Config cfg( "qpe" ); 350 Config cfg( "qpe" );
351 cfg.setGroup( "Volume" ); 351 cfg.setGroup( "Volume" );
352 if ( percent < 0 ) 352 if ( percent < 0 )
353 percent = cfg.readNumEntry( "VolumePercent", 50 ); 353 percent = cfg.readNumEntry( "VolumePercent", 50 );
354#ifndef QT_NO_SOUND 354#ifndef QT_NO_SOUND
355 int fd = 0; 355 int fd = 0;
356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
357 int vol = muted ? 0 : percent; 357 int vol = muted ? 0 : percent;
358 // set both channels to same volume 358 // set both channels to same volume
359 vol |= vol << 8; 359 vol |= vol << 8;
360 ioctl( fd, MIXER_WRITE( 0 ), &vol ); 360 ioctl( fd, MIXER_WRITE( 0 ), &vol );
361 ::close( fd ); 361 ::close( fd );
362 } 362 }
363#endif 363#endif
364 } 364 }
365 break; 365 break;
366 } 366 }
367} 367}
368 368
369static void setMic( int t = 0, int percent = -1 ) 369static void setMic( int t = 0, int percent = -1 )
370{ 370{
371 switch ( t ) { 371 switch ( t ) {
372 case 0: { 372 case 0: {
373 Config cfg( "qpe" ); 373 Config cfg( "qpe" );
374 cfg.setGroup( "Volume" ); 374 cfg.setGroup( "Volume" );
375 if ( percent < 0 ) 375 if ( percent < 0 )
376 percent = cfg.readNumEntry( "Mic", 50 ); 376 percent = cfg.readNumEntry( "Mic", 50 );
377 377
378#ifndef QT_NO_SOUND 378#ifndef QT_NO_SOUND
379 int fd = 0; 379 int fd = 0;
380 int mic = micMuted ? 0 : percent; 380 int mic = micMuted ? 0 : percent;
381 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 381 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
382 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 382 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
383 ::close( fd ); 383 ::close( fd );
384 } 384 }
385#endif 385#endif
386 } 386 }
387 break; 387 break;
388 } 388 }
389} 389}
390 390
391 391
392static void setBass( int t = 0, int percent = -1 ) 392static void setBass( int t = 0, int percent = -1 )
393{ 393{
394 switch ( t ) { 394 switch ( t ) {
395 case 0: { 395 case 0: {
396 Config cfg( "qpe" ); 396 Config cfg( "qpe" );
397 cfg.setGroup( "Volume" ); 397 cfg.setGroup( "Volume" );
398 if ( percent < 0 ) 398 if ( percent < 0 )
399 percent = cfg.readNumEntry( "BassPercent", 50 ); 399 percent = cfg.readNumEntry( "BassPercent", 50 );
400 400
401#ifndef QT_NO_SOUND 401#ifndef QT_NO_SOUND
402 int fd = 0; 402 int fd = 0;
403 int bass = percent; 403 int bass = percent;
404 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 404 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
405 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass ); 405 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass );
406 ::close( fd ); 406 ::close( fd );
407 } 407 }
408#endif 408#endif
409 } 409 }
410 break; 410 break;
411 } 411 }
412} 412}
413 413
414 414
415static void setTreble( int t = 0, int percent = -1 ) 415static void setTreble( int t = 0, int percent = -1 )
416{ 416{
417 switch ( t ) { 417 switch ( t ) {
418 case 0: { 418 case 0: {
419 Config cfg( "qpe" ); 419 Config cfg( "qpe" );
420 cfg.setGroup( "Volume" ); 420 cfg.setGroup( "Volume" );
421 if ( percent < 0 ) 421 if ( percent < 0 )
422 percent = cfg.readNumEntry( "TreblePercent", 50 ); 422 percent = cfg.readNumEntry( "TreblePercent", 50 );
423 423
424#ifndef QT_NO_SOUND 424#ifndef QT_NO_SOUND
425 int fd = 0; 425 int fd = 0;
426 int treble = percent; 426 int treble = percent;
427 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 427 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
428 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble ); 428 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble );
429 ::close( fd ); 429 ::close( fd );
430 } 430 }
431#endif 431#endif
432 } 432 }
433 break; 433 break;
434 } 434 }
435} 435}
436 436
437 437
438/** 438/**
439 \class QPEApplication 439 \class QPEApplication
440 \brief The QPEApplication class implements various system services 440 \brief The QPEApplication class implements various system services
441 that are available to all Qtopia applications. 441 that are available to all Qtopia applications.
442 442
443 Simply by using QPEApplication instead of QApplication, a standard Qt 443 Simply by using QPEApplication instead of QApplication, a standard Qt
444 application becomes a Qtopia application. It automatically follows 444 application becomes a Qtopia application. It automatically follows
445 style changes, quits and raises, and in the 445 style changes, quits and raises, and in the
446 case of \link docwidget.html document-oriented\endlink applications, 446 case of \link docwidget.html document-oriented\endlink applications,
447 changes the currently displayed document in response to the environment. 447 changes the currently displayed document in response to the environment.
448 448
449 To create a \link docwidget.html document-oriented\endlink 449 To create a \link docwidget.html document-oriented\endlink
450 application use showMainDocumentWidget(); to create a 450 application use showMainDocumentWidget(); to create a
451 non-document-oriented application use showMainWidget(). The 451 non-document-oriented application use showMainWidget(). The
452 keepRunning() function indicates whether the application will 452 keepRunning() function indicates whether the application will
453 continue running after it's processed the last \link qcop.html 453 continue running after it's processed the last \link qcop.html
454 QCop\endlink message. This can be changed using setKeepRunning(). 454 QCop\endlink message. This can be changed using setKeepRunning().
455 455
456 A variety of signals are emitted when certain events occur, for 456 A variety of signals are emitted when certain events occur, for
457 example, timeChanged(), clockChanged(), weekChanged(), 457 example, timeChanged(), clockChanged(), weekChanged(),
458 dateFormatChanged() and volumeChanged(). If the application receives 458 dateFormatChanged() and volumeChanged(). If the application receives
459 a \link qcop.html QCop\endlink message on the application's 459 a \link qcop.html QCop\endlink message on the application's
460 QPE/Application/\e{appname} channel, the appMessage() signal is 460 QPE/Application/\e{appname} channel, the appMessage() signal is
461 emitted. There are also flush() and reload() signals, which 461 emitted. There are also flush() and reload() signals, which
462 are emitted when synching begins and ends respectively - upon these 462 are emitted when synching begins and ends respectively - upon these
463 signals, the application should save and reload any data 463 signals, the application should save and reload any data
464 files that are involved in synching. Most of these signals will initially 464 files that are involved in synching. Most of these signals will initially
465 be received and unfiltered through the appMessage() signal. 465 be received and unfiltered through the appMessage() signal.
466 466
467 This class also provides a set of useful static functions. The 467 This class also provides a set of useful static functions. The
468 qpeDir() and documentDir() functions return the respective paths. 468 qpeDir() and documentDir() functions return the respective paths.
469 The grabKeyboard() and ungrabKeyboard() functions are used to 469 The grabKeyboard() and ungrabKeyboard() functions are used to
470 control whether the application takes control of the device's 470 control whether the application takes control of the device's
471 physical buttons (e.g. application launch keys). The stylus' mode of 471 physical buttons (e.g. application launch keys). The stylus' mode of
472 operation is set with setStylusOperation() and retrieved with 472 operation is set with setStylusOperation() and retrieved with
473 stylusOperation(). There are also setInputMethodHint() and 473 stylusOperation(). There are also setInputMethodHint() and
474 inputMethodHint() functions. 474 inputMethodHint() functions.
475 475
476 \ingroup qtopiaemb 476 \ingroup qtopiaemb
477*/ 477*/
478 478
479/*! 479/*!
480 \fn void QPEApplication::clientMoused() 480 \fn void QPEApplication::clientMoused()
481 481
482 \internal 482 \internal
483*/ 483*/
484 484
485/*! 485/*!
486 \fn void QPEApplication::timeChanged(); 486 \fn void QPEApplication::timeChanged();
487 This signal is emitted when the time changes outside the normal 487 This signal is emitted when the time changes outside the normal
488 passage of time, i.e. if the time is set backwards or forwards. 488 passage of time, i.e. if the time is set backwards or forwards.
489*/ 489*/
490 490
491/*! 491/*!
492 \fn void QPEApplication::clockChanged( bool ampm ); 492 \fn void QPEApplication::clockChanged( bool ampm );
493 493
494 This signal is emitted when the user changes the clock's style. If 494 This signal is emitted when the user changes the clock's style. If
495 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise, 495 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise,
496 they want a 24-hour clock. 496 they want a 24-hour clock.
497*/ 497*/
498 498
499/*! 499/*!
500 \fn void QPEApplication::volumeChanged( bool muted ) 500 \fn void QPEApplication::volumeChanged( bool muted )
501 501
502 This signal is emitted whenever the mute state is changed. If \a 502 This signal is emitted whenever the mute state is changed. If \a
503 muted is TRUE, then sound output has been muted. 503 muted is TRUE, then sound output has been muted.
504*/ 504*/
505 505
506/*! 506/*!
507 \fn void QPEApplication::weekChanged( bool startOnMonday ) 507 \fn void QPEApplication::weekChanged( bool startOnMonday )
508 508
509 This signal is emitted if the week start day is changed. If \a 509 This signal is emitted if the week start day is changed. If \a
510 startOnMonday is TRUE then the first day of the week is Monday; if 510 startOnMonday is TRUE then the first day of the week is Monday; if
511 \a startOnMonday is FALSE then the first day of the week is 511 \a startOnMonday is FALSE then the first day of the week is
512 Sunday. 512 Sunday.
513*/ 513*/
514 514
515/*! 515/*!
516 \fn void QPEApplication::dateFormatChanged(DateFormat) 516 \fn void QPEApplication::dateFormatChanged(DateFormat)
517 517
518 This signal is emitted whenever the date format is changed. 518 This signal is emitted whenever the date format is changed.
519*/ 519*/
520 520
521/*! 521/*!
522 \fn void QPEApplication::flush() 522 \fn void QPEApplication::flush()
523 523
524 ### 524 ###
525*/ 525*/
526 526
527/*! 527/*!
528 \fn void QPEApplication::reload() 528 \fn void QPEApplication::reload()
529 529
530*/ 530*/
531 531
532 532
533 533
534void QPEApplication::processQCopFile() 534void QPEApplication::processQCopFile()
535{ 535{
536 QString qcopfn("/tmp/qcop-msg-"); 536 QString qcopfn("/tmp/qcop-msg-");
537 qcopfn += d->appName; // append command name 537 qcopfn += d->appName; // append command name
538 538
539 QFile f(qcopfn); 539 QFile f(qcopfn);
540 if ( f.open(IO_ReadWrite) ) { 540 if ( f.open(IO_ReadWrite) ) {
541#ifndef Q_OS_WIN32 541#ifndef Q_OS_WIN32
542 flock(f.handle(), LOCK_EX); 542 flock(f.handle(), LOCK_EX);
543#endif 543#endif
544 QDataStream ds(&f); 544 QDataStream ds(&f);
545 QCString channel, message; 545 QCString channel, message;
546 QByteArray data; 546 QByteArray data;
547 while(!ds.atEnd()) { 547 while(!ds.atEnd()) {
548 ds >> channel >> message >> data; 548 ds >> channel >> message >> data;
549 d->enqueueQCop(channel,message,data); 549 d->enqueueQCop(channel,message,data);
550 } 550 }
551 ::ftruncate(f.handle(), 0); 551 ::ftruncate(f.handle(), 0);
552#ifndef Q_OS_WIN32 552#ifndef Q_OS_WIN32
553 f.flush(); 553 f.flush();
554 flock(f.handle(), LOCK_UN); 554 flock(f.handle(), LOCK_UN);
555#endif 555#endif
556 } 556 }
557#endif 557#endif
558} 558}
559 559
560 560
561/*! 561/*!
562 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 562 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
563 563
564 This signal is emitted when a message is received on this 564 This signal is emitted when a message is received on this
565 application's QPE/Application/<i>appname</i> \link qcop.html 565 application's QPE/Application/<i>appname</i> \link qcop.html
566 QCop\endlink channel. 566 QCop\endlink channel.
567 567
568 The slot to which you connect this signal uses \a msg and \a data 568 The slot to which you connect this signal uses \a msg and \a data
569 in the following way: 569 in the following way:
570 570
571\code 571\code
572 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 572 void MyWidget::receive( const QCString& msg, const QByteArray& data )
573 { 573 {
574 QDataStream stream( data, IO_ReadOnly ); 574 QDataStream stream( data, IO_ReadOnly );
575 if ( msg == "someMessage(int,int,int)" ) { 575 if ( msg == "someMessage(int,int,int)" ) {
576 int a,b,c; 576 int a,b,c;
577 stream >> a >> b >> c; 577 stream >> a >> b >> c;
578 ... 578 ...
579 } else if ( msg == "otherMessage(QString)" ) { 579 } else if ( msg == "otherMessage(QString)" ) {
580 ... 580 ...
581 } 581 }
582 } 582 }
583\endcode 583\endcode
584 584
585 \sa qcop.html 585 \sa qcop.html
586 Note that messages received here may be processed by qpe application 586 Note that messages received here may be processed by qpe application
587 and emitted as signals, such as flush() and reload(). 587 and emitted as signals, such as flush() and reload().
588*/ 588*/
589 589
590/*! 590/*!
591 Constructs a QPEApplication just as you would construct 591 Constructs a QPEApplication just as you would construct
592 a QApplication, passing \a argc, \a argv, and \a t. 592 a QApplication, passing \a argc, \a argv, and \a t.
593 593
594 For applications, \a t should be the default, GuiClient. Only 594 For applications, \a t should be the default, GuiClient. Only
595 the Qtopia server passes GuiServer. 595 the Qtopia server passes GuiServer.
596*/ 596*/
597QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 597QPEApplication::QPEApplication( int & argc, char **argv, Type t )
598 : QApplication( hack(argc), argv, t ), pidChannel( 0 ) 598 : QApplication( hack(argc), argv, t ), pidChannel( 0 )
599{ 599{
600 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices. 600 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices.
601 601
602 d = new QPEApplicationData; 602 d = new QPEApplicationData;
603 d->loadTextCodecs(); 603 d->loadTextCodecs();
604 d->loadImageCodecs(); 604 d->loadImageCodecs();
605 int dw = desktop() ->width(); 605 int dw = desktop() ->width();
606 606
607 if ( dw < 200 ) { 607 if ( dw < 200 ) {
608 setFont( QFont( "vera", 8 ) ); 608 setFont( QFont( "vera", 8 ) );
609 AppLnk::setSmallIconSize( 10 ); 609 AppLnk::setSmallIconSize( 10 );
610 AppLnk::setBigIconSize( 28 ); 610 AppLnk::setBigIconSize( 28 );
611 } 611 }
612#if defined(OPIE_HIGH_RES_SMALL_PHY) 612#if defined(OPIE_HIGH_RES_SMALL_PHY)
613 else if ( dw > 600 ) { 613 else if ( dw > 600 ) {
614 setFont( QFont( "vera", 16 ) ); 614 setFont( QFont( "vera", 16 ) );
615 AppLnk::setSmallIconSize( 24 ); 615 AppLnk::setSmallIconSize( 24 );
616 AppLnk::setBigIconSize( 48 ); 616 AppLnk::setBigIconSize( 48 );
617 } 617 }
618#endif 618#endif
619 else if ( dw > 200 ) { 619 else if ( dw > 200 ) {
620 setFont( QFont( "vera", 10 ) ); 620 setFont( QFont( "vera", 10 ) );
621 AppLnk::setSmallIconSize( 14 ); 621 AppLnk::setSmallIconSize( 14 );
622 AppLnk::setBigIconSize( 32 ); 622 AppLnk::setBigIconSize( 32 );
623 } 623 }
624 624
625 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 625 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
626 626
627 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 627 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
628 628
629 629
630 sysChannel = new QCopChannel( "QPE/System", this ); 630 sysChannel = new QCopChannel( "QPE/System", this );
631 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 631 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
632 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); 632 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) );
633 633
634/* COde now in initapp */ 634/* COde now in initapp */
635#if 0 635#if 0
636#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 636#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
637 637
638 QString qcopfn( "/tmp/qcop-msg-" ); 638 QString qcopfn( "/tmp/qcop-msg-" );
639 qcopfn += QString( argv[ 0 ] ); // append command name 639 qcopfn += QString( argv[ 0 ] ); // append command name
640 640
641 QFile f( qcopfn ); 641 QFile f( qcopfn );
642 if ( f.open( IO_ReadOnly ) ) { 642 if ( f.open( IO_ReadOnly ) ) {
643 flock( f.handle(), LOCK_EX ); 643 flock( f.handle(), LOCK_EX );
644 } 644 }
645 645
646 646
647 647
648 QCString channel = QCString( argv[ 0 ] ); 648 QCString channel = QCString( argv[ 0 ] );
649 channel.replace( QRegExp( ".*/" ), "" ); 649 channel.replace( QRegExp( ".*/" ), "" );
650 d->appName = channel; 650 d->appName = channel;
651 channel = "QPE/Application/" + channel; 651 channel = "QPE/Application/" + channel;
652 pidChannel = new QCopChannel( channel, this ); 652 pidChannel = new QCopChannel( channel, this );
653 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 653 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
654 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); 654 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) );
655 655
656 if ( f.isOpen() ) { 656 if ( f.isOpen() ) {
657 d->keep_running = FALSE; 657 d->keep_running = FALSE;
658 QDataStream ds( &f ); 658 QDataStream ds( &f );
659 QCString channel, message; 659 QCString channel, message;
660 QByteArray data; 660 QByteArray data;
661 while ( !ds.atEnd() ) { 661 while ( !ds.atEnd() ) {
662 ds >> channel >> message >> data; 662 ds >> channel >> message >> data;
663 d->enqueueQCop( channel, message, data ); 663 d->enqueueQCop( channel, message, data );
664 } 664 }
665 665
666 flock( f.handle(), LOCK_UN ); 666 flock( f.handle(), LOCK_UN );
667 f.close(); 667 f.close();
668 f.remove(); 668 f.remove();
669 } 669 }
670 670
671 for ( int a = 0; a < argc; a++ ) { 671 for ( int a = 0; a < argc; a++ ) {
672 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 672 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
673 argv[ a ] = argv[ a + 1 ]; 673 argv[ a ] = argv[ a + 1 ];
674 a++; 674 a++;
675 d->preloaded = TRUE; 675 d->preloaded = TRUE;
676 argc -= 1; 676 argc -= 1;
677 } 677 }
678 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 678 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
679 argv[ a ] = argv[ a + 1 ]; 679 argv[ a ] = argv[ a + 1 ];
680 a++; 680 a++;
681 d->preloaded = TRUE; 681 d->preloaded = TRUE;
682 d->forceshow = TRUE; 682 d->forceshow = TRUE;
683 argc -= 1; 683 argc -= 1;
684 } 684 }
685 } 685 }
686 686
687 /* overide stored arguments */ 687 /* overide stored arguments */
688 setArgs( argc, argv ); 688 setArgs( argc, argv );
689 689
690#endif 690#endif
691#else 691#else
692 initApp( argc, argv ); 692 initApp( argc, argv );
693#endif 693#endif
694 // qwsSetDecoration( new QPEDecoration() ); 694 // qwsSetDecoration( new QPEDecoration() );
695 695
696#ifndef QT_NO_TRANSLATION 696#ifndef QT_NO_TRANSLATION
697 697
698 d->langs = Global::languageList(); 698 d->langs = Global::languageList();
699 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) { 699 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) {
700 QString lang = *it; 700 QString lang = *it;
701 701
702 installTranslation( lang + "/libopie.qm"); 702 installTranslation( lang + "/libopie.qm");
703 installTranslation( lang + "/libqpe.qm" ); 703 installTranslation( lang + "/libqpe.qm" );
704 installTranslation( lang + "/" + d->appName + ".qm" ); 704 installTranslation( lang + "/" + d->appName + ".qm" );
705 705
706 706
707 //###language/font hack; should look it up somewhere 707 //###language/font hack; should look it up somewhere
708#ifdef QWS 708#ifdef QWS
709 709
710 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 710 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
711 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 711 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
712 setFont( fn ); 712 setFont( fn );
713 } 713 }
714#endif 714#endif
715 } 715 }
716#endif 716#endif
717 717
718 applyStyle(); 718 applyStyle();
719 719
720 if ( type() == GuiServer ) { 720 if ( type() == GuiServer ) {
721 setVolume(); 721 setVolume();
722 } 722 }
723 723
724 installEventFilter( this ); 724 installEventFilter( this );
725 725
726 QPEMenuToolFocusManager::initialize(); 726 QPEMenuToolFocusManager::initialize();
727 727
728#ifdef QT_NO_QWS_CURSOR 728#ifdef QT_NO_QWS_CURSOR
729 // if we have no cursor, probably don't want tooltips 729 // if we have no cursor, probably don't want tooltips
730 QToolTip::setEnabled( FALSE ); 730 QToolTip::setEnabled( FALSE );
731#endif 731#endif
732} 732}
733 733
734 734
735#ifdef QTOPIA_INTERNAL_INITAPP 735#ifdef QTOPIA_INTERNAL_INITAPP
736void QPEApplication::initApp( int argc, char **argv ) 736void QPEApplication::initApp( int argc, char **argv )
737{ 737{
738 bool initial = pidChannel; // was set to 0 in the initializer
739 delete pidChannel; 738 delete pidChannel;
740 d->keep_running = TRUE; 739 d->keep_running = TRUE;
741 d->preloaded = FALSE; 740 d->preloaded = FALSE;
742 d->forceshow = FALSE; 741 d->forceshow = FALSE;
743 742
744 QCString channel = QCString(argv[0]); 743 QCString channel = QCString(argv[0]);
745 744
746 channel.replace(QRegExp(".*/"),""); 745 channel.replace(QRegExp(".*/"),"");
747 d->appName = channel; 746 d->appName = channel;
748 747
749 #if QT_VERSION > 235 748 #if QT_VERSION > 235
750 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6 749 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6
751 #endif 750 #endif
752 751
753 channel = "QPE/Application/" + channel; 752 channel = "QPE/Application/" + channel;
754 pidChannel = new QCopChannel( channel, this); 753 pidChannel = new QCopChannel( channel, this);
755 connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)), 754 connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)),
756 this, SLOT(pidMessage(const QCString &, const QByteArray &))); 755 this, SLOT(pidMessage(const QCString &, const QByteArray &)));
757 756
758 if (!initial) { 757
759 processQCopFile(); 758
760 d->keep_running = d->qcopq.isEmpty(); 759 processQCopFile();
761 } 760 d->keep_running = d->qcopq.isEmpty();
762 761
763 for (int a=0; a<argc; a++) { 762 for (int a=0; a<argc; a++) {
764 if ( qstrcmp(argv[a],"-preload")==0 ) { 763 if ( qstrcmp(argv[a],"-preload")==0 ) {
765 argv[a] = argv[a+1]; 764 argv[a] = argv[a+1];
766 a++; 765 a++;
767 d->preloaded = TRUE; 766 d->preloaded = TRUE;
768 argc-=1; 767 argc-=1;
769 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) { 768 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
770 argv[a] = argv[a+1]; 769 argv[a] = argv[a+1];
771 a++; 770 a++;
772 d->preloaded = TRUE; 771 d->preloaded = TRUE;
773 d->forceshow = TRUE; 772 d->forceshow = TRUE;
774 argc-=1; 773 argc-=1;
775 } 774 }
776 } 775 }
777 776
778 /* overide stored arguments */ 777 /* overide stored arguments */
779 setArgs(argc, argv); 778 setArgs(argc, argv);
780 779
781 /* install translation here */ 780 /* install translation here */
782 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) 781 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it )
783 installTranslation( (*it) + "/" + d->appName + ".qm" ); 782 installTranslation( (*it) + "/" + d->appName + ".qm" );
784} 783}
785#endif 784#endif
786 785
787 786
788static QPtrDict<void>* inputMethodDict = 0; 787static QPtrDict<void>* inputMethodDict = 0;
789static void createInputMethodDict() 788static void createInputMethodDict()
790{ 789{
791 if ( !inputMethodDict ) 790 if ( !inputMethodDict )
792 inputMethodDict = new QPtrDict<void>; 791 inputMethodDict = new QPtrDict<void>;
793} 792}
794 793
795/*! 794/*!
796 Returns the currently set hint to the system as to whether 795 Returns the currently set hint to the system as to whether
797 widget \a w has any use for text input methods. 796 widget \a w has any use for text input methods.
798 797
799 798
800 \sa setInputMethodHint() InputMethodHint 799 \sa setInputMethodHint() InputMethodHint
801*/ 800*/
802QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 801QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
803{ 802{
804 if ( inputMethodDict && w ) 803 if ( inputMethodDict && w )
805 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 804 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
806 return Normal; 805 return Normal;
807} 806}
808 807
809/*! 808/*!
810 \enum QPEApplication::InputMethodHint 809 \enum QPEApplication::InputMethodHint
811 810
812 \value Normal the application sometimes needs text input (the default). 811 \value Normal the application sometimes needs text input (the default).
813 \value AlwaysOff the application never needs text input. 812 \value AlwaysOff the application never needs text input.
814 \value AlwaysOn the application always needs text input. 813 \value AlwaysOn the application always needs text input.
815*/ 814*/
816 815
817/*! 816/*!
818 Hints to the system that widget \a w has use for text input methods 817 Hints to the system that widget \a w has use for text input methods
819 as specified by \a mode. 818 as specified by \a mode.
820 819
821 \sa inputMethodHint() InputMethodHint 820 \sa inputMethodHint() InputMethodHint
822*/ 821*/
823void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 822void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
824{ 823{
825 createInputMethodDict(); 824 createInputMethodDict();
826 if ( mode == Normal ) { 825 if ( mode == Normal ) {
827 inputMethodDict->remove 826 inputMethodDict->remove
828 ( w ); 827 ( w );
829 } 828 }
830 else { 829 else {
831 inputMethodDict->insert( w, ( void* ) mode ); 830 inputMethodDict->insert( w, ( void* ) mode );
832 } 831 }
833} 832}
834 833
835class HackDialog : public QDialog 834class HackDialog : public QDialog
836{ 835{
837public: 836public:
838 void acceptIt() 837 void acceptIt()
839 { 838 {
840 accept(); 839 accept();
841 } 840 }
842 void rejectIt() 841 void rejectIt()
843 { 842 {
844 reject(); 843 reject();
845 } 844 }
846}; 845};
847 846
848 847
849void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 848void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
850{ 849{
851 // specialised actions for certain widgets. May want to 850 // specialised actions for certain widgets. May want to
852 // add more stuff here. 851 // add more stuff here.
853 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 852 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
854 && activePopupWidget() ->parentWidget() 853 && activePopupWidget() ->parentWidget()
855 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 854 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
856 key = Qt::Key_Return; 855 key = Qt::Key_Return;
857 856
858 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 857 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
859 key = Qt::Key_Return; 858 key = Qt::Key_Return;
860 859
861#ifdef QWS 860#ifdef QWS
862 861
863 ke->simpleData.keycode = key; 862 ke->simpleData.keycode = key;
864#endif 863#endif
865} 864}
866 865
867class HackWidget : public QWidget 866class HackWidget : public QWidget
868{ 867{
869public: 868public:
870 bool needsOk() 869 bool needsOk()
871 { 870 {
872 return ( getWState() & WState_Reserved1 ); 871 return ( getWState() & WState_Reserved1 );
873 } 872 }
874}; 873};
875 874
876/*! 875/*!
877 \internal 876 \internal
878*/ 877*/
879 878
880#ifdef QWS 879#ifdef QWS
881bool QPEApplication::qwsEventFilter( QWSEvent * e ) 880bool QPEApplication::qwsEventFilter( QWSEvent * e )
882{ 881{
883 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 882 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
884 if ( qApp->type() != QApplication::GuiServer ) { 883 if ( qApp->type() != QApplication::GuiServer ) {
885 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 884 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
886 e << d->appName; 885 e << d->appName;
887 } 886 }
888 d->notbusysent = TRUE; 887 d->notbusysent = TRUE;
889 } 888 }
890 if ( type() == GuiServer ) { 889 if ( type() == GuiServer ) {
891 switch ( e->type ) { 890 switch ( e->type ) {
892 case QWSEvent::Mouse: 891 case QWSEvent::Mouse:
893 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 892 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
894 emit clientMoused(); 893 emit clientMoused();
895 break; 894 break;
896 default: 895 default:
897 break; 896 break;
898 } 897 }
899 } 898 }
900 if ( e->type == QWSEvent::Key ) { 899 if ( e->type == QWSEvent::Key ) {
901 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 900 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
902 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 901 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
903 // Use special "OK" key to press "OK" on top level widgets 902 // Use special "OK" key to press "OK" on top level widgets
904 QWidget * active = activeWindow(); 903 QWidget * active = activeWindow();
905 QWidget *popup = 0; 904 QWidget *popup = 0;
906 if ( active && active->isPopup() ) { 905 if ( active && active->isPopup() ) {
907 popup = active; 906 popup = active;
908 active = active->parentWidget(); 907 active = active->parentWidget();
909 } 908 }
910 if ( active && ( int ) active->winId() == ke->simpleData.window && 909 if ( active && ( int ) active->winId() == ke->simpleData.window &&
911 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 910 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
912 if ( ke->simpleData.is_press ) { 911 if ( ke->simpleData.is_press ) {
913 if ( popup ) 912 if ( popup )
914 popup->close(); 913 popup->close();
915 if ( active->inherits( "QDialog" ) ) { 914 if ( active->inherits( "QDialog" ) ) {
916 HackDialog * d = ( HackDialog * ) active; 915 HackDialog * d = ( HackDialog * ) active;
917 d->acceptIt(); 916 d->acceptIt();
918 return TRUE; 917 return TRUE;
919 } 918 }
920 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 919 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
921 QSignal s; 920 QSignal s;
922 s.connect( active, SLOT( accept() ) ); 921 s.connect( active, SLOT( accept() ) );
923 s.activate(); 922 s.activate();
924 } 923 }
925 else { 924 else {
926 // do the same as with the select key: Map to the default action of the widget: 925 // do the same as with the select key: Map to the default action of the widget:
927 mapToDefaultAction( ke, Qt::Key_Return ); 926 mapToDefaultAction( ke, Qt::Key_Return );
928 } 927 }
929 } 928 }
930 } 929 }
931 } 930 }
932 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 931 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
933 // Use special "select" key to do whatever default action a widget has 932 // Use special "select" key to do whatever default action a widget has
934 mapToDefaultAction( ke, Qt::Key_Space ); 933 mapToDefaultAction( ke, Qt::Key_Space );
935 } 934 }
936 else if ( ke->simpleData.keycode == Qt::Key_Escape && 935 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
937 ke->simpleData.is_press ) { 936 ke->simpleData.is_press ) {
938 // Escape key closes app if focus on toplevel 937 // Escape key closes app if focus on toplevel
939 QWidget * active = activeWindow(); 938 QWidget * active = activeWindow();
940 if ( active && active->testWFlags( WType_TopLevel ) && 939 if ( active && active->testWFlags( WType_TopLevel ) &&
941 ( int ) active->winId() == ke->simpleData.window && 940 ( int ) active->winId() == ke->simpleData.window &&
942 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 941 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
943 if ( active->inherits( "QDialog" ) ) { 942 if ( active->inherits( "QDialog" ) ) {
944 HackDialog * d = ( HackDialog * ) active; 943 HackDialog * d = ( HackDialog * ) active;
945 d->rejectIt(); 944 d->rejectIt();
946 return TRUE; 945 return TRUE;
947 } 946 }
948 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 947 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
949 active->close(); 948 active->close();
950 } 949 }
951 } 950 }
952 } 951 }
953 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { 952 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) {
@@ -1382,406 +1381,406 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data
1382 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1381 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1383 setTreble(); 1382 setTreble();
1384 } else if ( msg == "getMarkedText()" ) { 1383 } else if ( msg == "getMarkedText()" ) {
1385 if ( type() == GuiServer ) { 1384 if ( type() == GuiServer ) {
1386 const ushort unicode = 'C'-'@'; 1385 const ushort unicode = 'C'-'@';
1387 const int scan = Key_C; 1386 const int scan = Key_C;
1388 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); 1387 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
1389 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); 1388 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
1390 } 1389 }
1391 } else if ( msg == "newChannel(QString)") { 1390 } else if ( msg == "newChannel(QString)") {
1392 QString myChannel = "QPE/Application/" + d->appName; 1391 QString myChannel = "QPE/Application/" + d->appName;
1393 QString channel; 1392 QString channel;
1394 stream >> channel; 1393 stream >> channel;
1395 if (channel == myChannel) { 1394 if (channel == myChannel) {
1396 processQCopFile(); 1395 processQCopFile();
1397 d->sendQCopQ(); 1396 d->sendQCopQ();
1398 } 1397 }
1399 } 1398 }
1400 1399
1401 1400
1402#endif 1401#endif
1403} 1402}
1404 1403
1405 1404
1406 1405
1407 1406
1408 1407
1409/*! 1408/*!
1410 \internal 1409 \internal
1411*/ 1410*/
1412bool QPEApplication::raiseAppropriateWindow() 1411bool QPEApplication::raiseAppropriateWindow()
1413{ 1412{
1414 bool r=FALSE; 1413 bool r=FALSE;
1415 1414
1416 // 1. Raise the main widget 1415 // 1. Raise the main widget
1417 QWidget *top = d->qpe_main_widget; 1416 QWidget *top = d->qpe_main_widget;
1418 if ( !top ) top = mainWidget(); 1417 if ( !top ) top = mainWidget();
1419 1418
1420 if ( top && d->keep_running ) { 1419 if ( top && d->keep_running ) {
1421 if ( top->isVisible() ) 1420 if ( top->isVisible() )
1422 r = TRUE; 1421 r = TRUE;
1423 else if (d->preloaded) { 1422 else if (d->preloaded) {
1424 // We are preloaded and not visible.. pretend we just started.. 1423 // We are preloaded and not visible.. pretend we just started..
1425#ifndef QT_NO_COP 1424#ifndef QT_NO_COP
1426 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1425 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1427 e << d->appName; 1426 e << d->appName;
1428#endif 1427#endif
1429 } 1428 }
1430 1429
1431 d->show_mx(top,d->nomaximize, d->appName); 1430 d->show_mx(top,d->nomaximize, d->appName);
1432 top->raise(); 1431 top->raise();
1433 } 1432 }
1434 1433
1435 QWidget *topm = activeModalWidget(); 1434 QWidget *topm = activeModalWidget();
1436 1435
1437 // 2. Raise any parentless widgets (except top and topm, as they 1436 // 2. Raise any parentless widgets (except top and topm, as they
1438 // are raised before and after this loop). Order from most 1437 // are raised before and after this loop). Order from most
1439 // recently raised as deepest to least recently as top, so 1438 // recently raised as deepest to least recently as top, so
1440 // that repeated calls cycle through widgets. 1439 // that repeated calls cycle through widgets.
1441 QWidgetList *list = topLevelWidgets(); 1440 QWidgetList *list = topLevelWidgets();
1442 if ( list ) { 1441 if ( list ) {
1443 bool foundlast = FALSE; 1442 bool foundlast = FALSE;
1444 QWidget* topsub = 0; 1443 QWidget* topsub = 0;
1445 if ( d->lastraised ) { 1444 if ( d->lastraised ) {
1446 for (QWidget* w = list->first(); w; w = list->next()) { 1445 for (QWidget* w = list->first(); w; w = list->next()) {
1447 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1446 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1448 if ( w == d->lastraised ) 1447 if ( w == d->lastraised )
1449 foundlast = TRUE; 1448 foundlast = TRUE;
1450 if ( foundlast ) { 1449 if ( foundlast ) {
1451 w->raise(); 1450 w->raise();
1452 topsub = w; 1451 topsub = w;
1453 } 1452 }
1454 } 1453 }
1455 } 1454 }
1456 } 1455 }
1457 for (QWidget* w = list->first(); w; w = list->next()) { 1456 for (QWidget* w = list->first(); w; w = list->next()) {
1458 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1457 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1459 if ( w == d->lastraised ) 1458 if ( w == d->lastraised )
1460 break; 1459 break;
1461 w->raise(); 1460 w->raise();
1462 topsub = w; 1461 topsub = w;
1463 } 1462 }
1464 } 1463 }
1465 d->lastraised = topsub; 1464 d->lastraised = topsub;
1466 delete list; 1465 delete list;
1467 } 1466 }
1468 1467
1469 // 3. Raise the active modal widget. 1468 // 3. Raise the active modal widget.
1470 if ( topm && topm != top ) { 1469 if ( topm && topm != top ) {
1471 topm->show(); 1470 topm->show();
1472 topm->raise(); 1471 topm->raise();
1473 // If we haven't already handled the fastAppShowing message 1472 // If we haven't already handled the fastAppShowing message
1474 if (!top && d->preloaded) { 1473 if (!top && d->preloaded) {
1475#ifndef QT_NO_COP 1474#ifndef QT_NO_COP
1476 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1475 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1477 e << d->appName; 1476 e << d->appName;
1478#endif 1477#endif
1479 } 1478 }
1480 r = FALSE; 1479 r = FALSE;
1481 } 1480 }
1482 1481
1483 return r; 1482 return r;
1484} 1483}
1485 1484
1486 1485
1487void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1486void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1488{ 1487{
1489#ifdef Q_WS_QWS 1488#ifdef Q_WS_QWS
1490 1489
1491 if ( msg == "quit()" ) { 1490 if ( msg == "quit()" ) {
1492 tryQuit(); 1491 tryQuit();
1493 } 1492 }
1494 else if ( msg == "quitIfInvisible()" ) { 1493 else if ( msg == "quitIfInvisible()" ) {
1495 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1494 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1496 quit(); 1495 quit();
1497 } 1496 }
1498 else if ( msg == "close()" ) { 1497 else if ( msg == "close()" ) {
1499 hideOrQuit(); 1498 hideOrQuit();
1500 } 1499 }
1501 else if ( msg == "disablePreload()" ) { 1500 else if ( msg == "disablePreload()" ) {
1502 d->preloaded = FALSE; 1501 d->preloaded = FALSE;
1503 d->keep_running = TRUE; 1502 d->keep_running = TRUE;
1504 /* so that quit will quit */ 1503 /* so that quit will quit */
1505 } 1504 }
1506 else if ( msg == "enablePreload()" ) { 1505 else if ( msg == "enablePreload()" ) {
1507 if (d->qpe_main_widget) 1506 if (d->qpe_main_widget)
1508 d->preloaded = TRUE; 1507 d->preloaded = TRUE;
1509 d->keep_running = TRUE; 1508 d->keep_running = TRUE;
1510 /* so next quit won't quit */ 1509 /* so next quit won't quit */
1511 } 1510 }
1512 else if ( msg == "raise()" ) { 1511 else if ( msg == "raise()" ) {
1513 d->keep_running = TRUE; 1512 d->keep_running = TRUE;
1514 d->notbusysent = FALSE; 1513 d->notbusysent = FALSE;
1515 raiseAppropriateWindow(); 1514 raiseAppropriateWindow();
1516 // Tell the system we're still chugging along... 1515 // Tell the system we're still chugging along...
1517 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1516 QCopEnvelope e("QPE/System", "appRaised(QString)");
1518 e << d->appName; 1517 e << d->appName;
1519 } 1518 }
1520 else if ( msg == "flush()" ) { 1519 else if ( msg == "flush()" ) {
1521 emit flush(); 1520 emit flush();
1522 // we need to tell the desktop 1521 // we need to tell the desktop
1523 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1522 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1524 e << d->appName; 1523 e << d->appName;
1525 } 1524 }
1526 else if ( msg == "reload()" ) { 1525 else if ( msg == "reload()" ) {
1527 emit reload(); 1526 emit reload();
1528 } 1527 }
1529 else if ( msg == "setDocument(QString)" ) { 1528 else if ( msg == "setDocument(QString)" ) {
1530 d->keep_running = TRUE; 1529 d->keep_running = TRUE;
1531 QDataStream stream( data, IO_ReadOnly ); 1530 QDataStream stream( data, IO_ReadOnly );
1532 QString doc; 1531 QString doc;
1533 stream >> doc; 1532 stream >> doc;
1534 QWidget *mw = mainWidget(); 1533 QWidget *mw = mainWidget();
1535 if ( !mw ) 1534 if ( !mw )
1536 mw = d->qpe_main_widget; 1535 mw = d->qpe_main_widget;
1537 if ( mw ) 1536 if ( mw )
1538 Global::setDocument( mw, doc ); 1537 Global::setDocument( mw, doc );
1539 1538
1540 } else if ( msg == "QPEProcessQCop()" ) { 1539 } else if ( msg == "QPEProcessQCop()" ) {
1541 processQCopFile(); 1540 processQCopFile();
1542 d->sendQCopQ(); 1541 d->sendQCopQ();
1543 }else 1542 }else
1544 { 1543 {
1545 bool p = d->keep_running; 1544 bool p = d->keep_running;
1546 d->keep_running = FALSE; 1545 d->keep_running = FALSE;
1547 emit appMessage( msg, data); 1546 emit appMessage( msg, data);
1548 if ( d->keep_running ) { 1547 if ( d->keep_running ) {
1549 d->notbusysent = FALSE; 1548 d->notbusysent = FALSE;
1550 raiseAppropriateWindow(); 1549 raiseAppropriateWindow();
1551 if ( !p ) { 1550 if ( !p ) {
1552 // Tell the system we're still chugging along... 1551 // Tell the system we're still chugging along...
1553#ifndef QT_NO_COP 1552#ifndef QT_NO_COP
1554 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1553 QCopEnvelope e("QPE/System", "appRaised(QString)");
1555 e << d->appName; 1554 e << d->appName;
1556#endif 1555#endif
1557 } 1556 }
1558 } 1557 }
1559 if ( p ) 1558 if ( p )
1560 d->keep_running = p; 1559 d->keep_running = p;
1561 } 1560 }
1562#endif 1561#endif
1563} 1562}
1564 1563
1565 1564
1566/*! 1565/*!
1567 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1566 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1568 consider passing TRUE for \a nomaximize rather than the default FALSE. 1567 consider passing TRUE for \a nomaximize rather than the default FALSE.
1569 1568
1570 \sa showMainDocumentWidget() 1569 \sa showMainDocumentWidget()
1571*/ 1570*/
1572void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) 1571void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
1573{ 1572{
1574 setMainWidget(mw); 1573 // setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit
1575 d->show(mw, nomaximize ); 1574 d->show(mw, nomaximize );
1576} 1575}
1577 1576
1578/*! 1577/*!
1579 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1578 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1580 consider passing TRUE for \a nomaximize rather than the default FALSE. 1579 consider passing TRUE for \a nomaximize rather than the default FALSE.
1581 1580
1582 This calls designates the application as 1581 This calls designates the application as
1583 a \link docwidget.html document-oriented\endlink application. 1582 a \link docwidget.html document-oriented\endlink application.
1584 1583
1585 The \a mw widget \e must have this slot: setDocument(const QString&). 1584 The \a mw widget \e must have this slot: setDocument(const QString&).
1586 1585
1587 \sa showMainWidget() 1586 \sa showMainWidget()
1588*/ 1587*/
1589void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) 1588void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1590{ 1589{
1591 if ( mw && argc() == 2 ) 1590 if ( mw && argc() == 2 )
1592 Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); 1591 Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
1593 1592
1594 1593
1595 setMainWidget(mw); 1594 //setMainWidget(mw); see above
1596 d->show(mw, nomaximize ); 1595 d->show(mw, nomaximize );
1597} 1596}
1598 1597
1599 1598
1600/*! 1599/*!
1601 If an application is started via a \link qcop.html QCop\endlink 1600 If an application is started via a \link qcop.html QCop\endlink
1602 message, the application will process the \link qcop.html 1601 message, the application will process the \link qcop.html
1603 QCop\endlink message and then quit. If the application calls this 1602 QCop\endlink message and then quit. If the application calls this
1604 function while processing a \link qcop.html QCop\endlink message, 1603 function while processing a \link qcop.html QCop\endlink message,
1605 after processing its outstanding \link qcop.html QCop\endlink 1604 after processing its outstanding \link qcop.html QCop\endlink
1606 messages the application will start 'properly' and show itself. 1605 messages the application will start 'properly' and show itself.
1607 1606
1608 \sa keepRunning() 1607 \sa keepRunning()
1609*/ 1608*/
1610void QPEApplication::setKeepRunning() 1609void QPEApplication::setKeepRunning()
1611{ 1610{
1612 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1611 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1613 QPEApplication * qpeApp = ( QPEApplication* ) qApp; 1612 QPEApplication * qpeApp = ( QPEApplication* ) qApp;
1614 qpeApp->d->keep_running = TRUE; 1613 qpeApp->d->keep_running = TRUE;
1615 } 1614 }
1616} 1615}
1617 1616
1618/*! 1617/*!
1619 Returns TRUE if the application will quit after processing the 1618 Returns TRUE if the application will quit after processing the
1620 current list of qcop messages; otherwise returns FALSE. 1619 current list of qcop messages; otherwise returns FALSE.
1621 1620
1622 \sa setKeepRunning() 1621 \sa setKeepRunning()
1623*/ 1622*/
1624bool QPEApplication::keepRunning() const 1623bool QPEApplication::keepRunning() const
1625{ 1624{
1626 return d->keep_running; 1625 return d->keep_running;
1627} 1626}
1628 1627
1629/*! 1628/*!
1630 \internal 1629 \internal
1631*/ 1630*/
1632void QPEApplication::internalSetStyle( const QString &style ) 1631void QPEApplication::internalSetStyle( const QString &style )
1633{ 1632{
1634#if QT_VERSION >= 300 1633#if QT_VERSION >= 300
1635 if ( style == "QPE" ) { 1634 if ( style == "QPE" ) {
1636 setStyle( new QPEStyle ); 1635 setStyle( new QPEStyle );
1637 } 1636 }
1638 else { 1637 else {
1639 QStyle *s = QStyleFactory::create( style ); 1638 QStyle *s = QStyleFactory::create( style );
1640 if ( s ) 1639 if ( s )
1641 setStyle( s ); 1640 setStyle( s );
1642 } 1641 }
1643#else 1642#else
1644 if ( style == "Windows" ) { 1643 if ( style == "Windows" ) {
1645 setStyle( new QWindowsStyle ); 1644 setStyle( new QWindowsStyle );
1646 } 1645 }
1647 else if ( style == "QPE" ) { 1646 else if ( style == "QPE" ) {
1648 setStyle( new QPEStyle ); 1647 setStyle( new QPEStyle );
1649 } 1648 }
1650 else if ( style == "Light" ) { 1649 else if ( style == "Light" ) {
1651 setStyle( new LightStyle ); 1650 setStyle( new LightStyle );
1652 } 1651 }
1653#ifndef QT_NO_STYLE_PLATINUM 1652#ifndef QT_NO_STYLE_PLATINUM
1654 else if ( style == "Platinum" ) { 1653 else if ( style == "Platinum" ) {
1655 setStyle( new QPlatinumStyle ); 1654 setStyle( new QPlatinumStyle );
1656 } 1655 }
1657#endif 1656#endif
1658#ifndef QT_NO_STYLE_MOTIF 1657#ifndef QT_NO_STYLE_MOTIF
1659 else if ( style == "Motif" ) { 1658 else if ( style == "Motif" ) {
1660 setStyle( new QMotifStyle ); 1659 setStyle( new QMotifStyle );
1661 } 1660 }
1662#endif 1661#endif
1663#ifndef QT_NO_STYLE_MOTIFPLUS 1662#ifndef QT_NO_STYLE_MOTIFPLUS
1664 else if ( style == "MotifPlus" ) { 1663 else if ( style == "MotifPlus" ) {
1665 setStyle( new QMotifPlusStyle ); 1664 setStyle( new QMotifPlusStyle );
1666 } 1665 }
1667#endif 1666#endif
1668 1667
1669 else { 1668 else {
1670 QStyle *sty = 0; 1669 QStyle *sty = 0;
1671 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 1670 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/";
1672 1671
1673#ifdef Q_OS_MACX 1672#ifdef Q_OS_MACX
1674 if ( style. find ( ".dylib" ) > 0 ) 1673 if ( style. find ( ".dylib" ) > 0 )
1675 path += style; 1674 path += style;
1676 else 1675 else
1677 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility 1676 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility
1678#else 1677#else
1679 if ( style. find ( ".so" ) > 0 ) 1678 if ( style. find ( ".so" ) > 0 )
1680 path += style; 1679 path += style;
1681 else 1680 else
1682 path = path + "lib" + style. lower ( ) + ".so"; // compatibility 1681 path = path + "lib" + style. lower ( ) + ".so"; // compatibility
1683#endif 1682#endif
1684 static QLibrary *lastlib = 0; 1683 static QLibrary *lastlib = 0;
1685 static StyleInterface *lastiface = 0; 1684 static StyleInterface *lastiface = 0;
1686 1685
1687 QLibrary *lib = new QLibrary ( path ); 1686 QLibrary *lib = new QLibrary ( path );
1688 StyleInterface *iface = 0; 1687 StyleInterface *iface = 0;
1689 1688
1690 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) 1689 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface )
1691 sty = iface-> style ( ); 1690 sty = iface-> style ( );
1692 1691
1693 if ( sty ) { 1692 if ( sty ) {
1694 setStyle ( sty ); 1693 setStyle ( sty );
1695 1694
1696 if ( lastiface ) 1695 if ( lastiface )
1697 lastiface-> release ( ); 1696 lastiface-> release ( );
1698 lastiface = iface; 1697 lastiface = iface;
1699 1698
1700 if ( lastlib ) { 1699 if ( lastlib ) {
1701 lastlib-> unload ( ); 1700 lastlib-> unload ( );
1702 delete lastlib; 1701 delete lastlib;
1703 } 1702 }
1704 lastlib = lib; 1703 lastlib = lib;
1705 } 1704 }
1706 else { 1705 else {
1707 if ( iface ) 1706 if ( iface )
1708 iface-> release ( ); 1707 iface-> release ( );
1709 delete lib; 1708 delete lib;
1710 1709
1711 setStyle ( new LightStyle ( )); 1710 setStyle ( new LightStyle ( ));
1712 } 1711 }
1713 } 1712 }
1714#endif 1713#endif
1715} 1714}
1716 1715
1717/*! 1716/*!
1718 \internal 1717 \internal
1719*/ 1718*/
1720void QPEApplication::prepareForTermination( bool willrestart ) 1719void QPEApplication::prepareForTermination( bool willrestart )
1721{ 1720{
1722 if ( willrestart ) { 1721 if ( willrestart ) {
1723 // Draw a big wait icon, the image can be altered in later revisions 1722 // Draw a big wait icon, the image can be altered in later revisions
1724 // QWidget *d = QApplication::desktop(); 1723 // QWidget *d = QApplication::desktop();
1725 QImage img = Resource::loadImage( "launcher/new_wait" ); 1724 QImage img = Resource::loadImage( "launcher/new_wait" );
1726 QPixmap pix; 1725 QPixmap pix;
1727 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); 1726 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) );
1728 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | 1727 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize |
1729 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 1728 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
1730 lblWait->setPixmap( pix ); 1729 lblWait->setPixmap( pix );
1731 lblWait->setAlignment( QWidget::AlignCenter ); 1730 lblWait->setAlignment( QWidget::AlignCenter );
1732 lblWait->show(); 1731 lblWait->show();
1733 lblWait->showMaximized(); 1732 lblWait->showMaximized();
1734 } 1733 }
1735#ifndef SINGLE_APP 1734#ifndef SINGLE_APP
1736 { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); 1735 { QCopEnvelope envelope( "QPE/System", "forceQuit()" );
1737 } 1736 }
1738 processEvents(); // ensure the message goes out. 1737 processEvents(); // ensure the message goes out.
1739 sleep( 1 ); // You have 1 second to comply. 1738 sleep( 1 ); // You have 1 second to comply.
1740#endif 1739#endif
1741} 1740}
1742 1741
1743/*! 1742/*!
1744 \internal 1743 \internal
1745*/ 1744*/
1746void QPEApplication::shutdown() 1745void QPEApplication::shutdown()
1747{ 1746{
1748 // Implement in server's QPEApplication subclass 1747 // Implement in server's QPEApplication subclass
1749} 1748}
1750 1749
1751/*! 1750/*!
1752 \internal 1751 \internal
1753*/ 1752*/
1754void QPEApplication::restart() 1753void QPEApplication::restart()
1755{ 1754{
1756 // Implement in server's QPEApplication subclass 1755 // Implement in server's QPEApplication subclass
1757} 1756}
1758 1757
1759static QPtrDict<void>* stylusDict = 0; 1758static QPtrDict<void>* stylusDict = 0;
1760static void createDict() 1759static void createDict()
1761{ 1760{
1762 if ( !stylusDict ) 1761 if ( !stylusDict )
1763 stylusDict = new QPtrDict<void>; 1762 stylusDict = new QPtrDict<void>;
1764} 1763}
1765 1764
1766/*! 1765/*!
1767 Returns the current StylusMode for widget \a w. 1766 Returns the current StylusMode for widget \a w.
1768 1767
1769 \sa setStylusOperation() StylusMode 1768 \sa setStylusOperation() StylusMode
1770*/ 1769*/
1771QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 1770QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
1772{ 1771{
1773 if ( stylusDict ) 1772 if ( stylusDict )
1774 return ( StylusMode ) ( int ) stylusDict->find( w ); 1773 return ( StylusMode ) ( int ) stylusDict->find( w );
1775 return LeftOnly; 1774 return LeftOnly;
1776} 1775}
1777 1776
1778/*! 1777/*!
1779 \enum QPEApplication::StylusMode 1778 \enum QPEApplication::StylusMode
1780 1779
1781 \value LeftOnly the stylus only generates LeftButton 1780 \value LeftOnly the stylus only generates LeftButton
1782 events (the default). 1781 events (the default).
1783 \value RightOnHold the stylus generates RightButton events 1782 \value RightOnHold the stylus generates RightButton events
1784 if the user uses the press-and-hold gesture. 1783 if the user uses the press-and-hold gesture.
1785 1784
1786 \sa setStylusOperation() stylusOperation() 1785 \sa setStylusOperation() stylusOperation()
1787*/ 1786*/