-rw-r--r-- | library/qpeapplication.cpp | 152 |
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 @@ -53,2 +53,5 @@ #include <qmainwindow.h> + +#if defined(Q_WS_QWS) && !defined(QT_NO_COP) +#define QTOPIA_INTERNAL_INITAPP #include "qpeapplication.h" @@ -307,2 +310,12 @@ private: +static int& hack(int& i) +{ +#if QT_VERSION <= 230 && defined(QT_NO_CODECS) + // These should be created, but aren't in Qt 2.3.0 + (void)new QUtf8Codec; + (void)new QUtf16Codec; +#endif + return i; +} + static int muted = 0; @@ -488,2 +501,31 @@ static void setTreble( int t = 0, int percent = -1 ) + + +void QPEApplication::processQCopFile() +{ + QString qcopfn("/tmp/qcop-msg-"); + qcopfn += d->appName; // append command name + + QFile f(qcopfn); + if ( f.open(IO_ReadWrite) ) { +#ifndef Q_OS_WIN32 + flock(f.handle(), LOCK_EX); +#endif + QDataStream ds(&f); + QCString channel, message; + QByteArray data; + while(!ds.atEnd()) { + ds >> channel >> message >> data; + d->enqueueQCop(channel,message,data); + } + ::ftruncate(f.handle(), 0); +#ifndef Q_OS_WIN32 + f.flush(); + flock(f.handle(), LOCK_UN); +#endif + } +#endif +} + + /*! @@ -525,3 +567,3 @@ static void setTreble( int t = 0, int percent = -1 ) QPEApplication::QPEApplication( int & argc, char **argv, Type t ) - : QApplication( argc, argv, t ) + : QApplication( hack(argc), argv, t ), pidChannel( 0 ) { @@ -553,2 +595,10 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); + + + sysChannel = new QCopChannel( "QPE/System", this ); + connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), + this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); + +/* COde now in initapp */ +#if 0 #if defined(Q_WS_QWS) && !defined(QT_NO_COP) @@ -563,5 +613,3 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) - sysChannel = new QCopChannel( "QPE/System", this ); - connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), - this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); + @@ -610,3 +658,5 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) #endif - +#else + initApp( argc, argv ); +#endif // qwsSetDecoration( new QPEDecoration() ); @@ -627,9 +677,8 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) - if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { - QFont fn = FontManager::unicodeFont( FontManager::Proportional ); - setFont( fn ); - } + if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { + QFont fn = FontManager::unicodeFont( FontManager::Proportional ); + setFont( fn ); + } #endif - - } + } #endif @@ -652,2 +701,47 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) + +#ifdef QTOPIA_INTERNAL_INITAPP +void QPEApplication::initApp( int argc, char **argv ) +{ + delete pidChannel; + d->keep_running = TRUE; + d->preloaded = FALSE; + d->forceshow = FALSE; + + QCString channel = QCString(argv[0]); + + channel.replace(QRegExp(".*/"),""); + d->appName = channel; + + qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6 + + channel = "QPE/Application/" + channel; + pidChannel = new QCopChannel( channel, this); + connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)), + this, SLOT(pidMessage(const QCString &, const QByteArray &))); + + processQCopFile(); + d->keep_running = d->qcopq.isEmpty(); + + for (int a=0; a<argc; a++) { + if ( qstrcmp(argv[a],"-preload")==0 ) { + argv[a] = argv[a+1]; + a++; + d->preloaded = TRUE; + argc-=1; + } else if ( qstrcmp(argv[a],"-preload-show")==0 ) { + argv[a] = argv[a+1]; + a++; + d->preloaded = TRUE; + d->forceshow = TRUE; + argc-=1; + } + } + + /* overide stored arguments */ + setArgs(argc, argv); +} +#endif + + static QPtrDict<void>* inputMethodDict = 0; @@ -1126,16 +1220,2 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data } - else if ( msg == "execute(QString)" ) { - if ( type() == GuiServer ) { - QString t; - stream >> t; - Global::execute( t ); - } - } - else if ( msg == "execute(QString,QString)" ) { - if ( type() == GuiServer ) { - QString t, d; - stream >> t >> d; - Global::execute( t, d ); - } - } else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { @@ -1210,4 +1290,18 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data setTreble(); + } else if ( msg == "getMarkedText()" ) { + if ( type() == GuiServer ) { + const ushort unicode = 'C'-'@'; + const int scan = Key_C; + qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); + qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); + } + } else if ( msg == "newChannel(QString)") { + QString myChannel = "QPE/Application/" + d->appName; + QString channel; + stream >> channel; + if (channel == myChannel) { + processQCopFile(); + d->sendQCopQ(); } - + } @@ -1308,3 +1402,7 @@ void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) Global::setDocument( mw, doc ); - } else { + } else if ( msg == "QPEProcessQCop()" ) { + processQCopFile(); + d->sendQCopQ(); + } + { bool p = d->keep_running; |