summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/custom-ipaq.h1
-rw-r--r--library/custom-ramses.h1
-rw-r--r--library/custom-sharp.h1
-rw-r--r--library/custom-simpad.h7
-rw-r--r--library/global.cpp59
-rw-r--r--library/inputmethodinterface.h19
-rw-r--r--library/qcopenvelope_qws.cpp66
-rw-r--r--library/qpeapplication.cpp152
-rw-r--r--library/qpeapplication.h6
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
@@ -18,3 +18,4 @@
18** 18**
19**********************************************************************/ 19**********************************************************************/
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
@@ -18,6 +18,7 @@
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#define QPE_NEED_CALIBRATION
21#define QPE_HAVE_TOGGLELIGHT 22#define QPE_HAVE_TOGGLELIGHT
22#define QPE_STARTMENU 23#define QPE_STARTMENU
23 24
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
@@ -18,6 +18,7 @@
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#define QPE_NEED_CALIBRATION
21#define QPE_OWNAPM 22#define QPE_OWNAPM
22#define QPE_HAVE_TOGGLELIGHT 23#define QPE_HAVE_TOGGLELIGHT
23#define QPE_NOCIBAUD 24#define QPE_NOCIBAUD
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
@@ -676,62 +676,17 @@ void Global::invoke(const QString &c)
676*/ 676*/
677void Global::execute( const QString &c, const QString& document ) 677void 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}
736 691
737/*! 692/*!
diff --git a/library/inputmethodinterface.h b/library/inputmethodinterface.h
index 88a121d..488f601 100644
--- a/library/inputmethodinterface.h
+++ b/library/inputmethodinterface.h
@@ -47,17 +47,28 @@ struct InputMethodInterface : public QUnknownInterface
47 virtual void onKeyPress( QObject *receiver, const char *slot ) = 0; 47 virtual void onKeyPress( QObject *receiver, const char *slot ) = 0;
48}; 48};
49 49
50// {70F0991C-8282-4625-A279-BD9D7D959FF6} 50// {70F0991C-8282-4625-A279-BD9D7D959FF6}
51#ifndef IID_ExtInputMethod 51#ifndef IID_ExtInputMethod
52#define IID_ExtInputMethod QUuid( 0x70f0991c, 0x8282, 0x4625, 0xa2, 0x79, 0xbd, 0x9d, 0x7d, 0x95, 0x9f, 0xf6) 52#define IID_ExtInputMethod QUuid( 0x70f0991c, 0x8282, 0x4625, 0xa2, 0x79, 0xbd, 0x9d, 0x7d, 0x95, 0x9f, 0xf6)
53#endif 53#endif
54 54
55struct ExtInputMethodInterface : public QUnknownInterface 55struct 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};
62 73
63 74
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
@@ -102,57 +102,31 @@ QCopEnvelope::~QCopEnvelope()
102 QFile qcopfile(qcopfn); 102 QFile qcopfile(qcopfn);
103 103
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)")
108 .arg(qcopfn).arg( errno )); 109 .arg(qcopfn).arg( errno ));
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));
157 } // endif open 131 } // endif open
158 } 132 }
@@ -160,13 +134,13 @@ QCopEnvelope::~QCopEnvelope()
160 // If this is a message that should go along the SOAP channel, we move the 134 // If this is a message that should go along the SOAP channel, we move the
161 // endpoint URL to the data section. 135 // endpoint URL to the data section.
162 QString endpoint = ch.mid(9); 136 QString endpoint = ch.mid(9);
163 137
164 ch = "QPE/SOAP"; 138 ch = "QPE/SOAP";
165 // Since byte arrays are explicitly shared, this is appended to the data variable.. 139 // Since byte arrays are explicitly shared, this is appended to the data variable..
166 *this << endpoint; 140 *this << endpoint;
167 } 141 }
142
168 QCopChannel::send(ch,msg,data); 143 QCopChannel::send(ch,msg,data);
169end:
170 delete device(); 144 delete device();
171} 145}
172 146
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);
diff --git a/library/qpeapplication.h b/library/qpeapplication.h
index 65a6d33..770ea23 100644
--- a/library/qpeapplication.h
+++ b/library/qpeapplication.h
@@ -82,6 +82,10 @@ public:
82 void showMainDocumentWidget( QWidget*, bool nomax=FALSE ); 82 void showMainDocumentWidget( QWidget*, bool nomax=FALSE );
83 static void showDialog( QDialog*, bool nomax=FALSE ); 83 static void showDialog( QDialog*, bool nomax=FALSE );
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
86 static void setKeepRunning(); 90 static void setKeepRunning();
87 bool keepRunning() const; 91 bool keepRunning() const;
@@ -101,6 +105,7 @@ signals:
101 void dateFormatChanged( DateFormat ); 105 void dateFormatChanged( DateFormat );
102 void flush(); 106 void flush();
103 void reload(); 107 void reload();
108 /* linkChanged signal */
104 109
105private slots: 110private slots:
106 void systemMessage( const QCString &msg, const QByteArray &data ); 111 void systemMessage( const QCString &msg, const QByteArray &data );
@@ -126,6 +131,7 @@ private:
126 void installTranslation( const QString& baseName ); 131 void installTranslation( const QString& baseName );
127#endif 132#endif
128 void mapToDefaultAction( QWSKeyEvent *ke, int defKey ); 133 void mapToDefaultAction( QWSKeyEvent *ke, int defKey );
134 void processQCopFile();
129 135
130#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 136#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
131 QCopChannel *sysChannel; 137 QCopChannel *sysChannel;