summaryrefslogtreecommitdiff
path: root/library
Unidiff
Diffstat (limited to 'library') (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
@@ -1,20 +1,21 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
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
@@ -1,44 +1,45 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
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
24#include <unistd.h> 25#include <unistd.h>
25#include <stdio.h> 26#include <stdio.h>
26#include <signal.h> 27#include <signal.h>
27#include <fcntl.h> 28#include <fcntl.h>
28#include <sys/ioctl.h> 29#include <sys/ioctl.h>
29 30
30#define QPE_HAVE_MEMALERTER 31#define QPE_HAVE_MEMALERTER
31 32
32#define QPE_MEMALERTER_IMPL \ 33#define QPE_MEMALERTER_IMPL \
33static void sig_handler(int sig) \ 34static void sig_handler(int sig) \
34{ \ 35{ \
35 switch (sig) { \ 36 switch (sig) { \
36 case SIGHUP: \ 37 case SIGHUP: \
37 memstate = VeryLow; \ 38 memstate = VeryLow; \
38 break; \ 39 break; \
39 case SIGUSR1: \ 40 case SIGUSR1: \
40 memstate = Normal; \ 41 memstate = Normal; \
41 break; \ 42 break; \
42 case SIGUSR2: \ 43 case SIGUSR2: \
43 memstate = Low; \ 44 memstate = Low; \
44 break; \ 45 break; \
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
@@ -1,44 +1,45 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
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
24#define QPE_STARTMENU 25#define QPE_STARTMENU
25#include <asm/sharp_apm.h> 26#include <asm/sharp_apm.h>
26#ifndef APM_IOC_BATTERY_BACK_CHK 27#ifndef APM_IOC_BATTERY_BACK_CHK
27#define APM_IOC_BATTERY_BACK_CHK _IO(APM_IOC_MAGIC, 32) 28#define APM_IOC_BATTERY_BACK_CHK _IO(APM_IOC_MAGIC, 32)
28#endif 29#endif
29#ifndef APM_IOC_BATTERY_MAIN_CHK 30#ifndef APM_IOC_BATTERY_MAIN_CHK
30#define APM_IOC_BATTERY_MAIN_CHK _IO(APM_IOC_MAGIC, 33) 31#define APM_IOC_BATTERY_MAIN_CHK _IO(APM_IOC_MAGIC, 33)
31#endif 32#endif
32 33
33#include <unistd.h> 34#include <unistd.h>
34#include <stdio.h> 35#include <stdio.h>
35#include <signal.h> 36#include <signal.h>
36#include <fcntl.h> 37#include <fcntl.h>
37#include <sys/ioctl.h> 38#include <sys/ioctl.h>
38 39
39 40
40#include <sys/ioctl.h> 41#include <sys/ioctl.h>
41#include <asm/sharp_char.h> 42#include <asm/sharp_char.h>
42 43
43#define QPE_HAVE_MEMALERTER 44#define QPE_HAVE_MEMALERTER
44 45
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
@@ -655,104 +655,59 @@ void Global::invoke(const QString &c)
655 655
656 break; // success 656 break; // success
657 } 657 }
658 ::close ( pfd [0] ); 658 ::close ( pfd [0] );
659 } 659 }
660 } 660 }
661 if ( success ) 661 if ( success )
662 StartingAppList::add( list[0] ); 662 StartingAppList::add( list[0] );
663 else 663 else
664 QMessageBox::warning( 0, "Error", "Could not start the application " + c, "Ok", 0, 0, 0, 1 ); 664 QMessageBox::warning( 0, "Error", "Could not start the application " + c, "Ok", 0, 0, 0, 1 );
665 } 665 }
666#endif //QT_NO_QWS_MULTIPROCESS 666#endif //QT_NO_QWS_MULTIPROCESS
667} 667}
668 668
669 669
670/*! 670/*!
671 Executes the application identfied by \a c, passing \a 671 Executes the application identfied by \a c, passing \a
672 document if it isn't null. 672 document if it isn't null.
673 673
674 Note that a better approach might be to send a QCop message to the 674 Note that a better approach might be to send a QCop message to the
675 application's QPE/Application/\e{appname} channel. 675 application's QPE/Application/\e{appname} channel.
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/*!
738 Returns the string \a s with the characters '\', '"', and '$' quoted 693 Returns the string \a s with the characters '\', '"', and '$' quoted
739 by a preceeding '\'. 694 by a preceeding '\'.
740 695
741 \sa stringQuote() 696 \sa stringQuote()
742*/ 697*/
743QString Global::shellQuote(const QString& s) 698QString Global::shellQuote(const QString& s)
744{ 699{
745 QString r="\""; 700 QString r="\"";
746 for (int i=0; i<(int)s.length(); i++) { 701 for (int i=0; i<(int)s.length(); i++) {
747 char c = s[i].latin1(); 702 char c = s[i].latin1();
748 switch (c) { 703 switch (c) {
749 case '\\': case '"': case '$': 704 case '\\': case '"': case '$':
750 r+="\\"; 705 r+="\\";
751 } 706 }
752 r += s[i]; 707 r += s[i];
753 } 708 }
754 r += "\""; 709 r += "\"";
755 return r; 710 return r;
756} 711}
757 712
758/*! 713/*!
diff --git a/library/inputmethodinterface.h b/library/inputmethodinterface.h
index 88a121d..488f601 100644
--- a/library/inputmethodinterface.h
+++ b/library/inputmethodinterface.h
@@ -26,39 +26,50 @@
26#include <qnamespace.h> 26#include <qnamespace.h>
27#include <qstring.h> 27#include <qstring.h>
28 28
29#ifndef QT_NO_COMPONENT 29#ifndef QT_NO_COMPONENT
30// {637A8A14-AF98-41DA-969A-2BD16ECDA8C7} 30// {637A8A14-AF98-41DA-969A-2BD16ECDA8C7}
31# ifndef IID_InputMethod 31# ifndef IID_InputMethod
32# define IID_InputMethod QUuid( 0x637a8a14, 0xaf98, 0x41da, 0x96, 0x9a, 0x2b, 0xd1, 0x6e, 0xcd, 0xa8, 0xc7) 32# define IID_InputMethod QUuid( 0x637a8a14, 0xaf98, 0x41da, 0x96, 0x9a, 0x2b, 0xd1, 0x6e, 0xcd, 0xa8, 0xc7)
33# endif 33# endif
34#endif 34#endif
35 35
36class QWidget; 36class QWidget;
37class QPixmap; 37class QPixmap;
38class QObject; 38class QObject;
39class QWSInputMethod; 39class QWSInputMethod;
40 40
41struct InputMethodInterface : public QUnknownInterface 41struct InputMethodInterface : public QUnknownInterface
42{ 42{
43 virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f ) = 0; 43 virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f ) = 0;
44 virtual void resetState() = 0; 44 virtual void resetState() = 0;
45 virtual QPixmap *icon() = 0; 45 virtual QPixmap *icon() = 0;
46 virtual QString name() = 0; 46 virtual QString name() = 0;
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
64#endif 75#endif
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
@@ -81,93 +81,67 @@
81 Constructs a QCopEnvelope that will write \a message to \a channel. 81 Constructs a QCopEnvelope that will write \a message to \a channel.
82 If \a message has parameters, you must then use operator<<() to 82 If \a message has parameters, you must then use operator<<() to
83 add these parameters to the envelope. 83 add these parameters to the envelope.
84*/ 84*/
85QCopEnvelope::QCopEnvelope( const QCString& channel, const QCString& message ) : 85QCopEnvelope::QCopEnvelope( const QCString& channel, const QCString& message ) :
86 QDataStream(new QBuffer), 86 QDataStream(new QBuffer),
87 ch(channel), msg(message) 87 ch(channel), msg(message)
88{ 88{
89 device()->open(IO_WriteOnly); 89 device()->open(IO_WriteOnly);
90} 90}
91 91
92/*! 92/*!
93 Writes the message and then destroys the QCopEnvelope. 93 Writes the message and then destroys the QCopEnvelope.
94*/ 94*/
95QCopEnvelope::~QCopEnvelope() 95QCopEnvelope::~QCopEnvelope()
96{ 96{
97 QByteArray data = ((QBuffer*)device())->buffer(); 97 QByteArray data = ((QBuffer*)device())->buffer();
98 const int pref=16; 98 const int pref=16;
99 if ( qstrncmp(ch.data(),"QPE/Application/",pref)==0 ) { 99 if ( qstrncmp(ch.data(),"QPE/Application/",pref)==0 ) {
100 QString qcopfn("/tmp/qcop-msg-"); 100 QString qcopfn("/tmp/qcop-msg-");
101 qcopfn += ch.mid(pref); 101 qcopfn += ch.mid(pref);
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 }
159 else if (qstrncmp(ch.data(), "QPE/SOAP/", 9) == 0) { 133 else if (qstrncmp(ch.data(), "QPE/SOAP/", 9) == 0) {
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
173#endif 147#endif
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index d1a7cd2..b1b7ed4 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -30,48 +30,51 @@
30#define private public 30#define private public
31#define sendLocally processEvent 31#define sendLocally processEvent
32#include "qcopenvelope_qws.h" 32#include "qcopenvelope_qws.h"
33#undef private 33#undef private
34#else 34#else
35#include "qcopenvelope_qws.h" 35#include "qcopenvelope_qws.h"
36#endif 36#endif
37#endif 37#endif
38#include <qwindowsystem_qws.h> 38#include <qwindowsystem_qws.h>
39#endif 39#endif
40#include <qtextstream.h> 40#include <qtextstream.h>
41#include <qpalette.h> 41#include <qpalette.h>
42#include <qbuffer.h> 42#include <qbuffer.h>
43#include <qptrdict.h> 43#include <qptrdict.h>
44#include <qregexp.h> 44#include <qregexp.h>
45#include <qdir.h> 45#include <qdir.h>
46#include <qlabel.h> 46#include <qlabel.h>
47#include <qdialog.h> 47#include <qdialog.h>
48#include <qdragobject.h> 48#include <qdragobject.h>
49#include <qtextcodec.h> 49#include <qtextcodec.h>
50#include <qevent.h> 50#include <qevent.h>
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"
57#if QT_VERSION >= 300 60#if QT_VERSION >= 300
58#include <qstylefactory.h> 61#include <qstylefactory.h>
59#else 62#else
60#include <qplatinumstyle.h> 63#include <qplatinumstyle.h>
61#include <qwindowsstyle.h> 64#include <qwindowsstyle.h>
62#include <qmotifstyle.h> 65#include <qmotifstyle.h>
63#include <qmotifplusstyle.h> 66#include <qmotifplusstyle.h>
64#include "lightstyle.h" 67#include "lightstyle.h"
65 68
66#include <qpe/qlibrary.h> 69#include <qpe/qlibrary.h>
67#endif 70#endif
68#include "global.h" 71#include "global.h"
69#include "resource.h" 72#include "resource.h"
70#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 73#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
71#include "qutfcodec.h" 74#include "qutfcodec.h"
72#endif 75#endif
73#include "config.h" 76#include "config.h"
74#include "network.h" 77#include "network.h"
75#ifdef QWS 78#ifdef QWS
76#include "fontmanager.h" 79#include "fontmanager.h"
77#endif 80#endif
@@ -284,48 +287,58 @@ public:
284 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 287 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
285 if ( !r ) { 288 if ( !r ) {
286 int sl = abs_name.length(); 289 int sl = abs_name.length();
287 do { 290 do {
288 sl = abs_name.findRev( '/', sl - 1 ); 291 sl = abs_name.findRev( '/', sl - 1 );
289 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 292 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
290 int dot = name.findRev( '.' ); 293 int dot = name.findRev( '.' );
291 if ( dot >= 0 ) 294 if ( dot >= 0 )
292 name = name.left( dot ); 295 name = name.left( dot );
293 QImage img = Resource::loadImage( name ); 296 QImage img = Resource::loadImage( name );
294 if ( !img.isNull() ) { 297 if ( !img.isNull() ) {
295 delete resImage; 298 delete resImage;
296 resImage = new QImageDrag( img ); 299 resImage = new QImageDrag( img );
297 r = resImage; 300 r = resImage;
298 } 301 }
299 } 302 }
300 while ( !r && sl > 0 ); 303 while ( !r && sl > 0 );
301 } 304 }
302 return r; 305 return r;
303 } 306 }
304private: 307private:
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
311static void setVolume( int t = 0, int percent = -1 ) 324static void setVolume( int t = 0, int percent = -1 )
312{ 325{
313 switch ( t ) { 326 switch ( t ) {
314 case 0: { 327 case 0: {
315 Config cfg( "qpe" ); 328 Config cfg( "qpe" );
316 cfg.setGroup( "Volume" ); 329 cfg.setGroup( "Volume" );
317 if ( percent < 0 ) 330 if ( percent < 0 )
318 percent = cfg.readNumEntry( "VolumePercent", 50 ); 331 percent = cfg.readNumEntry( "VolumePercent", 50 );
319 int fd = 0; 332 int fd = 0;
320 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 333 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
321 int vol = muted ? 0 : percent; 334 int vol = muted ? 0 : percent;
322 // set both channels to same volume 335 // set both channels to same volume
323 vol |= vol << 8; 336 vol |= vol << 8;
324 ioctl( fd, MIXER_WRITE( 0 ), &vol ); 337 ioctl( fd, MIXER_WRITE( 0 ), &vol );
325 ::close( fd ); 338 ::close( fd );
326 } 339 }
327 } 340 }
328 break; 341 break;
329 } 342 }
330} 343}
331 344
@@ -465,212 +478,293 @@ static void setTreble( int t = 0, int percent = -1 )
465 478
466 This signal is emitted if the week start day is changed. If \a 479 This signal is emitted if the week start day is changed. If \a
467 startOnMonday is TRUE then the first day of the week is Monday; if 480 startOnMonday is TRUE then the first day of the week is Monday; if
468 \a startOnMonday is FALSE then the first day of the week is 481 \a startOnMonday is FALSE then the first day of the week is
469 Sunday. 482 Sunday.
470*/ 483*/
471 484
472/*! 485/*!
473 \fn void QPEApplication::dateFormatChanged(DateFormat) 486 \fn void QPEApplication::dateFormatChanged(DateFormat)
474 487
475 This signal is emitted whenever the date format is changed. 488 This signal is emitted whenever the date format is changed.
476*/ 489*/
477 490
478/*! 491/*!
479 \fn void QPEApplication::flush() 492 \fn void QPEApplication::flush()
480 493
481 ### 494 ###
482*/ 495*/
483 496
484/*! 497/*!
485 \fn void QPEApplication::reload() 498 \fn void QPEApplication::reload()
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
492 This signal is emitted when a message is received on this 534 This signal is emitted when a message is received on this
493 application's QPE/Application/<i>appname</i> \link qcop.html 535 application's QPE/Application/<i>appname</i> \link qcop.html
494 QCop\endlink channel. 536 QCop\endlink channel.
495 537
496 The slot to which you connect this signal uses \a msg and \a data 538 The slot to which you connect this signal uses \a msg and \a data
497 in the following way: 539 in the following way:
498 540
499\code 541\code
500 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 542 void MyWidget::receive( const QCString& msg, const QByteArray& data )
501 { 543 {
502 QDataStream stream( data, IO_ReadOnly ); 544 QDataStream stream( data, IO_ReadOnly );
503 if ( msg == "someMessage(int,int,int)" ) { 545 if ( msg == "someMessage(int,int,int)" ) {
504 int a,b,c; 546 int a,b,c;
505 stream >> a >> b >> c; 547 stream >> a >> b >> c;
506 ... 548 ...
507 } else if ( msg == "otherMessage(QString)" ) { 549 } else if ( msg == "otherMessage(QString)" ) {
508 ... 550 ...
509 } 551 }
510 } 552 }
511\endcode 553\endcode
512 554
513 \sa qcop.html 555 \sa qcop.html
514 Note that messages received here may be processed by qpe application 556 Note that messages received here may be processed by qpe application
515 and emitted as signals, such as flush() and reload(). 557 and emitted as signals, such as flush() and reload().
516*/ 558*/
517 559
518/*! 560/*!
519 Constructs a QPEApplication just as you would construct 561 Constructs a QPEApplication just as you would construct
520 a QApplication, passing \a argc, \a argv, and \a t. 562 a QApplication, passing \a argc, \a argv, and \a t.
521 563
522 For applications, \a t should be the default, GuiClient. Only 564 For applications, \a t should be the default, GuiClient. Only
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();
530 d->loadImageCodecs(); 572 d->loadImageCodecs();
531 int dw = desktop() ->width(); 573 int dw = desktop() ->width();
532 574
533 if ( dw < 200 ) { 575 if ( dw < 200 ) {
534 setFont( QFont( "vera", 8 ) ); 576 setFont( QFont( "vera", 8 ) );
535 AppLnk::setSmallIconSize( 10 ); 577 AppLnk::setSmallIconSize( 10 );
536 AppLnk::setBigIconSize( 28 ); 578 AppLnk::setBigIconSize( 28 );
537 } 579 }
538#ifndef QT_QWS_SIMPAD 580#ifndef QT_QWS_SIMPAD
539 else if ( dw > 600 ) { 581 else if ( dw > 600 ) {
540 setFont( QFont( "vera", 16 ) ); 582 setFont( QFont( "vera", 16 ) );
541 AppLnk::setSmallIconSize( 24 ); 583 AppLnk::setSmallIconSize( 24 );
542 AppLnk::setBigIconSize( 48 ); 584 AppLnk::setBigIconSize( 48 );
543 } 585 }
544#endif 586#endif
545 else if ( dw > 200 ) { 587 else if ( dw > 200 ) {
546 setFont( QFont( "vera", 10 ) ); 588 setFont( QFont( "vera", 10 ) );
547 AppLnk::setSmallIconSize( 14 ); 589 AppLnk::setSmallIconSize( 14 );
548 AppLnk::setBigIconSize( 32 ); 590 AppLnk::setBigIconSize( 32 );
549 } 591 }
550 592
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-" );
557 qcopfn += QString( argv[ 0 ] ); // append command name 607 qcopfn += QString( argv[ 0 ] ); // append command name
558 608
559 QFile f( qcopfn ); 609 QFile f( qcopfn );
560 if ( f.open( IO_ReadOnly ) ) { 610 if ( f.open( IO_ReadOnly ) ) {
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( ".*/" ), "" );
570 d->appName = channel; 618 d->appName = channel;
571 channel = "QPE/Application/" + channel; 619 channel = "QPE/Application/" + channel;
572 pidChannel = new QCopChannel( channel, this ); 620 pidChannel = new QCopChannel( channel, this );
573 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 621 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
574 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); 622 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) );
575 623
576 if ( f.isOpen() ) { 624 if ( f.isOpen() ) {
577 d->keep_running = FALSE; 625 d->keep_running = FALSE;
578 QDataStream ds( &f ); 626 QDataStream ds( &f );
579 QCString channel, message; 627 QCString channel, message;
580 QByteArray data; 628 QByteArray data;
581 while ( !ds.atEnd() ) { 629 while ( !ds.atEnd() ) {
582 ds >> channel >> message >> data; 630 ds >> channel >> message >> data;
583 d->enqueueQCop( channel, message, data ); 631 d->enqueueQCop( channel, message, data );
584 } 632 }
585 633
586 flock( f.handle(), LOCK_UN ); 634 flock( f.handle(), LOCK_UN );
587 f.close(); 635 f.close();
588 f.remove(); 636 f.remove();
589 } 637 }
590 638
591 for ( int a = 0; a < argc; a++ ) { 639 for ( int a = 0; a < argc; a++ ) {
592 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 640 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
593 argv[ a ] = argv[ a + 1 ]; 641 argv[ a ] = argv[ a + 1 ];
594 a++; 642 a++;
595 d->preloaded = TRUE; 643 d->preloaded = TRUE;
596 argc -= 1; 644 argc -= 1;
597 } 645 }
598 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 646 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
599 argv[ a ] = argv[ a + 1 ]; 647 argv[ a ] = argv[ a + 1 ];
600 a++; 648 a++;
601 d->preloaded = TRUE; 649 d->preloaded = TRUE;
602 d->forceshow = TRUE; 650 d->forceshow = TRUE;
603 argc -= 1; 651 argc -= 1;
604 } 652 }
605 } 653 }
606 654
607 /* overide stored arguments */ 655 /* overide stored arguments */
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
615 665
616 QStringList langs = Global::languageList(); 666 QStringList langs = Global::languageList();
617 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) { 667 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) {
618 QString lang = *it; 668 QString lang = *it;
619 669
620 installTranslation( lang + "/libopie.qm"); 670 installTranslation( lang + "/libopie.qm");
621 installTranslation( lang + "/libqpe.qm" ); 671 installTranslation( lang + "/libqpe.qm" );
622 installTranslation( lang + "/" + d->appName + ".qm" ); 672 installTranslation( lang + "/" + d->appName + ".qm" );
623 673
624 674
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();
638 687
639 if ( type() == GuiServer ) { 688 if ( type() == GuiServer ) {
640 setVolume(); 689 setVolume();
641 } 690 }
642 691
643 installEventFilter( this ); 692 installEventFilter( this );
644 693
645 QPEMenuToolFocusManager::initialize(); 694 QPEMenuToolFocusManager::initialize();
646 695
647#ifdef QT_NO_QWS_CURSOR 696#ifdef QT_NO_QWS_CURSOR
648 // if we have no cursor, probably don't want tooltips 697 // if we have no cursor, probably don't want tooltips
649 QToolTip::setEnabled( FALSE ); 698 QToolTip::setEnabled( FALSE );
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{
656 if ( !inputMethodDict ) 750 if ( !inputMethodDict )
657 inputMethodDict = new QPtrDict<void>; 751 inputMethodDict = new QPtrDict<void>;
658} 752}
659 753
660/*! 754/*!
661 Returns the currently set hint to the system as to whether 755 Returns the currently set hint to the system as to whether
662 widget \a w has any use for text input methods. 756 widget \a w has any use for text input methods.
663 757
664 758
665 \sa setInputMethodHint() InputMethodHint 759 \sa setInputMethodHint() InputMethodHint
666*/ 760*/
667QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 761QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
668{ 762{
669 if ( inputMethodDict && w ) 763 if ( inputMethodDict && w )
670 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 764 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
671 return Normal; 765 return Normal;
672} 766}
673 767
674/*! 768/*!
675 \enum QPEApplication::InputMethodHint 769 \enum QPEApplication::InputMethodHint
676 770
@@ -1103,62 +1197,48 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data
1103 else if ( msg == "language(QString)" ) { 1197 else if ( msg == "language(QString)" ) {
1104 if ( type() == GuiServer ) { 1198 if ( type() == GuiServer ) {
1105 QString l; 1199 QString l;
1106 stream >> l; 1200 stream >> l;
1107 QString cl = getenv( "LANG" ); 1201 QString cl = getenv( "LANG" );
1108 if ( cl != l ) { 1202 if ( cl != l ) {
1109 if ( l.isNull() ) 1203 if ( l.isNull() )
1110 unsetenv( "LANG" ); 1204 unsetenv( "LANG" );
1111 else 1205 else
1112 setenv( "LANG", l.latin1(), 1 ); 1206 setenv( "LANG", l.latin1(), 1 );
1113 restart(); 1207 restart();
1114 } 1208 }
1115 } 1209 }
1116 } 1210 }
1117 else if ( msg == "timeChange(QString)" ) { 1211 else if ( msg == "timeChange(QString)" ) {
1118 QString t; 1212 QString t;
1119 stream >> t; 1213 stream >> t;
1120 if ( t.isNull() ) 1214 if ( t.isNull() )
1121 unsetenv( "TZ" ); 1215 unsetenv( "TZ" );
1122 else 1216 else
1123 setenv( "TZ", t.latin1(), 1 ); 1217 setenv( "TZ", t.latin1(), 1 );
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;
1144 QCString channel, message; 1224 QCString channel, message;
1145 int data; 1225 int data;
1146 stream >> when >> channel >> message >> data; 1226 stream >> when >> channel >> message >> data;
1147 AlarmServer::addAlarm( when, channel, message, data ); 1227 AlarmServer::addAlarm( when, channel, message, data );
1148 } 1228 }
1149 } 1229 }
1150 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1230 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1151 if ( type() == GuiServer ) { 1231 if ( type() == GuiServer ) {
1152 QDateTime when; 1232 QDateTime when;
1153 QCString channel, message; 1233 QCString channel, message;
1154 int data; 1234 int data;
1155 stream >> when >> channel >> message >> data; 1235 stream >> when >> channel >> message >> data;
1156 AlarmServer::deleteAlarm( when, channel, message, data ); 1236 AlarmServer::deleteAlarm( when, channel, message, data );
1157 } 1237 }
1158 } 1238 }
1159 else if ( msg == "clockChange(bool)" ) { 1239 else if ( msg == "clockChange(bool)" ) {
1160 int tmp; 1240 int tmp;
1161 stream >> tmp; 1241 stream >> tmp;
1162 emit clockChanged( tmp ); 1242 emit clockChanged( tmp );
1163 } 1243 }
1164 else if ( msg == "weekChange(bool)" ) { 1244 else if ( msg == "weekChange(bool)" ) {
@@ -1187,50 +1267,64 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data
1187 stream >> t >> v; 1267 stream >> t >> v;
1188 setMic( t, v ); 1268 setMic( t, v );
1189 emit micChanged( micMuted ); 1269 emit micChanged( micMuted );
1190 } 1270 }
1191 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1271 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1192 stream >> micMuted; 1272 stream >> micMuted;
1193 setMic(); 1273 setMic();
1194 emit micChanged( micMuted ); 1274 emit micChanged( micMuted );
1195 } 1275 }
1196 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1276 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1197 int t, v; 1277 int t, v;
1198 stream >> t >> v; 1278 stream >> t >> v;
1199 setBass( t, v ); 1279 setBass( t, v );
1200 } 1280 }
1201 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1281 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1202 setBass(); 1282 setBass();
1203 } 1283 }
1204 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1284 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1205 int t, v; 1285 int t, v;
1206 stream >> t >> v; 1286 stream >> t >> v;
1207 setTreble( t, v ); 1287 setTreble( t, v );
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
1216} 1310}
1217 1311
1218/*! 1312/*!
1219 \internal 1313 \internal
1220*/ 1314*/
1221bool QPEApplication::raiseAppropriateWindow() 1315bool QPEApplication::raiseAppropriateWindow()
1222{ 1316{
1223 bool r = FALSE; 1317 bool r = FALSE;
1224 // ########## raise()ing main window should raise and set active 1318 // ########## raise()ing main window should raise and set active
1225 // ########## it and then all childen. This belongs in Qt/Embedded 1319 // ########## it and then all childen. This belongs in Qt/Embedded
1226 QWidget *top = d->qpe_main_widget; 1320 QWidget *top = d->qpe_main_widget;
1227 if ( !top ) 1321 if ( !top )
1228 top = mainWidget(); 1322 top = mainWidget();
1229 if ( top && d->keep_running ) { 1323 if ( top && d->keep_running ) {
1230 if ( top->isVisible() ) 1324 if ( top->isVisible() )
1231 r = TRUE; 1325 r = TRUE;
1232 else if (d->preloaded) { 1326 else if (d->preloaded) {
1233 // We are preloaded and not visible.. pretend we just started.. 1327 // We are preloaded and not visible.. pretend we just started..
1234 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1328 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1235 e << d->appName; 1329 e << d->appName;
1236 } 1330 }
@@ -1285,49 +1379,53 @@ void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1285 raiseAppropriateWindow(); 1379 raiseAppropriateWindow();
1286 // Tell the system we're still chugging along... 1380 // Tell the system we're still chugging along...
1287 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1381 QCopEnvelope e("QPE/System", "appRaised(QString)");
1288 e << d->appName; 1382 e << d->appName;
1289 } 1383 }
1290 else if ( msg == "flush()" ) { 1384 else if ( msg == "flush()" ) {
1291 emit flush(); 1385 emit flush();
1292 // we need to tell the desktop 1386 // we need to tell the desktop
1293 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1387 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1294 e << d->appName; 1388 e << d->appName;
1295 } 1389 }
1296 else if ( msg == "reload()" ) { 1390 else if ( msg == "reload()" ) {
1297 emit reload(); 1391 emit reload();
1298 } 1392 }
1299 else if ( msg == "setDocument(QString)" ) { 1393 else if ( msg == "setDocument(QString)" ) {
1300 d->keep_running = TRUE; 1394 d->keep_running = TRUE;
1301 QDataStream stream( data, IO_ReadOnly ); 1395 QDataStream stream( data, IO_ReadOnly );
1302 QString doc; 1396 QString doc;
1303 stream >> doc; 1397 stream >> doc;
1304 QWidget *mw = mainWidget(); 1398 QWidget *mw = mainWidget();
1305 if ( !mw ) 1399 if ( !mw )
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);
1313 if ( d->keep_running ) { 1411 if ( d->keep_running ) {
1314 d->notbusysent = FALSE; 1412 d->notbusysent = FALSE;
1315 raiseAppropriateWindow(); 1413 raiseAppropriateWindow();
1316 if ( !p ) { 1414 if ( !p ) {
1317 // Tell the system we're still chugging along... 1415 // Tell the system we're still chugging along...
1318#ifndef QT_NO_COP 1416#ifndef QT_NO_COP
1319 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1417 QCopEnvelope e("QPE/System", "appRaised(QString)");
1320 e << d->appName; 1418 e << d->appName;
1321#endif 1419#endif
1322 } 1420 }
1323 } 1421 }
1324 if ( p ) 1422 if ( p )
1325 d->keep_running = p; 1423 d->keep_running = p;
1326 } 1424 }
1327#endif 1425#endif
1328} 1426}
1329 1427
1330 1428
1331/*! 1429/*!
1332 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1430 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1333 consider passing TRUE for \a nomaximize rather than the default FALSE. 1431 consider passing TRUE for \a nomaximize rather than the default FALSE.
diff --git a/library/qpeapplication.h b/library/qpeapplication.h
index 65a6d33..770ea23 100644
--- a/library/qpeapplication.h
+++ b/library/qpeapplication.h
@@ -61,92 +61,98 @@ public:
61 }; 61 };
62 static void setStylusOperation( QWidget*, StylusMode ); 62 static void setStylusOperation( QWidget*, StylusMode );
63 static StylusMode stylusOperation( QWidget* ); 63 static StylusMode stylusOperation( QWidget* );
64 64
65 enum InputMethodHint { 65 enum InputMethodHint {
66 Normal, 66 Normal,
67 AlwaysOff, 67 AlwaysOff,
68 AlwaysOn 68 AlwaysOn
69 }; 69 };
70 70
71 enum screenSaverHint { 71 enum screenSaverHint {
72 Disable = 0, 72 Disable = 0,
73 DisableLightOff = 1, 73 DisableLightOff = 1,
74 DisableSuspend = 2, 74 DisableSuspend = 2,
75 Enable = 100 75 Enable = 100
76 }; 76 };
77 77
78 static void setInputMethodHint( QWidget *, InputMethodHint ); 78 static void setInputMethodHint( QWidget *, InputMethodHint );
79 static InputMethodHint inputMethodHint( QWidget * ); 79 static InputMethodHint inputMethodHint( QWidget * );
80 80
81 void showMainWidget( QWidget*, bool nomax=FALSE ); 81 void showMainWidget( QWidget*, bool nomax=FALSE );
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;
88 92
89 bool keyboardGrabbed() const; 93 bool keyboardGrabbed() const;
90 94
91 int exec(); 95 int exec();
92 96
93signals: 97signals:
94 void clientMoused(); 98 void clientMoused();
95 void timeChanged(); 99 void timeChanged();
96 void clockChanged( bool pm ); 100 void clockChanged( bool pm );
97 void micChanged( bool muted ); 101 void micChanged( bool muted );
98 void volumeChanged( bool muted ); 102 void volumeChanged( bool muted );
99 void appMessage( const QCString& msg, const QByteArray& data); 103 void appMessage( const QCString& msg, const QByteArray& data);
100 void weekChanged( bool startOnMonday ); 104 void weekChanged( bool startOnMonday );
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 );
107 void pidMessage( const QCString &msg, const QByteArray &data ); 112 void pidMessage( const QCString &msg, const QByteArray &data );
108 void removeSenderFromStylusDict(); 113 void removeSenderFromStylusDict();
109 void hideOrQuit(); 114 void hideOrQuit();
110 115
111protected: 116protected:
112 bool qwsEventFilter( QWSEvent * ); 117 bool qwsEventFilter( QWSEvent * );
113 void internalSetStyle( const QString &style ); 118 void internalSetStyle( const QString &style );
114 void prepareForTermination(bool willrestart); 119 void prepareForTermination(bool willrestart);
115 virtual void restart(); 120 virtual void restart();
116 virtual void shutdown(); 121 virtual void shutdown();
117 bool eventFilter( QObject *, QEvent * ); 122 bool eventFilter( QObject *, QEvent * );
118 void timerEvent( QTimerEvent * ); 123 void timerEvent( QTimerEvent * );
119 bool raiseAppropriateWindow(); 124 bool raiseAppropriateWindow();
120 virtual void tryQuit(); 125 virtual void tryQuit();
121#if QT_VERSION > 233 126#if QT_VERSION > 233
122 virtual void polish ( QWidget * ); // this is actually implemented in qt_override.cpp (!) 127 virtual void polish ( QWidget * ); // this is actually implemented in qt_override.cpp (!)
123#endif 128#endif
124private: 129private:
125#ifndef QT_NO_TRANSLATION 130#ifndef QT_NO_TRANSLATION
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;
132 QCopChannel *pidChannel; 138 QCopChannel *pidChannel;
133#endif 139#endif
134 QPEApplicationData *d; 140 QPEApplicationData *d;
135 141
136 bool reserved_sh; 142 bool reserved_sh;
137 143
138 144
139 145
140}; 146};
141 147
142inline void QPEApplication::showDialog( QDialog* d, bool nomax ) 148inline void QPEApplication::showDialog( QDialog* d, bool nomax )
143{ 149{
144 QSize sh = d->sizeHint(); 150 QSize sh = d->sizeHint();
145 int w = QMAX(sh.width(),d->width()); 151 int w = QMAX(sh.width(),d->width());
146 int h = QMAX(sh.height(),d->height()); 152 int h = QMAX(sh.height(),d->height());
147 if ( !nomax 153 if ( !nomax
148 && ( w > qApp->desktop()->width()*3/4 154 && ( w > qApp->desktop()->width()*3/4
149 || h > qApp->desktop()->height()*3/4 ) ) 155 || h > qApp->desktop()->height()*3/4 ) )
150 { 156 {
151 d->showMaximized(); 157 d->showMaximized();
152 } else { 158 } else {