summaryrefslogtreecommitdiff
path: root/library/qpeapplication.cpp
Unidiff
Diffstat (limited to 'library/qpeapplication.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp152
1 files changed, 125 insertions, 27 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index d1a7cd2..b1b7ed4 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -51,6 +51,9 @@
51#include <qtooltip.h> 51#include <qtooltip.h>
52#include <qsignal.h> 52#include <qsignal.h>
53#include <qmainwindow.h> 53#include <qmainwindow.h>
54
55#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
56#define QTOPIA_INTERNAL_INITAPP
54#include "qpeapplication.h" 57#include "qpeapplication.h"
55#include "qpestyle.h" 58#include "qpestyle.h"
56#include "styleinterface.h" 59#include "styleinterface.h"
@@ -305,6 +308,16 @@ private:
305 mutable QImageDrag *resImage; 308 mutable QImageDrag *resImage;
306}; 309};
307 310
311static int& hack(int& i)
312{
313#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
314 // These should be created, but aren't in Qt 2.3.0
315 (void)new QUtf8Codec;
316 (void)new QUtf16Codec;
317#endif
318 return i;
319}
320
308static int muted = 0; 321static int muted = 0;
309static int micMuted = 0; 322static int micMuted = 0;
310 323
@@ -486,6 +499,35 @@ static void setTreble( int t = 0, int percent = -1 )
486 499
487*/ 500*/
488 501
502
503
504void QPEApplication::processQCopFile()
505{
506 QString qcopfn("/tmp/qcop-msg-");
507 qcopfn += d->appName; // append command name
508
509 QFile f(qcopfn);
510 if ( f.open(IO_ReadWrite) ) {
511#ifndef Q_OS_WIN32
512 flock(f.handle(), LOCK_EX);
513#endif
514 QDataStream ds(&f);
515 QCString channel, message;
516 QByteArray data;
517 while(!ds.atEnd()) {
518 ds >> channel >> message >> data;
519 d->enqueueQCop(channel,message,data);
520 }
521 ::ftruncate(f.handle(), 0);
522#ifndef Q_OS_WIN32
523 f.flush();
524 flock(f.handle(), LOCK_UN);
525#endif
526 }
527#endif
528}
529
530
489/*! 531/*!
490 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 532 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
491 533
@@ -523,7 +565,7 @@ static void setTreble( int t = 0, int percent = -1 )
523 the Qtopia server passes GuiServer. 565 the Qtopia server passes GuiServer.
524*/ 566*/
525QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 567QPEApplication::QPEApplication( int & argc, char **argv, Type t )
526 : QApplication( argc, argv, t ) 568 : QApplication( hack(argc), argv, t ), pidChannel( 0 )
527{ 569{
528 d = new QPEApplicationData; 570 d = new QPEApplicationData;
529 d->loadTextCodecs(); 571 d->loadTextCodecs();
@@ -551,6 +593,14 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t )
551 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 593 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
552 594
553 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 595 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
596
597
598 sysChannel = new QCopChannel( "QPE/System", this );
599 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
600 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) );
601
602/* COde now in initapp */
603#if 0
554#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 604#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
555 605
556 QString qcopfn( "/tmp/qcop-msg-" ); 606 QString qcopfn( "/tmp/qcop-msg-" );
@@ -561,9 +611,7 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t )
561 flock( f.handle(), LOCK_EX ); 611 flock( f.handle(), LOCK_EX );
562 } 612 }
563 613
564 sysChannel = new QCopChannel( "QPE/System", this ); 614
565 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
566 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) );
567 615
568 QCString channel = QCString( argv[ 0 ] ); 616 QCString channel = QCString( argv[ 0 ] );
569 channel.replace( QRegExp( ".*/" ), "" ); 617 channel.replace( QRegExp( ".*/" ), "" );
@@ -608,7 +656,9 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t )
608 setArgs( argc, argv ); 656 setArgs( argc, argv );
609 657
610#endif 658#endif
611 659#else
660 initApp( argc, argv );
661#endif
612 // qwsSetDecoration( new QPEDecoration() ); 662 // qwsSetDecoration( new QPEDecoration() );
613 663
614#ifndef QT_NO_TRANSLATION 664#ifndef QT_NO_TRANSLATION
@@ -625,13 +675,12 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t )
625 //###language/font hack; should look it up somewhere 675 //###language/font hack; should look it up somewhere
626#ifdef QWS 676#ifdef QWS
627 677
628 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 678 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
629 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 679 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
630 setFont( fn ); 680 setFont( fn );
631 } 681 }
632#endif 682#endif
633 683 }
634 }
635#endif 684#endif
636 685
637 applyStyle(); 686 applyStyle();
@@ -650,6 +699,51 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t )
650#endif 699#endif
651} 700}
652 701
702
703#ifdef QTOPIA_INTERNAL_INITAPP
704void QPEApplication::initApp( int argc, char **argv )
705{
706 delete pidChannel;
707 d->keep_running = TRUE;
708 d->preloaded = FALSE;
709 d->forceshow = FALSE;
710
711 QCString channel = QCString(argv[0]);
712
713 channel.replace(QRegExp(".*/"),"");
714 d->appName = channel;
715
716 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6
717
718 channel = "QPE/Application/" + channel;
719 pidChannel = new QCopChannel( channel, this);
720 connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)),
721 this, SLOT(pidMessage(const QCString &, const QByteArray &)));
722
723 processQCopFile();
724 d->keep_running = d->qcopq.isEmpty();
725
726 for (int a=0; a<argc; a++) {
727 if ( qstrcmp(argv[a],"-preload")==0 ) {
728 argv[a] = argv[a+1];
729 a++;
730 d->preloaded = TRUE;
731 argc-=1;
732 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
733 argv[a] = argv[a+1];
734 a++;
735 d->preloaded = TRUE;
736 d->forceshow = TRUE;
737 argc-=1;
738 }
739 }
740
741 /* overide stored arguments */
742 setArgs(argc, argv);
743}
744#endif
745
746
653static QPtrDict<void>* inputMethodDict = 0; 747static QPtrDict<void>* inputMethodDict = 0;
654static void createInputMethodDict() 748static void createInputMethodDict()
655{ 749{
@@ -1124,20 +1218,6 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data
1124 // emit the signal so everyone else knows... 1218 // emit the signal so everyone else knows...
1125 emit timeChanged(); 1219 emit timeChanged();
1126 } 1220 }
1127 else if ( msg == "execute(QString)" ) {
1128 if ( type() == GuiServer ) {
1129 QString t;
1130 stream >> t;
1131 Global::execute( t );
1132 }
1133 }
1134 else if ( msg == "execute(QString,QString)" ) {
1135 if ( type() == GuiServer ) {
1136 QString t, d;
1137 stream >> t >> d;
1138 Global::execute( t, d );
1139 }
1140 }
1141 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1221 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1142 if ( type() == GuiServer ) { 1222 if ( type() == GuiServer ) {
1143 QDateTime when; 1223 QDateTime when;
@@ -1208,8 +1288,22 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data
1208 } 1288 }
1209 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1289 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1210 setTreble(); 1290 setTreble();
1291 } else if ( msg == "getMarkedText()" ) {
1292 if ( type() == GuiServer ) {
1293 const ushort unicode = 'C'-'@';
1294 const int scan = Key_C;
1295 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
1296 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
1297 }
1298 } else if ( msg == "newChannel(QString)") {
1299 QString myChannel = "QPE/Application/" + d->appName;
1300 QString channel;
1301 stream >> channel;
1302 if (channel == myChannel) {
1303 processQCopFile();
1304 d->sendQCopQ();
1211 } 1305 }
1212 1306 }
1213 1307
1214 1308
1215#endif 1309#endif
@@ -1306,7 +1400,11 @@ void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1306 mw = d->qpe_main_widget; 1400 mw = d->qpe_main_widget;
1307 if ( mw ) 1401 if ( mw )
1308 Global::setDocument( mw, doc ); 1402 Global::setDocument( mw, doc );
1309 } else { 1403 } else if ( msg == "QPEProcessQCop()" ) {
1404 processQCopFile();
1405 d->sendQCopQ();
1406 }
1407 {
1310 bool p = d->keep_running; 1408 bool p = d->keep_running;
1311 d->keep_running = FALSE; 1409 d->keep_running = FALSE;
1312 emit appMessage( msg, data); 1410 emit appMessage( msg, data);