author | zecke <zecke> | 2003-08-25 14:46:43 (UTC) |
---|---|---|
committer | zecke <zecke> | 2003-08-25 14:46:43 (UTC) |
commit | 292b097e7db25dd231381c5b09307a1fbe81a492 (patch) (unidiff) | |
tree | b103c6c5e15e784dc07af55539672a72559da821 | |
parent | 5f292b6e4fc0f4ee8e4bced9a916f6bdce864b6b (diff) | |
download | opie-292b097e7db25dd231381c5b09307a1fbe81a492.zip opie-292b097e7db25dd231381c5b09307a1fbe81a492.tar.gz opie-292b097e7db25dd231381c5b09307a1fbe81a492.tar.bz2 |
-instead of defining for an board we define now what this
boards need
QPE_NEED_CALIBRATE
-launcher is the only one executin application
-allow processing of QCOPfiles after start ( qpeapplication )
-qcopenvelope no longer calls Global::execute
-rw-r--r-- | library/custom-ipaq.h | 1 | ||||
-rw-r--r-- | library/custom-ramses.h | 1 | ||||
-rw-r--r-- | library/custom-sharp.h | 1 | ||||
-rw-r--r-- | library/custom-simpad.h | 7 | ||||
-rw-r--r-- | library/global.cpp | 59 | ||||
-rw-r--r-- | library/inputmethodinterface.h | 19 | ||||
-rw-r--r-- | library/qcopenvelope_qws.cpp | 66 | ||||
-rw-r--r-- | library/qpeapplication.cpp | 152 | ||||
-rw-r--r-- | library/qpeapplication.h | 6 |
9 files changed, 183 insertions, 129 deletions
diff --git a/library/custom-ipaq.h b/library/custom-ipaq.h index 553b571..a9319fa 100644 --- a/library/custom-ipaq.h +++ b/library/custom-ipaq.h | |||
@@ -20 +20,2 @@ | |||
20 | 20 | ||
21 | #define QPE_NEED_CALIBRATION \ No newline at end of file | ||
diff --git a/library/custom-ramses.h b/library/custom-ramses.h index b841a66..9104931 100644 --- a/library/custom-ramses.h +++ b/library/custom-ramses.h | |||
@@ -20,2 +20,3 @@ | |||
20 | 20 | ||
21 | #define QPE_NEED_CALIBRATION | ||
21 | #define QPE_HAVE_TOGGLELIGHT | 22 | #define QPE_HAVE_TOGGLELIGHT |
diff --git a/library/custom-sharp.h b/library/custom-sharp.h index 3dab34f..3936875 100644 --- a/library/custom-sharp.h +++ b/library/custom-sharp.h | |||
@@ -20,2 +20,3 @@ | |||
20 | 20 | ||
21 | #define QPE_NEED_CALIBRATION | ||
21 | #define QPE_OWNAPM | 22 | #define QPE_OWNAPM |
diff --git a/library/custom-simpad.h b/library/custom-simpad.h new file mode 100644 index 0000000..3872dfd --- a/dev/null +++ b/library/custom-simpad.h | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | * GPLv2 only zecke@handhelds.org | ||
3 | hOlgAr | ||
4 | */ | ||
5 | |||
6 | |||
7 | #define QPE_NEED_CALIBRATION \ No newline at end of file | ||
diff --git a/library/global.cpp b/library/global.cpp index 189b830..5c89430 100644 --- a/library/global.cpp +++ b/library/global.cpp | |||
@@ -678,58 +678,13 @@ void Global::execute( const QString &c, const QString& document ) | |||
678 | { | 678 | { |
679 | if ( qApp->type() != QApplication::GuiServer ) { | ||
680 | // ask the server to do the work | 679 | // ask the server to do the work |
681 | #if !defined(QT_NO_COP) | 680 | #if !defined(QT_NO_COP) |
682 | if ( document.isNull() ) { | 681 | if ( document.isNull() ) { |
683 | QCopEnvelope e( "QPE/System", "execute(QString)" ); | 682 | QCopEnvelope e( "QPE/System", "execute(QString)" ); |
684 | e << c; | 683 | e << c; |
685 | } else { | 684 | } else { |
686 | QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); | 685 | QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); |
687 | e << c << document; | 686 | e << c << document; |
688 | } | ||
689 | #endif | ||
690 | return; | ||
691 | } | ||
692 | |||
693 | // Attempt to execute the app using a builtin class for the app first | ||
694 | // else try and find it in the bin directory | ||
695 | if (builtin) { | ||
696 | for (int i = 0; builtin[i].file; i++) { | ||
697 | if ( builtin[i].file == c ) { | ||
698 | if ( running[i] ) { | ||
699 | if ( !document.isNull() && builtin[i].documentary ) | ||
700 | setDocument(running[i], document); | ||
701 | running[i]->raise(); | ||
702 | running[i]->show(); | ||
703 | running[i]->setActiveWindow(); | ||
704 | } else { | ||
705 | running[i] = builtin[i].func( builtin[i].maximized ); | ||
706 | } | ||
707 | #ifndef QT_NO_COP | ||
708 | QCopEnvelope e("QPE/System", "notBusy(QString)" ); | ||
709 | e << c; // that was quick ;-) | ||
710 | #endif | ||
711 | return; | ||
712 | } | ||
713 | } | ||
714 | } | ||
715 | |||
716 | //Global::invoke(c, document); | ||
717 | |||
718 | // Convert the command line in to a list of arguments | ||
719 | QStringList list = QStringList::split(QRegExp(" *"),c); | ||
720 | |||
721 | #if !defined(QT_NO_COP) | ||
722 | QString ap=list[0]; | ||
723 | |||
724 | qDebug("executing %s", ap.latin1() ); | ||
725 | |||
726 | /* if need be, sending a qcop message will result in an invoke, see | ||
727 | preceeding function */ | ||
728 | invoke( ap ); | ||
729 | //{ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } | ||
730 | if ( !document.isEmpty() ) { | ||
731 | QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" ); | ||
732 | env << document; | ||
733 | } | 687 | } |
734 | #endif | 688 | #endif |
689 | return; | ||
735 | } | 690 | } |
diff --git a/library/inputmethodinterface.h b/library/inputmethodinterface.h index 88a121d..488f601 100644 --- a/library/inputmethodinterface.h +++ b/library/inputmethodinterface.h | |||
@@ -49,3 +49,3 @@ struct InputMethodInterface : public QUnknownInterface | |||
49 | 49 | ||
50 | // {70F0991C-8282-4625-A279-BD9D7D959FF6} | 50 | // {70F0991C-8282-4625-A279-BD9D7D959FF6} |
51 | #ifndef IID_ExtInputMethod | 51 | #ifndef IID_ExtInputMethod |
@@ -56,6 +56,17 @@ struct ExtInputMethodInterface : public QUnknownInterface | |||
56 | { | 56 | { |
57 | virtual QWSInputMethod *inputMethod() = 0; | 57 | //identifying functions. |
58 | virtual QPixmap *icon() = 0; | ||
59 | virtual QString name() = 0; | 58 | virtual QString name() = 0; |
60 | virtual QWidget *widget( QWidget *parent, Qt::WFlags f )= 0; | 59 | virtual QPixmap *icon() = 0; |
60 | |||
61 | // state managment. | ||
62 | virtual void resetState() = 0; | ||
63 | |||
64 | virtual QWidget *keyboardWidget( QWidget *parent, Qt::WFlags f ) = 0; | ||
65 | // filenames, not menu names. | ||
66 | virtual QStringList compatible() = 0; | ||
67 | |||
68 | virtual QWSInputMethod *inputMethod() = 0; | ||
69 | virtual QWidget *statusWidget( QWidget *parent, Qt::WFlags f )= 0; | ||
70 | |||
71 | virtual void qcopReceive( const QCString &msg, const QByteArray &data )= 0; | ||
61 | }; | 72 | }; |
diff --git a/library/qcopenvelope_qws.cpp b/library/qcopenvelope_qws.cpp index 81bb0f5..0aac32b 100644 --- a/library/qcopenvelope_qws.cpp +++ b/library/qcopenvelope_qws.cpp | |||
@@ -104,4 +104,5 @@ QCopEnvelope::~QCopEnvelope() | |||
104 | if ( qcopfile.open(IO_WriteOnly | IO_Append) ) { | 104 | if ( qcopfile.open(IO_WriteOnly | IO_Append) ) { |
105 | #ifndef Q_OS_WIN32 | ||
105 | if(flock(qcopfile.handle(), LOCK_EX)) { | 106 | if(flock(qcopfile.handle(), LOCK_EX)) { |
106 | /* some error occured */ | 107 | /* some error occurred */ |
107 | qWarning(QString("Failed to obtain file lock on %1 (%2)") | 108 | qWarning(QString("Failed to obtain file lock on %1 (%2)") |
@@ -109,48 +110,21 @@ QCopEnvelope::~QCopEnvelope() | |||
109 | } | 110 | } |
110 | /* file locked, but might be stale (e.g. program for whatever | 111 | #endif |
111 | reason did not start). I modified more than 1 minute ago, | 112 | { |
112 | truncate the file */ | 113 | QDataStream ds(&qcopfile); |
113 | struct stat buf; | 114 | ds << ch << msg << data; |
114 | time_t t; | 115 | qcopfile.flush(); |
115 | if (!fstat(qcopfile.handle(), &buf) && (time(&t) != (time_t)-1) ) { | 116 | #ifndef Q_OS_WIN32 |
116 | // success on fstat, lets compare times | 117 | flock(qcopfile.handle(), LOCK_UN); |
117 | if (buf.st_ctime + 60 < t) { | 118 | #endif |
118 | qWarning("stale file " + qcopfn + " found. Truncating"); | 119 | qcopfile.close(); |
119 | ftruncate(qcopfile.handle(), 0); | ||
120 | qcopfile.reset(); | ||
121 | } | ||
122 | } | 120 | } |
123 | 121 | ||
124 | if ( !QCopChannel::isRegistered(ch) ) { | 122 | QByteArray b; |
125 | int fsize = qcopfile.size(); | 123 | QDataStream stream(b, IO_WriteOnly); |
126 | { | 124 | stream << QString(ch.mid(pref)); |
127 | QDataStream ds(&qcopfile); | 125 | QCopChannel::send("QPE/Server", "processQCop(QString)", b); |
128 | ds << ch << msg << data; | 126 | delete device(); |
129 | flock(qcopfile.handle(), LOCK_UN); | 127 | return; |
130 | qcopfile.close(); | ||
131 | } | ||
132 | |||
133 | if (fsize == 0) { | ||
134 | QString cmd = ch.mid(pref); | ||
135 | Global::execute(cmd); | ||
136 | } | ||
137 | |||
138 | char c; | ||
139 | for (int i=0; (c=msg[i]); i++) { | ||
140 | if ( c == ' ' ) { | ||
141 | // Return-value required | ||
142 | // ###### wait for it | ||
143 | break; | ||
144 | } else if ( c == '(' ) { | ||
145 | // No return value | ||
146 | break; | ||
147 | } | ||
148 | } | ||
149 | goto end; | ||
150 | } // endif isRegisterd | ||
151 | flock(qcopfile.handle(), LOCK_UN); | ||
152 | qcopfile.close(); | ||
153 | qcopfile.remove(); | ||
154 | } else { | 128 | } else { |
155 | qWarning(QString("Failed to obtain file lock on %1") | 129 | qWarning(QString("Failed to open file %1") |
156 | .arg(qcopfn)); | 130 | .arg(qcopfn)); |
@@ -162,3 +136,3 @@ QCopEnvelope::~QCopEnvelope() | |||
162 | QString endpoint = ch.mid(9); | 136 | QString endpoint = ch.mid(9); |
163 | 137 | ||
164 | ch = "QPE/SOAP"; | 138 | ch = "QPE/SOAP"; |
@@ -167,4 +141,4 @@ QCopEnvelope::~QCopEnvelope() | |||
167 | } | 141 | } |
142 | |||
168 | QCopChannel::send(ch,msg,data); | 143 | QCopChannel::send(ch,msg,data); |
169 | end: | ||
170 | delete device(); | 144 | delete device(); |
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 @@ | |||
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" |
@@ -307,2 +310,12 @@ private: | |||
307 | 310 | ||
311 | static 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 | |||
308 | static int muted = 0; | 321 | static int muted = 0; |
@@ -488,2 +501,31 @@ static void setTreble( int t = 0, int percent = -1 ) | |||
488 | 501 | ||
502 | |||
503 | |||
504 | void 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 | /*! |
@@ -525,3 +567,3 @@ static void setTreble( int t = 0, int percent = -1 ) | |||
525 | QPEApplication::QPEApplication( int & argc, char **argv, Type t ) | 567 | QPEApplication::QPEApplication( int & argc, char **argv, Type t ) |
526 | : QApplication( argc, argv, t ) | 568 | : QApplication( hack(argc), argv, t ), pidChannel( 0 ) |
527 | { | 569 | { |
@@ -553,2 +595,10 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) | |||
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) |
@@ -563,5 +613,3 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) | |||
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 | ||
@@ -610,3 +658,5 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) | |||
610 | #endif | 658 | #endif |
611 | 659 | #else | |
660 | initApp( argc, argv ); | ||
661 | #endif | ||
612 | // qwsSetDecoration( new QPEDecoration() ); | 662 | // qwsSetDecoration( new QPEDecoration() ); |
@@ -627,9 +677,8 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) | |||
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 |
@@ -652,2 +701,47 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) | |||
652 | 701 | ||
702 | |||
703 | #ifdef QTOPIA_INTERNAL_INITAPP | ||
704 | void 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 | |||
653 | static QPtrDict<void>* inputMethodDict = 0; | 747 | static QPtrDict<void>* inputMethodDict = 0; |
@@ -1126,16 +1220,2 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data | |||
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)" ) { |
@@ -1210,4 +1290,18 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data | |||
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 | ||
@@ -1308,3 +1402,7 @@ void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) | |||
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; |
diff --git a/library/qpeapplication.h b/library/qpeapplication.h index 65a6d33..770ea23 100644 --- a/library/qpeapplication.h +++ b/library/qpeapplication.h | |||
@@ -84,2 +84,6 @@ public: | |||
84 | static int execDialog( QDialog*, bool nomax=FALSE ); | 84 | static int execDialog( QDialog*, bool nomax=FALSE ); |
85 | /* Merge setTempScreenSaverMode */ | ||
86 | #ifdef QTOPIA_INTERNAL_INITAPP | ||
87 | void initApp( int argv, char **argv ); | ||
88 | #endif | ||
85 | 89 | ||
@@ -103,2 +107,3 @@ signals: | |||
103 | void reload(); | 107 | void reload(); |
108 | /* linkChanged signal */ | ||
104 | 109 | ||
@@ -128,2 +133,3 @@ private: | |||
128 | void mapToDefaultAction( QWSKeyEvent *ke, int defKey ); | 133 | void mapToDefaultAction( QWSKeyEvent *ke, int defKey ); |
134 | void processQCopFile(); | ||
129 | 135 | ||