summaryrefslogtreecommitdiff
authorzecke <zecke>2003-02-10 21:36:08 (UTC)
committer zecke <zecke>2003-02-10 21:36:08 (UTC)
commiteb9be7ada3de060d8c5ce52590bd91120ed5e1bd (patch) (unidiff)
tree58a5566691737f6f3ee12fa7005b8bdf2d12332b
parentbbb3cdf8f91d567f6c2e786bd144b64bd679ff9a (diff)
downloadopie-eb9be7ada3de060d8c5ce52590bd91120ed5e1bd.zip
opie-eb9be7ada3de060d8c5ce52590bd91120ed5e1bd.tar.gz
opie-eb9be7ada3de060d8c5ce52590bd91120ed5e1bd.tar.bz2
better commit that...
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--x11/ipc/client/ocopclient.cpp8
-rw-r--r--x11/ipc/server/ocopserver.cpp38
-rw-r--r--x11/libqpe-x11/qpe/qpeapplication.cpp4
-rw-r--r--x11/libqpe-x11/qt/qcopchannel_qws.cpp11
4 files changed, 34 insertions, 27 deletions
diff --git a/x11/ipc/client/ocopclient.cpp b/x11/ipc/client/ocopclient.cpp
index 91827e7..f59fa41 100644
--- a/x11/ipc/client/ocopclient.cpp
+++ b/x11/ipc/client/ocopclient.cpp
@@ -1,167 +1,167 @@
1#include <errno.h> 1#include <errno.h>
2#include <stdlib.h> 2#include <stdlib.h>
3#include <stdio.h> 3#include <stdio.h>
4#include <unistd.h> 4#include <unistd.h>
5#include <sys/socket.h> 5#include <sys/socket.h>
6#include <sys/types.h> 6#include <sys/types.h>
7#include <sys/un.h> 7#include <sys/un.h>
8 8
9 9
10#include <qfile.h> 10#include <qfile.h>
11#include <qtimer.h> 11#include <qtimer.h>
12 12
13#include "../common/ocoppacket.h" 13#include "../common/ocoppacket.h"
14 14
15#include "ocopclient.h" 15#include "ocopclient.h"
16 16
17OCOPClient* OCOPClient::m_self = 0; 17OCOPClient* OCOPClient::m_self = 0;
18 18
19OCOPClient* OCOPClient::self() { 19OCOPClient* OCOPClient::self() {
20 if (!m_self ) { 20 if (!m_self ) {
21 m_self = new OCOPClient(); 21 m_self = new OCOPClient();
22 } 22 }
23 return m_self; 23 return m_self;
24} 24}
25 25
26OCOPClient::OCOPClient( const QString& path, QObject* obj ) 26OCOPClient::OCOPClient( const QString& path, QObject* obj )
27 : QObject( obj ) 27 : QObject( obj )
28{ 28{
29 m_tries = 0; 29 m_tries = 0;
30 init(QFile::encodeName(path) ); 30 init(QFile::encodeName(path) );
31} 31}
32OCOPClient::~OCOPClient() { 32OCOPClient::~OCOPClient() {
33 delete m_notify; 33 delete m_notify;
34 close( m_socket ); 34 close( m_socket );
35} 35}
36void OCOPClient::init() { 36void OCOPClient::init() {
37 // failed start ther server NOW!!! 37 // failed start ther server NOW!!!
38 startUP(); 38 startUP();
39 QCString str; 39 QCString str;
40 init(str ); 40 init(str );
41} 41}
42void OCOPClient::init( const QCString& ) { 42void OCOPClient::init( const QCString& ) {
43 m_tries++; 43 m_tries++;
44 struct sockaddr_un unix_adr; 44 struct sockaddr_un unix_adr;
45 if ( (m_socket = socket(PF_UNIX, SOCK_STREAM, 0) ) < 0 ) { 45 if ( (m_socket = socket(PF_UNIX, SOCK_STREAM, 0) ) < 0 ) {
46 qWarning("could not socket"); 46 qWarning("could not socket");
47 if ( m_tries < 8 ) 47 if ( m_tries < 8 )
48 QTimer::singleShot(400, this,SLOT(init() ) ); 48 QTimer::singleShot(400, this,SLOT(init() ) );
49 return; 49 return;
50 } 50 }
51 memset(&unix_adr, 0, sizeof(unix_adr ) ); 51 memset(&unix_adr, 0, sizeof(unix_adr ) );
52 unix_adr.sun_family = AF_UNIX; 52 unix_adr.sun_family = AF_UNIX;
53 sprintf(unix_adr.sun_path,"%s/.opie.cop", getenv("HOME") ); 53 sprintf(unix_adr.sun_path,"%s/.opie.cop", getenv("HOME") );
54 int length = sizeof(unix_adr.sun_family) + strlen(unix_adr.sun_path); 54 int length = sizeof(unix_adr.sun_family) + strlen(unix_adr.sun_path);
55 55
56 if ( ::connect(m_socket, (struct sockaddr*)&unix_adr, length ) < 0 ) { 56 if ( ::connect(m_socket, (struct sockaddr*)&unix_adr, length ) < 0 ) {
57 qWarning("could not connect %d", errno ); 57 qWarning("could not connect %d", errno );
58 close( m_socket ); 58 close( m_socket );
59 if ( m_tries < 8 ) 59 if ( m_tries < 8 )
60 QTimer::singleShot(400, this, SLOT(init() ) ); 60 QTimer::singleShot(400, this, SLOT(init() ) );
61 return; 61 return;
62 } 62 }
63 m_notify = new QSocketNotifier(m_socket, QSocketNotifier::Read, this ); 63 m_notify = new QSocketNotifier(m_socket, QSocketNotifier::Read, this );
64 connect( m_notify, SIGNAL(activated(int) ), 64 connect( m_notify, SIGNAL(activated(int) ),
65 this, SLOT(newData() ) ); 65 this, SLOT(newData() ) );
66} 66}
67/** 67/**
68 * new data 68 * new data
69 * read the header check magic number 69 * read the header check magic number
70 * and maybe read body 70 * and maybe read body
71 */ 71 */
72void OCOPClient::newData() { 72void OCOPClient::newData() {
73 OCOPPacket pack = packet(); 73 OCOPPacket pack = packet();
74 if ( pack.channel().isEmpty() ) 74 if ( pack.channel().isEmpty() )
75 return; 75 return;
76 76
77 switch( pack.type() ) { 77 switch( pack.type() ) {
78 case OCOPPacket::Register: 78 case OCOPPacket::Register:
79 case OCOPPacket::Unregister: 79 case OCOPPacket::Unregister:
80 case OCOPPacket::Method: 80 case OCOPPacket::Method:
81 case OCOPPacket::RegisterChannel: 81 case OCOPPacket::RegisterChannel:
82 case OCOPPacket::UnregisterChannel: 82 case OCOPPacket::UnregisterChannel:
83 case OCOPPacket::Return: 83 case OCOPPacket::Return:
84 case OCOPPacket::Signal: 84 case OCOPPacket::Signal:
85 /* is Registered should be handled sync */ 85 /* is Registered should be handled sync */
86 case OCOPPacket::IsRegistered: 86 case OCOPPacket::IsRegistered:
87 break; 87 break;
88 /* emit the signal */ 88 /* emit the signal */
89 case OCOPPacket::Call: 89 case OCOPPacket::Call:
90 emit called( pack.channel(), pack.header(), pack.content() ); 90 emit called( pack.channel(), pack.header(), pack.content() );
91 break; 91 break;
92 } 92 }
93} 93}
94OCOPPacket OCOPClient::packet() const{ 94OCOPPacket OCOPClient::packet() const{
95 QCString chan; 95 QCString chan;
96 QCString func; 96 QCString func;
97 QByteArray ar; 97 QByteArray ar;
98 OCOPHead head; 98 OCOPHead head;
99 memset(&head, 0, sizeof(head) ); 99 memset(&head, 0, sizeof(head) );
100 read(m_socket, &head, sizeof(head) ); 100 read(m_socket, &head, sizeof(head) );
101 if ( head.magic == 47 ) { 101 if ( head.magic == 47 ) {
102 qWarning("Client:Magic Match"); 102// qWarning("Client:Magic Match");
103 chan = QCString( head.chlen+1); 103 chan = QCString( head.chlen+1);
104 func = QCString( head.funclen+1 ); 104 func = QCString( head.funclen+1 );
105 ar = QByteArray( head.datalen); 105 ar = QByteArray( head.datalen);
106 read(m_socket, chan.data(), head.chlen ); 106 read(m_socket, chan.data(), head.chlen );
107 read(m_socket, func.data(), head.funclen ); 107 read(m_socket, func.data(), head.funclen );
108 read(m_socket, ar.data(), head.datalen ); 108 read(m_socket, ar.data(), head.datalen );
109 qWarning("Client:%d %s",head.chlen,chan.data() ); 109 //qWarning("Client:%d %s",head.chlen,chan.data() );
110 } 110 }
111 OCOPPacket pack(head.type, chan, func, ar ); 111 OCOPPacket pack(head.type, chan, func, ar );
112 return pack; 112 return pack;
113} 113}
114/* 114/*
115 * we've blocking IO here on these sockets 115 * we've blocking IO here on these sockets
116 * so we send and go on read 116 * so we send and go on read
117 * this will be blocked 117 * this will be blocked
118 */ 118 */
119bool OCOPClient::isRegistered( const QCString& chan ) const{ 119bool OCOPClient::isRegistered( const QCString& chan ) const{
120 qWarning("OCopClient::isRegistered %s", chan.data() ); 120// qWarning("OCopClient::isRegistered %s", chan.data() );
121 /* should I disconnect the socket notfier? */ 121 /* should I disconnect the socket notfier? */
122 OCOPPacket packe(OCOPPacket::IsRegistered, chan ); 122 OCOPPacket packe(OCOPPacket::IsRegistered, chan );
123 OCOPHead head = packe.head(); 123 OCOPHead head = packe.head();
124 write(m_socket, &head, sizeof(head) ); 124 write(m_socket, &head, sizeof(head) );
125 write(m_socket, chan.data(), chan.size() ); 125 write(m_socket, chan.data(), chan.size() );
126 /* block */ 126 /* block */
127 OCOPPacket pack = packet(); 127 OCOPPacket pack = packet();
128 qWarning("unblock %s %s", pack.channel().data(), chan.data() ); 128 qWarning("unblock %s %s", pack.channel().data(), chan.data() );
129 129
130 /* connect here again */ 130 /* connect here again */
131 if ( pack.channel() == chan ) { 131 if ( pack.channel() == chan ) {
132 QCString func = pack.header(); 132 QCString func = pack.header();
133 if (func[0] == 1 ) 133 if (func[0] == 1 )
134 return true; 134 return true;
135 } 135 }
136 136
137 return false; 137 return false;
138}; 138};
139void OCOPClient::send( const QCString& chan, const QCString& fu, const QByteArray& arr ) { 139void OCOPClient::send( const QCString& chan, const QCString& fu, const QByteArray& arr ) {
140 qWarning("ClientSending %s %s", chan.data(), fu.data() ); 140// qWarning("ClientSending %s %s", chan.data(), fu.data() );
141 OCOPPacket pack(OCOPPacket::Call, chan, fu, arr ); 141 OCOPPacket pack(OCOPPacket::Call, chan, fu, arr );
142 call( pack ); 142 call( pack );
143} 143}
144void OCOPClient::addChannel(const QCString& channel) { 144void OCOPClient::addChannel(const QCString& channel) {
145 OCOPPacket pack(OCOPPacket::RegisterChannel, channel ); 145 OCOPPacket pack(OCOPPacket::RegisterChannel, channel );
146 call( pack ); 146 call( pack );
147} 147}
148void OCOPClient::delChannel(const QCString& chan ) { 148void OCOPClient::delChannel(const QCString& chan ) {
149 OCOPPacket pack(OCOPPacket::UnregisterChannel, chan ); 149 OCOPPacket pack(OCOPPacket::UnregisterChannel, chan );
150 call( pack ); 150 call( pack );
151} 151}
152void OCOPClient::call( const OCOPPacket& pack ) { 152void OCOPClient::call( const OCOPPacket& pack ) {
153 OCOPHead head = pack.head(); 153 OCOPHead head = pack.head();
154 write(m_socket, &head, sizeof(head) ); 154 write(m_socket, &head, sizeof(head) );
155 write(m_socket, pack.channel().data(), pack.channel().size() ); 155 write(m_socket, pack.channel().data(), pack.channel().size() );
156 write(m_socket, pack.header().data(), pack.header().size() ); 156 write(m_socket, pack.header().data(), pack.header().size() );
157 write(m_socket, pack.content().data(), pack.content().size() ); 157 write(m_socket, pack.content().data(), pack.content().size() );
158} 158}
159void OCOPClient::startUP() { 159void OCOPClient::startUP() {
160 qWarning("Start me up"); 160 qWarning("Start me up");
161 pid_t pi = fork(); 161 pid_t pi = fork();
162 if ( pi == 0 ) { 162 if ( pi == 0 ) {
163 setsid(); 163 setsid();
164 execlp("ocopserver", "ocopserver", NULL ); 164 execlp("ocopserver", "ocopserver", NULL );
165 _exit(1); 165 _exit(1);
166 } 166 }
167} 167}
diff --git a/x11/ipc/server/ocopserver.cpp b/x11/ipc/server/ocopserver.cpp
index ee5ea18..992cb8c 100644
--- a/x11/ipc/server/ocopserver.cpp
+++ b/x11/ipc/server/ocopserver.cpp
@@ -1,413 +1,413 @@
1#include <errno.h> 1#include <errno.h>
2#include <signal.h> 2#include <signal.h>
3#include <stdio.h> 3#include <stdio.h>
4#include <stdlib.h> 4#include <stdlib.h>
5#include <unistd.h> 5#include <unistd.h>
6#include <sys/socket.h> 6#include <sys/socket.h>
7#include <sys/un.h> 7#include <sys/un.h>
8 8
9#include <qcstring.h> 9#include <qcstring.h>
10#include <qtimer.h> 10#include <qtimer.h>
11 11
12#include "ocopserver.h" 12#include "ocopserver.h"
13 13
14OCopServer::OCopServer() 14OCopServer::OCopServer()
15 : QObject() 15 : QObject()
16{ 16{
17 setName( "ocopserver"); 17 setName( "ocopserver");
18 18
19 /* 19 /*
20 * init the server 20 * init the server
21 */ 21 */
22 init(); 22 init();
23 initSocket(); 23 initSocket();
24} 24}
25OCopServer::~OCopServer() { 25OCopServer::~OCopServer() {
26// socket notifiers should be deleted 26// socket notifiers should be deleted
27 close(m_serverfd ); 27 close(m_serverfd );
28} 28}
29void OCopServer::init() { 29void OCopServer::init() {
30 /* 30 /*
31 * we set SIGPIPE to SIG_IGN 31 * we set SIGPIPE to SIG_IGN
32 * to get EPIPE on reads ;) 32 * to get EPIPE on reads ;)
33 */ 33 */
34 qWarning("SIGPIPE to be ignored"); 34// qWarning("SIGPIPE to be ignored");
35 signal(SIGPIPE, SIG_IGN ); 35 signal(SIGPIPE, SIG_IGN );
36 36
37 /* 37 /*
38 * initialize some variables 38 * initialize some variables
39 */ 39 */
40 m_server = 0l; 40 m_server = 0l;
41 m_serverError = 0l; 41 m_serverError = 0l;
42} 42}
43 43
44/** 44/**
45 * here we will init our server 45 * here we will init our server
46 * socket and bind and do the listen 46 * socket and bind and do the listen
47 */ 47 */
48void OCopServer::initSocket() { 48void OCopServer::initSocket() {
49 /* get the home dir */ 49 /* get the home dir */
50 QCString home( getenv("HOME") ); 50 QCString home( getenv("HOME") );
51 QCString path( home + "/.opie.cop"); 51 QCString path( home + "/.opie.cop");
52 52
53 if ( ( m_serverfd = socket( PF_UNIX, SOCK_STREAM, 0 ) ) == -1 ) { 53 if ( ( m_serverfd = socket( PF_UNIX, SOCK_STREAM, 0 ) ) == -1 ) {
54 qWarning("failed to create server socket"); 54 qWarning("failed to create server socket");
55 /* try again later */ 55 /* try again later */
56 QTimer::singleShot( 400, this, SLOT(initSocket() ) ); 56 QTimer::singleShot( 400, this, SLOT(initSocket() ) );
57 return; 57 return;
58 } 58 }
59 qWarning( "unlinking file %s", path.data() ); 59 qWarning( "unlinking file %s", path.data() );
60 60
61 /* unlink previous sockets */ 61 /* unlink previous sockets */
62 unlink( path.data() ); 62 unlink( path.data() );
63 63
64 struct sockaddr_un m_address; 64 struct sockaddr_un m_address;
65 memset(&m_address, 0, sizeof(m_address ) ); 65 memset(&m_address, 0, sizeof(m_address ) );
66 m_address.sun_family = AF_UNIX; /* unix domain socket */ 66 m_address.sun_family = AF_UNIX; /* unix domain socket */
67 strcpy(m_address.sun_path, path.data() ); 67 strcpy(m_address.sun_path, path.data() );
68 m_adrlaenge = sizeof(m_address.sun_family) + strlen(m_address.sun_path ); 68 m_adrlaenge = sizeof(m_address.sun_family) + strlen(m_address.sun_path );
69 69
70 /* cast to make it a (sockadr*) */ 70 /* cast to make it a (sockadr*) */
71 if (bind(m_serverfd, (struct sockaddr*)&m_address, m_adrlaenge ) == -1 ) { 71 if (bind(m_serverfd, (struct sockaddr*)&m_address, m_adrlaenge ) == -1 ) {
72 qWarning("Server could not bind try again"); 72 qWarning("Server could not bind try again");
73 close(m_serverfd); 73 close(m_serverfd);
74 QTimer::singleShot(400, this, SLOT(initSocket() ) ); 74 QTimer::singleShot(400, this, SLOT(initSocket() ) );
75 return; 75 return;
76 } 76 }
77 77
78 /* tell the kernel that we're listening and accepting 78 /* tell the kernel that we're listening and accepting
79 * 5 pending connections */ 79 * 5 pending connections */
80 if (listen(m_serverfd, 5) == -1 ) { 80 if (listen(m_serverfd, 5) == -1 ) {
81 qWarning("could not listen"); 81 qWarning("could not listen");
82 close(m_serverfd ); 82 close(m_serverfd );
83 QTimer::singleShot(400, this, SLOT(initSocket() ) ); 83 QTimer::singleShot(400, this, SLOT(initSocket() ) );
84 return; 84 return;
85 } 85 }
86 86
87 /* 87 /*
88 * now we will create two QSocketNotifier 88 * now we will create two QSocketNotifier
89 * which will us notify on reads 89 * which will us notify on reads
90 * and errors 90 * and errors
91 * we do this because they integrate 91 * we do this because they integrate
92 * nicely into the QApplication eventloop 92 * nicely into the QApplication eventloop
93 */ 93 */
94 m_server = new QSocketNotifier(m_serverfd, QSocketNotifier::Read, this ); 94 m_server = new QSocketNotifier(m_serverfd, QSocketNotifier::Read, this );
95 connect( m_server, SIGNAL(activated(int) ), 95 connect( m_server, SIGNAL(activated(int) ),
96 this, SLOT(newOnServer() ) ); 96 this, SLOT(newOnServer() ) );
97 97
98 m_serverError = new QSocketNotifier( m_serverfd, QSocketNotifier::Exception, this); 98 m_serverError = new QSocketNotifier( m_serverfd, QSocketNotifier::Exception, this);
99 connect(m_serverError, SIGNAL(activated(int) ), 99 connect(m_serverError, SIGNAL(activated(int) ),
100 this, SLOT(errorOnServer() ) ); 100 this, SLOT(errorOnServer() ) );
101 101
102 qWarning("done with registering"); 102 qWarning("done with registering");
103} 103}
104/** 104/**
105 * we got the possibility to read 105 * we got the possibility to read
106 * on the server 106 * on the server
107 * this is mostly due a connect 107 * this is mostly due a connect
108 * on a client side 108 * on a client side
109 * we will accept it 109 * we will accept it
110 * add it to our list 110 * add it to our list
111 */ 111 */
112void OCopServer::newOnServer() { 112void OCopServer::newOnServer() {
113 int fd = accept(); 113 int fd = accept();
114 if ( fd < 0 ) 114 if ( fd < 0 )
115 return; 115 return;
116 116
117 /* 117 /*
118 * we got a successfull new connection 118 * we got a successfull new connection
119 * be happy 119 * be happy
120 * set SocketNotifier 120 * set SocketNotifier
121 * connect it 121 * connect it
122 * and a OCOPClient 122 * and a OCOPClient
123 */ 123 */
124 qWarning("Heureka new connection %d", fd ); 124// qWarning("Heureka new connection %d", fd );
125 125
126 126
127 registerClient( fd ); 127 registerClient( fd );
128} 128}
129int OCopServer::accept() { 129int OCopServer::accept() {
130 /* 130 /*
131 * accept it 131 * accept it
132 * the socket is currently blocking IIRC 132 * the socket is currently blocking IIRC
133 */ 133 */
134 return ::accept( m_serverfd, (struct sockaddr*)&m_address, &m_adrlaenge ); 134 return ::accept( m_serverfd, (struct sockaddr*)&m_address, &m_adrlaenge );
135} 135}
136void OCopServer::newOnClient( int fd ) { 136void OCopServer::newOnClient( int fd ) {
137 errno = 0; 137 errno = 0;
138 OCOPHead head; 138 OCOPHead head;
139 memset(&head, 0, sizeof(head) ); 139 memset(&head, 0, sizeof(head) );
140 int rea = ::read(fd, &head, sizeof(head) ); 140 int rea = ::read(fd, &head, sizeof(head) );
141 //qWarning("read %d %d", rea, errno); 141 //qWarning("read %d %d", rea, errno);
142 /* 142 /*
143 * I should get EPIPE but nothing like this happens 143 * I should get EPIPE but nothing like this happens
144 * so if rea == 0 and we were signaled by the notifier 144 * so if rea == 0 and we were signaled by the notifier
145 * we close it and drop the clients... 145 * we close it and drop the clients...
146 */ 146 */
147 if ( rea <= 0 ) { 147 if ( rea <= 0 ) {
148 deregisterClient( fd ); 148 deregisterClient( fd );
149 return; 149 return;
150 } 150 }
151 /* 151 /*
152 * OCOPHead 152 * OCOPHead
153 */ 153 */
154 //qWarning("data %s %d", &bug, rea ); 154 //qWarning("data %s %d", &bug, rea );
155 155
156 /* 156 /*
157 * Check the magic 157 * Check the magic
158 * if chcked read till EOF if magic does not match 158 * if chcked read till EOF if magic does not match
159 * otherwise do read 159 * otherwise do read
160 * channel 160 * channel
161 * func 161 * func
162 * data into mem 162 * data into mem
163 * and then send the OCOPPacket 163 * and then send the OCOPPacket
164 * 164 *
165 */ 165 */
166 if (head.magic == 47 ) { 166 if (head.magic == 47 ) {
167// qWarning("magic match"); 167// qWarning("magic match");
168 QCString channel( head.chlen+1 ); 168 QCString channel( head.chlen+1 );
169 QCString func( head.funclen+1 ); 169 QCString func( head.funclen+1 );
170 QByteArray data ( head.datalen+1 ); 170 QByteArray data ( head.datalen+1 );
171 171
172 /* 172 /*
173 * we do not check for errors 173 * we do not check for errors
174 */ 174 */
175// qWarning("read "); 175// qWarning("read ");
176 int s = read(fd, channel.data(), head.chlen ); 176 int s = read(fd, channel.data(), head.chlen );
177 s = read(fd, func.data(), head.funclen ); 177 s = read(fd, func.data(), head.funclen );
178 s = read(fd, data.data(), head.datalen ); 178 s = read(fd, data.data(), head.datalen );
179// qWarning("read"); 179// qWarning("read");
180 180
181 /* debug output */ 181 /* debug output */
182// qWarning("channel %s %d", channel.data(), head.chlen ); 182// qWarning("channel %s %d", channel.data(), head.chlen );
183// qWarning("func %s %d", func.data(), head.funclen ); 183// qWarning("func %s %d", func.data(), head.funclen );
184 /* debug end */ 184 /* debug end */
185 185
186 /* 186 /*
187 * now that we got the complete body 187 * now that we got the complete body
188 * we need to make a package 188 * we need to make a package
189 * and then we need to send it to clients 189 * and then we need to send it to clients
190 * making a package is done here 190 * making a package is done here
191 * dispatching it not 191 * dispatching it not
192 */ 192 */
193 OCOPPacket packet( head.type, channel, func, data ); 193 OCOPPacket packet( head.type, channel, func, data );
194 dispatch( packet, fd ); 194 dispatch( packet, fd );
195 195
196 }else{ 196 }else{
197 qWarning("magic does not match"); 197// qWarning("magic does not match");
198 qWarning("magic %d", head.magic ); 198// qWarning("magic %d", head.magic );
199 } 199 }
200} 200}
201void OCopServer::registerClient( int fd ) { 201void OCopServer::registerClient( int fd ) {
202 if (m_clients.contains(fd) ) 202 if (m_clients.contains(fd) )
203 return; 203 return;
204 204
205 QSocketNotifier* notify = new QSocketNotifier(fd, QSocketNotifier::Read, this ); 205 QSocketNotifier* notify = new QSocketNotifier(fd, QSocketNotifier::Read, this );
206 connect(notify, SIGNAL(activated(int) ), 206 connect(notify, SIGNAL(activated(int) ),
207 this, SLOT(newOnClient(int) ) ); 207 this, SLOT(newOnClient(int) ) );
208 OCOPClient client; 208 OCOPClient client;
209 client.fd = fd; 209 client.fd = fd;
210 client.notify = notify; 210 client.notify = notify;
211 m_clients.insert( client.fd, client ); 211 m_clients.insert( client.fd, client );
212 qWarning("clients are up to %d", m_clients.count() ); 212// qWarning("clients are up to %d", m_clients.count() );
213}; 213};
214void OCopServer::deregisterClient(int fd ) { 214void OCopServer::deregisterClient(int fd ) {
215 QMap<int, OCOPClient>::Iterator it = m_clients.find( fd ); 215 QMap<int, OCOPClient>::Iterator it = m_clients.find( fd );
216 if (it != m_clients.end() ) { 216 if (it != m_clients.end() ) {
217 /* 217 /*
218 * TIME_ME 218 * TIME_ME
219 * 219 *
220 * now delete from all channels 220 * now delete from all channels
221 * go through all channels 221 * go through all channels
222 * remove the fd from the list 222 * remove the fd from the list
223 * if count becomes 0 remove the channel 223 * if count becomes 0 remove the channel
224 * otherwise replace QArray<int> 224 * otherwise replace QArray<int>
225 */ 225 */
226 QMap<QCString, QValueList<int> >::Iterator it2; 226 QMap<QCString, QValueList<int> >::Iterator it2;
227 repeatIt: 227 repeatIt:
228 for ( it2 = m_channels.begin(); it2 != m_channels.end(); ++it2 ) { 228 for ( it2 = m_channels.begin(); it2 != m_channels.end(); ++it2 ) {
229 /* 229 /*
230 * The channel contains this fd 230 * The channel contains this fd
231 */ 231 */
232 qWarning("Channel %s %d", it2.key().data(), it2.data().count() ); 232// qWarning("Channel %s %d", it2.key().data(), it2.data().count() );
233 if ( it2.data().contains( fd ) ) { 233 if ( it2.data().contains( fd ) ) {
234 qWarning("contains"); 234 qWarning("contains");
235 QValueList<int> array = it2.data(); 235 QValueList<int> array = it2.data();
236 236
237 /* 237 /*
238 * remove channel or just replace 238 * remove channel or just replace
239 */ 239 */
240 if ( array.count() == 1 || array.count() == 0) { 240 if ( array.count() == 1 || array.count() == 0) {
241 qWarning("Invalidate!"); 241// qWarning("Invalidate!");
242 /* is the list now invalidatet? */ 242 /* is the list now invalidatet? */
243 m_channels.remove( it2 ); 243 m_channels.remove( it2 );
244 /* That is the first go to of my life 244 /* That is the first go to of my life
245 * but Iterator remove( Iterator ) 245 * but Iterator remove( Iterator )
246 * does not exist 246 * does not exist
247 * it2 = --it2; 247 * it2 = --it2;
248 * does not work reliable too 248 * does not work reliable too
249 * so the only way is to reiterate :( 249 * so the only way is to reiterate :(
250 */ 250 */
251 goto repeatIt; 251 goto repeatIt;
252 }else{ 252 }else{
253 qWarning("removing count %d %d",fd, array.count() ); 253// qWarning("removing count %d %d",fd, array.count() );
254 QValueList<int>::Iterator it3 = array.find( fd ); 254 QValueList<int>::Iterator it3 = array.find( fd );
255 it3 = array.remove( it3 ); 255 it3 = array.remove( it3 );
256 QCString key = it2.key().copy(); 256 QCString key = it2.key().copy();
257 it2 = m_channels.replace( key, array ); 257 it2 = m_channels.replace( key, array );
258 } 258 }
259 } 259 }
260 } // off all channels 260 } // off all channels
261 OCOPClient client = it.data(); 261 OCOPClient client = it.data();
262 delete client.notify; 262 delete client.notify;
263 m_clients.remove(fd ); 263 m_clients.remove(fd );
264 close(fd ); 264 close(fd );
265 } 265 }
266 qWarning("clients are now at %d", m_clients.count() ); 266// qWarning("clients are now at %d", m_clients.count() );
267}; 267}
268/** 268/**
269 * this function will evaluate 269 * this function will evaluate
270 * the package and then do the appropriate thins 270 * the package and then do the appropriate thins
271 */ 271 */
272void OCopServer::dispatch( const OCOPPacket& packet, int sourceFD ) { 272void OCopServer::dispatch( const OCOPPacket& packet, int sourceFD ) {
273 qWarning("packet.type() == %d", packet.type() ); 273// qWarning("packet.type() == %d", packet.type() );
274 switch( packet.type() ) { 274 switch( packet.type() ) {
275 case OCOPPacket::Register: 275 case OCOPPacket::Register:
276 registerClient(sourceFD ); 276 registerClient(sourceFD );
277 break; 277 break;
278 case OCOPPacket::Unregister: 278 case OCOPPacket::Unregister:
279 deregisterClient(sourceFD ); 279 deregisterClient(sourceFD );
280 break; 280 break;
281 case OCOPPacket::Call: 281 case OCOPPacket::Call:
282 call( packet, sourceFD ); 282 call( packet, sourceFD );
283 break; 283 break;
284 /* not implemented */ 284 /* not implemented */
285 case OCOPPacket::Method: 285 case OCOPPacket::Method:
286 break; 286 break;
287 /* nit implemented */ 287 /* nit implemented */
288 case OCOPPacket::Reply: 288 case OCOPPacket::Reply:
289 break; 289 break;
290 case OCOPPacket::RegisterChannel: 290 case OCOPPacket::RegisterChannel:
291 addChannel( packet.channel() , sourceFD ); 291 addChannel( packet.channel() , sourceFD );
292 break; 292 break;
293 case OCOPPacket::UnregisterChannel: 293 case OCOPPacket::UnregisterChannel:
294 delChannel( packet.channel(), sourceFD ); 294 delChannel( packet.channel(), sourceFD );
295 break; 295 break;
296 /* not implemented */ 296 /* not implemented */
297 case OCOPPacket::Return: 297 case OCOPPacket::Return:
298 break; 298 break;
299 /* not implemented :( */ 299 /* not implemented :( */
300 case OCOPPacket::Signal: 300 case OCOPPacket::Signal:
301 break; 301 break;
302 case OCOPPacket::IsRegistered: 302 case OCOPPacket::IsRegistered:
303 qWarning("Server:IsRegistered %s", packet.channel().data() ); 303// qWarning("Server:IsRegistered %s", packet.channel().data() );
304 isRegistered( packet.channel(), sourceFD ); 304 isRegistered( packet.channel(), sourceFD );
305 break; 305 break;
306 }; 306 };
307} 307}
308void OCopServer::errorOnServer() { 308void OCopServer::errorOnServer() {
309 /* 309 /*
310 * something is wrong on the server socket? 310 * something is wrong on the server socket?
311 * what should we do? 311 * what should we do?
312 * FIXME 312 * FIXME
313 */ 313 */
314} 314}
315QStringList OCopServer::channels() { 315QStringList OCopServer::channels() {
316 QStringList list; 316 QStringList list;
317 { 317 {
318 QMap<QCString, QValueList<int> >::Iterator it; 318 QMap<QCString, QValueList<int> >::Iterator it;
319 for (it = m_channels.begin(); it != m_channels.end(); ++it ) { 319 for (it = m_channels.begin(); it != m_channels.end(); ++it ) {
320 list << it.key(); 320 list << it.key();
321 }; 321 };
322 } 322 }
323 return list; 323 return list;
324} 324}
325bool OCopServer::isChannelRegistered( const QCString& chan ) const{ 325bool OCopServer::isChannelRegistered( const QCString& chan ) const{
326 return m_channels.contains( chan ); 326 return m_channels.contains( chan );
327} 327}
328void OCopServer::addChannel( const QCString& channel, 328void OCopServer::addChannel( const QCString& channel,
329 int fd ) { 329 int fd ) {
330 QMap<QCString, QValueList<int> >::Iterator it; 330 QMap<QCString, QValueList<int> >::Iterator it;
331 it = m_channels.find( channel ); 331 it = m_channels.find( channel );
332 if ( it != m_channels.end() ) { 332 if ( it != m_channels.end() ) {
333 /* could be empty */ 333 /* could be empty */
334 QValueList<int> list = it.data(); 334 QValueList<int> list = it.data();
335 list.append( fd ); 335 list.append( fd );
336 qWarning("count is now in addChannel %d %s", list.count(), channel.data() ); 336 qWarning("Server:count is now in addChannel %d %s", list.count(), channel.data() );
337 it = m_channels.replace( channel, list ); 337 it = m_channels.replace( channel, list );
338 }else { 338 }else {
339 QValueList<int> ints; 339 QValueList<int> ints;
340 ints.append( fd ); 340 ints.append( fd );
341 m_channels.insert( channel, ints ); 341 m_channels.insert( channel, ints );
342 } 342 }
343}; 343};
344void OCopServer::delChannel( const QCString& channel, 344void OCopServer::delChannel( const QCString& channel,
345 int fd ) { 345 int fd ) {
346 qWarning("remove %s, %d", channel.data(), fd ); 346// qWarning("remove %s, %d", channel.data(), fd );
347 if (!m_channels.contains( channel ) ) 347 if (!m_channels.contains( channel ) )
348 return; 348 return;
349 349
350 QMap<QCString, QValueList<int> >::Iterator it; 350 QMap<QCString, QValueList<int> >::Iterator it;
351 it = m_channels.find( channel ); 351 it = m_channels.find( channel );
352 352
353 if ( it.data().contains(fd) ) { 353 if ( it.data().contains(fd) ) {
354 QValueList<int> ints = it.data(); 354 QValueList<int> ints = it.data();
355 if ( ints.count() == 1 ) 355 if ( ints.count() == 1 )
356 m_channels.remove( channel ); 356 m_channels.remove( channel );
357 else{ 357 else{
358 QValueList<int> ints = it.data(); 358 QValueList<int> ints = it.data();
359 QValueList<int>::Iterator rem = ints.find( fd ); 359 QValueList<int>::Iterator rem = ints.find( fd );
360 rem = ints.remove( rem ); 360 rem = ints.remove( rem );
361 QCString str = it.key().copy(); 361 QCString str = it.key().copy();
362 m_channels.replace( str, ints ); 362 m_channels.replace( str, ints );
363 } 363 }
364 qWarning(" channel count is now %d", ints.count() ); 364// qWarning(" channel count is now %d", ints.count() );
365 } 365 }
366} 366}
367void OCopServer::isRegistered( const QCString& channel, int fd) { 367void OCopServer::isRegistered( const QCString& channel, int fd) {
368 qWarning("Server:isRegistered %s", channel.data() ); 368// qWarning("Server:isRegistered %s", channel.data() );
369 OCOPHead head; 369 OCOPHead head;
370 QCString func(2); 370 QCString func(2);
371 371
372 memset(&head, 0, sizeof(head ) ); 372 memset(&head, 0, sizeof(head ) );
373 head.magic = 47; 373 head.magic = 47;
374 head.type = OCOPPacket::IsRegistered; 374 head.type = OCOPPacket::IsRegistered;
375 head.chlen = channel.size(); 375 head.chlen = channel.size();
376 head.funclen = func.size(); 376 head.funclen = func.size();
377 head.datalen = 0; 377 head.datalen = 0;
378 378
379 if ( isChannelRegistered( channel ) ) { 379 if ( isChannelRegistered( channel ) ) {
380 //is registered 380 //is registered
381 func[0] = 1; 381 func[0] = 1;
382 qWarning("Server:Channel is Registered %d", head.chlen); 382 //qWarning("Server:Channel is Registered %d", head.chlen);
383 }else{ 383 }else{
384 func[0] = 0; 384 func[0] = 0;
385 qWarning("Server:Channel is NotRegistered"); 385 //qWarning("Server:Channel is NotRegistered");
386 } 386 }
387 387
388 /** 388 /**
389 * write the head 389 * write the head
390 * and then channel 390 * and then channel
391 * success/failure inside func 391 * success/failure inside func
392 */ 392 */
393 write(fd, &head, sizeof(head) ); 393 write(fd, &head, sizeof(head) );
394 write(fd, channel.data(), channel.size() ); 394 write(fd, channel.data(), channel.size() );
395 write(fd, func.data(), func.size() ); 395 write(fd, func.data(), func.size() );
396} 396}
397QValueList<int> OCopServer::clients( const QCString& channel ) { 397QValueList<int> OCopServer::clients( const QCString& channel ) {
398 return m_channels[channel]; 398 return m_channels[channel];
399} 399}
400void OCopServer::call( const OCOPPacket& p, int ) { 400void OCopServer::call( const OCOPPacket& p, int ) {
401 QValueList<int> cli = clients( p.channel() ); 401 QValueList<int> cli = clients( p.channel() );
402 QValueList<int>::Iterator it; 402 QValueList<int>::Iterator it;
403 403
404 OCOPHead head = p.head(); 404 OCOPHead head = p.head();
405 for (it = cli.begin(); it != cli.end(); ++it ) { 405 for (it = cli.begin(); it != cli.end(); ++it ) {
406 qWarning("Server:calling %d %s %s", (*it), p.channel().data(), p.header().data() ); 406// qWarning("Server:calling %d %s %s", (*it), p.channel().data(), p.header().data() );
407 write( (*it), &head, sizeof(head ) ); 407 write( (*it), &head, sizeof(head ) );
408 /* expl. shared! */ 408 /* expl. shared! */
409 write( (*it), p.channel().data(), p.channel().size() ); 409 write( (*it), p.channel().data(), p.channel().size() );
410 write( (*it), p.header().data(), p.header().size() ); 410 write( (*it), p.header().data(), p.header().size() );
411 write( (*it), p.content().data(), p.content().size() ); 411 write( (*it), p.content().data(), p.content().size() );
412 }; 412 };
413} 413}
diff --git a/x11/libqpe-x11/qpe/qpeapplication.cpp b/x11/libqpe-x11/qpe/qpeapplication.cpp
index 49115d8..c4f8f38 100644
--- a/x11/libqpe-x11/qpe/qpeapplication.cpp
+++ b/x11/libqpe-x11/qpe/qpeapplication.cpp
@@ -1,788 +1,788 @@
1#define QTOPIA_INTERNAL_LANGLIST 1#define QTOPIA_INTERNAL_LANGLIST
2 2
3#include <stdio.h> 3#include <stdio.h>
4#include <stdlib.h> 4#include <stdlib.h>
5#include <unistd.h> 5#include <unistd.h>
6#include <sys/file.h> 6#include <sys/file.h>
7 7
8 8
9#include <qdir.h> 9#include <qdir.h>
10#include <qdialog.h> 10#include <qdialog.h>
11#include <qdragobject.h> 11#include <qdragobject.h>
12#include <qevent.h> 12#include <qevent.h>
13#include <qlabel.h> 13#include <qlabel.h>
14#include <qlist.h> 14#include <qlist.h>
15#include <qtextstream.h> 15#include <qtextstream.h>
16#include <qtextcodec.h> 16#include <qtextcodec.h>
17#include <qpalette.h> 17#include <qpalette.h>
18#include <qptrdict.h> 18#include <qptrdict.h>
19#include <qregexp.h> 19#include <qregexp.h>
20#include <qtimer.h> 20#include <qtimer.h>
21 21
22#include <qpe/alarmserver.h> 22#include <qpe/alarmserver.h>
23#include <qpe/applnk.h> 23#include <qpe/applnk.h>
24#include <qpe/qpemenubar.h> 24#include <qpe/qpemenubar.h>
25#include <qpe/textcodecinterface.h> 25#include <qpe/textcodecinterface.h>
26#include <qpe/imagecodecinterface.h> 26#include <qpe/imagecodecinterface.h>
27#include <qpe/qlibrary.h> 27#include <qpe/qlibrary.h>
28#include <qpe/qpestyle.h> 28#include <qpe/qpestyle.h>
29#include <qpe/styleinterface.h> 29#include <qpe/styleinterface.h>
30#include <qpe/global.h> 30#include <qpe/global.h>
31#include <qpe/resource.h> 31#include <qpe/resource.h>
32#include <qpe/config.h> 32#include <qpe/config.h>
33#include <qpe/network.h> 33#include <qpe/network.h>
34 34
35#include <qpe/qpeapplication.h> 35#include <qpe/qpeapplication.h>
36#include <qpe/timestring.h> 36#include <qpe/timestring.h>
37#include <qpe/qcopenvelope_qws.h> 37#include <qpe/qcopenvelope_qws.h>
38 38
39 39
40#include <X11/Xlib.h> 40#include <X11/Xlib.h>
41#include <X11/Xutil.h> 41#include <X11/Xutil.h>
42 42
43const int XKeyPress = KeyPress; 43const int XKeyPress = KeyPress;
44const int XKeyRelease = KeyRelease; 44const int XKeyRelease = KeyRelease;
45#undef KeyPress 45#undef KeyPress
46#undef KeyRelease 46#undef KeyRelease
47 47
48namespace { 48namespace {
49 struct QCopRec{ 49 struct QCopRec{
50 QCopRec( const QCString& ch, const QCString& msg, const QByteArray& ar ) 50 QCopRec( const QCString& ch, const QCString& msg, const QByteArray& ar )
51 : channel(ch), message(msg), data(ar) { 51 : channel(ch), message(msg), data(ar) {
52 52
53 } 53 }
54 QCString channel; 54 QCString channel;
55 QCString message; 55 QCString message;
56 QByteArray data; 56 QByteArray data;
57 }; 57 };
58}; 58};
59 59
60 60
61class QPEApplication::Private { 61class QPEApplication::Private {
62public: 62public:
63 Private(); 63 Private();
64 ~Private(); 64 ~Private();
65 void enqueueQCop( const QCString& ch, const QCString& msg, 65 void enqueueQCop( const QCString& ch, const QCString& msg,
66 const QByteArray& ); 66 const QByteArray& );
67 void sendQCopQ(); 67 void sendQCopQ();
68 static void show_mx(QWidget* mw, bool nomaximize ); 68 static void show_mx(QWidget* mw, bool nomaximize );
69 void show( QWidget* mw, bool nomax ); 69 void show( QWidget* mw, bool nomax );
70 void loadTextCodecs(); 70 void loadTextCodecs();
71 void loadImageCodecs(); 71 void loadImageCodecs();
72 72
73 int kbgrabber; 73 int kbgrabber;
74 int presstimer; 74 int presstimer;
75 75
76 bool rightpressed : 1; 76 bool rightpressed : 1;
77 bool kbregrab : 1; 77 bool kbregrab : 1;
78 bool notbusysent : 1; 78 bool notbusysent : 1;
79 bool preloaded : 1; 79 bool preloaded : 1;
80 bool forceshow : 1; 80 bool forceshow : 1;
81 bool nomaximize : 1; 81 bool nomaximize : 1;
82 bool keep_running : 1; 82 bool keep_running : 1;
83 83
84 QWidget* presswidget; 84 QWidget* presswidget;
85 QPoint presspos; 85 QPoint presspos;
86 QWidget* qpe_main_widget; 86 QWidget* qpe_main_widget;
87 QString appName; 87 QString appName;
88 QString styleName; 88 QString styleName;
89 QString decorationName; 89 QString decorationName;
90 Atom wm_delete_window; 90 Atom wm_delete_window;
91 Atom wm_take_focus; 91 Atom wm_take_focus;
92 Atom wm_context_help; 92 Atom wm_context_help;
93 Atom wm_context_accept; 93 Atom wm_context_accept;
94 Atom wm_protocols; 94 Atom wm_protocols;
95 95
96private: 96private:
97 QList<QCopRec> qcopq; 97 QList<QCopRec> qcopq;
98}; 98};
99QPEApplication::Private::~Private() { 99QPEApplication::Private::~Private() {
100} 100}
101QPEApplication::Private::Private() 101QPEApplication::Private::Private()
102 : kbgrabber(0 ), presstimer(0 ), rightpressed( FALSE ), kbregrab( FALSE ), notbusysent( FALSE ), 102 : kbgrabber(0 ), presstimer(0 ), rightpressed( FALSE ), kbregrab( FALSE ), notbusysent( FALSE ),
103 preloaded( FALSE ), forceshow( FALSE ), nomaximize( FALSE ), keep_running( TRUE ), 103 preloaded( FALSE ), forceshow( FALSE ), nomaximize( FALSE ), keep_running( TRUE ),
104 presswidget( 0 ), qpe_main_widget(0 ) { 104 presswidget( 0 ), qpe_main_widget(0 ) {
105 105
106 qcopq.setAutoDelete( TRUE ); 106 qcopq.setAutoDelete( TRUE );
107} 107}
108void QPEApplication::Private::enqueueQCop( const QCString& chan, const QCString& msg, 108void QPEApplication::Private::enqueueQCop( const QCString& chan, const QCString& msg,
109 const QByteArray& ar ) { 109 const QByteArray& ar ) {
110 qcopq.append( new QCopRec(chan, msg, ar ) ); 110 qcopq.append( new QCopRec(chan, msg, ar ) );
111} 111}
112void QPEApplication::Private::sendQCopQ() { 112void QPEApplication::Private::sendQCopQ() {
113 QCopRec* r; 113 QCopRec* r;
114 for ( r = qcopq.first(); r; r = qcopq.next() ) { 114 for ( r = qcopq.first(); r; r = qcopq.next() ) {
115 QCopChannel::sendLocally( r->channel, r->message, r->data ); 115 QCopChannel::sendLocally( r->channel, r->message, r->data );
116 } 116 }
117 qcopq.clear(); 117 qcopq.clear();
118} 118}
119void QPEApplication::Private::show_mx(QWidget* mw, bool nomaximize ) { 119void QPEApplication::Private::show_mx(QWidget* mw, bool nomaximize ) {
120 if (mw->layout() && mw->inherits("QDialog") ) { 120 if (mw->layout() && mw->inherits("QDialog") ) {
121 QPEApplication::showDialog( (QDialog*)mw, nomaximize ); 121 QPEApplication::showDialog( (QDialog*)mw, nomaximize );
122 }else { 122 }else {
123 if (!nomaximize ) 123 if (!nomaximize )
124 mw->showMaximized(); 124 mw->showMaximized();
125 else 125 else
126 mw->show(); 126 mw->show();
127 } 127 }
128} 128}
129void QPEApplication::Private::show( QWidget* mw, bool nomax ) { 129void QPEApplication::Private::show( QWidget* mw, bool nomax ) {
130 nomaximize = nomax; 130 nomaximize = nomax;
131 qpe_main_widget = mw; 131 qpe_main_widget = mw;
132 132
133 sendQCopQ(); 133 sendQCopQ();
134 134
135 if ( preloaded ) { 135 if ( preloaded ) {
136 if (forceshow ) 136 if (forceshow )
137 show_mx(mw, nomax ); 137 show_mx(mw, nomax );
138 }else if ( keep_running ) 138 }else if ( keep_running )
139 show_mx( mw, nomax ); 139 show_mx( mw, nomax );
140} 140}
141void QPEApplication::Private::loadTextCodecs() { 141void QPEApplication::Private::loadTextCodecs() {
142 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; 142 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs";
143 QDir dir( path, "lib*.so" ); 143 QDir dir( path, "lib*.so" );
144 QStringList list = dir.entryList(); 144 QStringList list = dir.entryList();
145 QStringList::Iterator it; 145 QStringList::Iterator it;
146 for ( it = list.begin(); it != list.end(); ++it ) { 146 for ( it = list.begin(); it != list.end(); ++it ) {
147 TextCodecInterface *iface = 0; 147 TextCodecInterface *iface = 0;
148 QLibrary *lib = new QLibrary( path + "/" + *it ); 148 QLibrary *lib = new QLibrary( path + "/" + *it );
149 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 149 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
150 QValueList<int> mibs = iface->mibEnums(); 150 QValueList<int> mibs = iface->mibEnums();
151 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { 151 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) {
152 (void)iface->createForMib(*i); 152 (void)iface->createForMib(*i);
153 // ### it exists now; need to remember if we can delete it 153 // ### it exists now; need to remember if we can delete it
154 } 154 }
155 } 155 }
156 else { 156 else {
157 lib->unload(); 157 lib->unload();
158 delete lib; 158 delete lib;
159 } 159 }
160 } 160 }
161} 161}
162void QPEApplication::Private::loadImageCodecs() { 162void QPEApplication::Private::loadImageCodecs() {
163 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 163 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
164 QDir dir( path, "lib*.so" ); 164 QDir dir( path, "lib*.so" );
165 QStringList list = dir.entryList(); 165 QStringList list = dir.entryList();
166 QStringList::Iterator it; 166 QStringList::Iterator it;
167 for ( it = list.begin(); it != list.end(); ++it ) { 167 for ( it = list.begin(); it != list.end(); ++it ) {
168 ImageCodecInterface *iface = 0; 168 ImageCodecInterface *iface = 0;
169 QLibrary *lib = new QLibrary( path + "/" + *it ); 169 QLibrary *lib = new QLibrary( path + "/" + *it );
170 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 170 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
171 QStringList formats = iface->keys(); 171 QStringList formats = iface->keys();
172 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { 172 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) {
173 (void)iface->installIOHandler(*i); 173 (void)iface->installIOHandler(*i);
174 // ### it exists now; need to remember if we can delete it 174 // ### it exists now; need to remember if we can delete it
175 } 175 }
176 } 176 }
177 else { 177 else {
178 lib->unload(); 178 lib->unload();
179 delete lib; 179 delete lib;
180 } 180 }
181 } 181 }
182} 182}
183 183
184// The Help System hook 184// The Help System hook
185namespace { 185namespace {
186 class ResourceMimeFactory : public QMimeSourceFactory 186 class ResourceMimeFactory : public QMimeSourceFactory
187 { 187 {
188 public: 188 public:
189 ResourceMimeFactory(); 189 ResourceMimeFactory();
190 ~ResourceMimeFactory(); 190 ~ResourceMimeFactory();
191 const QMimeSource* data( const QString& abs_name )const; 191 const QMimeSource* data( const QString& abs_name )const;
192 }; 192 };
193 ResourceMimeFactory::ResourceMimeFactory() 193 ResourceMimeFactory::ResourceMimeFactory()
194 { 194 {
195 setFilePath( Global::helpPath() ); 195 setFilePath( Global::helpPath() );
196 setExtensionType( "html", "text/html;charset=UTF-8" ); 196 setExtensionType( "html", "text/html;charset=UTF-8" );
197 } 197 }
198 ResourceMimeFactory::~ResourceMimeFactory() { 198 ResourceMimeFactory::~ResourceMimeFactory() {
199 } 199 }
200 200
201 const QMimeSource* ResourceMimeFactory::data( const QString& abs_name ) const 201 const QMimeSource* ResourceMimeFactory::data( const QString& abs_name ) const
202 { 202 {
203 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 203 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
204 if ( !r ) { 204 if ( !r ) {
205 int sl = abs_name.length(); 205 int sl = abs_name.length();
206 do { 206 do {
207 sl = abs_name.findRev( '/', sl - 1 ); 207 sl = abs_name.findRev( '/', sl - 1 );
208 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 208 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
209 int dot = name.findRev( '.' ); 209 int dot = name.findRev( '.' );
210 if ( dot >= 0 ) 210 if ( dot >= 0 )
211 name = name.left( dot ); 211 name = name.left( dot );
212 QImage img = Resource::loadImage( name ); 212 QImage img = Resource::loadImage( name );
213 if ( !img.isNull() ) 213 if ( !img.isNull() )
214 r = new QImageDrag( img ); 214 r = new QImageDrag( img );
215 } 215 }
216 while ( !r && sl > 0 ); 216 while ( !r && sl > 0 );
217 } 217 }
218 return r; 218 return r;
219 }; 219 };
220}; 220};
221// QPEApplication 221// QPEApplication
222QPEApplication::~QPEApplication() { 222QPEApplication::~QPEApplication() {
223 qWarning("~QPEApplication"); 223 qWarning("~QPEApplication");
224 ungrabKeyboard(); 224 ungrabKeyboard();
225 qWarning("UngrabKeyboard"); 225 qWarning("UngrabKeyboard");
226 226
227// delete m_sys; 227// delete m_sys;
228// delete m_pid; 228// delete m_pid;
229 229
230 delete d; 230 delete d;
231} 231}
232QPEApplication::QPEApplication(int &arg, char** argv, Type t) 232QPEApplication::QPEApplication(int &arg, char** argv, Type t)
233 : QApplication( arg, argv, t ) { 233 : QApplication( arg, argv, t ) {
234 d = new Private; 234 d = new Private;
235 d->loadTextCodecs(); 235 d->loadTextCodecs();
236 d->loadImageCodecs(); 236 d->loadImageCodecs();
237 237
238 // Init X-Atom 238 // Init X-Atom
239 Atom *atoms[5]; 239 Atom *atoms[5];
240 Atom atoms_re[5]; 240 Atom atoms_re[5];
241 char* names[5]; 241 char* names[5];
242 int n = 0; 242 int n = 0;
243 atoms[n] = &d->wm_delete_window; 243 atoms[n] = &d->wm_delete_window;
244 names[n++] = "WM_DELETE_WINDOW"; 244 names[n++] = "WM_DELETE_WINDOW";
245 245
246 atoms[n] = &d->wm_take_focus; 246 atoms[n] = &d->wm_take_focus;
247 names[n++] = "WM_TAKE_FOCUS"; 247 names[n++] = "WM_TAKE_FOCUS";
248 248
249 atoms[n] = &d->wm_context_help; 249 atoms[n] = &d->wm_context_help;
250 names[n++] = "_NET_WM_CONTEXT_HELP"; 250 names[n++] = "_NET_WM_CONTEXT_HELP";
251 251
252 atoms[n] = &d->wm_context_accept; 252 atoms[n] = &d->wm_context_accept;
253 names[n++] = "_NET_WM_CONTEXT_ACCEPT"; 253 names[n++] = "_NET_WM_CONTEXT_ACCEPT";
254 254
255 atoms[n] = &d->wm_protocols; 255 atoms[n] = &d->wm_protocols;
256 names[n++] = "WM_PROTOCOLS"; 256 names[n++] = "WM_PROTOCOLS";
257 257
258 XInternAtoms( qt_xdisplay(), names, n, FALSE, atoms_re); 258 XInternAtoms( qt_xdisplay(), names, n, FALSE, atoms_re);
259 // now copy the values over to the properties 259 // now copy the values over to the properties
260 for (int i = 0; i < n; i++ ) 260 for (int i = 0; i < n; i++ )
261 *atoms[i] = atoms_re[i]; 261 *atoms[i] = atoms_re[i];
262 // done with X11 Stuff 262 // done with X11 Stuff
263 263
264 int dw = desktop()->width(); 264 int dw = desktop()->width();
265 if ( dw < 200 ) { 265 if ( dw < 200 ) {
266 setFont( QFont( "helvetica", 8 ) ); 266 setFont( QFont( "helvetica", 8 ) );
267 AppLnk::setSmallIconSize( 10 ); 267 AppLnk::setSmallIconSize( 10 );
268 AppLnk::setBigIconSize( 28 ); 268 AppLnk::setBigIconSize( 28 );
269 }else if ( dw > 600 ) { 269 }else if ( dw > 600 ) {
270 setFont( QFont( "helvetica", 12 ) ); 270 setFont( QFont( "helvetica", 12 ) );
271 AppLnk::setSmallIconSize( 24 ); 271 AppLnk::setSmallIconSize( 24 );
272 AppLnk::setBigIconSize( 48 ); 272 AppLnk::setBigIconSize( 48 );
273 }else if ( dw > 200 ) { 273 }else if ( dw > 200 ) {
274 setFont( QFont( "helvetica", 10 ) ); 274 setFont( QFont( "helvetica", 10 ) );
275 AppLnk::setSmallIconSize( 16 ); 275 AppLnk::setSmallIconSize( 16 );
276 AppLnk::setBigIconSize( 32 ); 276 AppLnk::setBigIconSize( 32 );
277 } 277 }
278 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 278 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
279 279
280 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT(hideOrQuit() ) ); 280 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT(hideOrQuit() ) );
281 281
282 QString qcopfn( "/tmp/qcop-msg-" ); 282 QString qcopfn( "/tmp/qcop-msg-" );
283 qcopfn += QString( argv[0] ); // append command name to the QCOP name 283 qcopfn += QString( argv[0] ); // append command name to the QCOP name
284 QFile file( qcopfn ); 284 QFile file( qcopfn );
285 if (file.open(IO_ReadOnly ) ) { 285 if (file.open(IO_ReadOnly ) ) {
286 flock( file.handle(), LOCK_EX ); 286 flock( file.handle(), LOCK_EX );
287 } 287 }
288 288
289 /* Hmmm damn we need to make the parent 0l otherwise it get's deleted 289 /* Hmmm damn we need to make the parent 0l otherwise it get's deleted
290 * past the QApplication 290 * past the QApplication
291 */ 291 */
292 m_sys = new QCopChannel( "QPE/System", 0l); 292 m_sys = new QCopChannel( "QPE/System", 0l);
293 connect(m_sys, SIGNAL( received( const QCString&, const QByteArray& ) ), 293 connect(m_sys, SIGNAL( received( const QCString&, const QByteArray& ) ),
294 this, SLOT(systemMessage( const QCString&, const QByteArray& ) ) ); 294 this, SLOT(systemMessage( const QCString&, const QByteArray& ) ) );
295 295
296 // private channel QPE/Application/appname 296 // private channel QPE/Application/appname
297 QCString channel = QCString( argv[0] ); 297 QCString channel = QCString( argv[0] );
298 channel.replace( QRegExp( ".*/"), "" ); 298 channel.replace( QRegExp( ".*/"), "" );
299 d->appName = channel; 299 d->appName = channel;
300 channel = "QPE/Application/"+ channel; 300 channel = "QPE/Application/"+ channel;
301 m_pid = new QCopChannel( channel, 0l ); 301 m_pid = new QCopChannel( channel, 0l );
302 connect(m_pid, SIGNAL( received( const QCString&, const QByteArray& ) ), 302 connect(m_pid, SIGNAL( received( const QCString&, const QByteArray& ) ),
303 this, SLOT( pidMessage( const QCString&, const QByteArray& ) ) ); 303 this, SLOT( pidMessage( const QCString&, const QByteArray& ) ) );
304 304
305 // read the Pre QCOP Stuff from the file 305 // read the Pre QCOP Stuff from the file
306 if ( file.isOpen() ) { 306 if ( file.isOpen() ) {
307 d->keep_running = FALSE; 307 d->keep_running = FALSE;
308 QDataStream ds( &file ); 308 QDataStream ds( &file );
309 QCString chanel, message; 309 QCString chanel, message;
310 QByteArray data; 310 QByteArray data;
311 while (!ds.atEnd() ) { 311 while (!ds.atEnd() ) {
312 ds >> chanel >> message >> data; 312 ds >> chanel >> message >> data;
313 d->enqueueQCop( chanel, message, data ); 313 d->enqueueQCop( chanel, message, data );
314 } 314 }
315 flock( file.handle(), LOCK_UN ); 315 flock( file.handle(), LOCK_UN );
316 file.close(); 316 file.close();
317 file.remove(); 317 file.remove();
318 } 318 }
319 319
320 // read in some stuff from the command line 320 // read in some stuff from the command line
321 // we do not have setArgs so we need to take 321 // we do not have setArgs so we need to take
322 // care of that 322 // care of that
323 for ( int a = 0; a < arg; a++ ) { 323 for ( int a = 0; a < arg; a++ ) {
324 if ( qstrcmp( argv[a], "-preload" ) == 0 ) { 324 if ( qstrcmp( argv[a], "-preload" ) == 0 ) {
325 d->preloaded = TRUE; 325 d->preloaded = TRUE;
326 }else if ( qstrcmp( argv[a ] , "-preload-show" ) == 0 ) { 326 }else if ( qstrcmp( argv[a ] , "-preload-show" ) == 0 ) {
327 d->preloaded = TRUE; 327 d->preloaded = TRUE;
328 d->forceshow = TRUE; 328 d->forceshow = TRUE;
329 } 329 }
330 } 330 }
331 initTranslations(); 331 initTranslations();
332 applyStyle(); 332 applyStyle();
333 333
334 if ( type() == GuiServer ) 334 if ( type() == GuiServer )
335 ; 335 ;
336 336
337 installEventFilter( this ); 337 installEventFilter( this );
338 QPEMenuToolFocusManager::initialize(); 338 QPEMenuToolFocusManager::initialize();
339} 339}
340void QPEApplication::initTranslations() { 340void QPEApplication::initTranslations() {
341 // Translations add it 341 // Translations add it
342 QStringList langs = Global::languageList(); 342 QStringList langs = Global::languageList();
343 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) { 343 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) {
344 QString lang = *it; 344 QString lang = *it;
345 345
346 QTranslator * trans; 346 QTranslator * trans;
347 QString tfn; 347 QString tfn;
348 348
349 trans = new QTranslator( this ); 349 trans = new QTranslator( this );
350 tfn = qpeDir() + "/i18n/" + lang + "/libqpe.qm"; 350 tfn = qpeDir() + "/i18n/" + lang + "/libqpe.qm";
351 if ( trans->load( tfn ) ) 351 if ( trans->load( tfn ) )
352 installTranslator( trans ); 352 installTranslator( trans );
353 else 353 else
354 delete trans; 354 delete trans;
355 355
356 trans = new QTranslator( this ); 356 trans = new QTranslator( this );
357 tfn = qpeDir() + "/i18n/" + lang + "/" + d->appName + ".qm"; 357 tfn = qpeDir() + "/i18n/" + lang + "/" + d->appName + ".qm";
358 if ( trans->load( tfn ) ) 358 if ( trans->load( tfn ) )
359 installTranslator( trans ); 359 installTranslator( trans );
360 else 360 else
361 delete trans; 361 delete trans;
362 } 362 }
363} 363}
364QString QPEApplication::qpeDir() { 364QString QPEApplication::qpeDir() {
365 const char * base = getenv( "OPIEDIR" ); 365 const char * base = getenv( "OPIEDIR" );
366 if ( base ) 366 if ( base )
367 return QString( base ) + "/"; 367 return QString( base ) + "/";
368 368
369 return QString( "../" ); 369 return QString( "../" );
370} 370}
371QString QPEApplication::documentDir() { 371QString QPEApplication::documentDir() {
372 const char* base = getenv( "HOME"); 372 const char* base = getenv( "HOME");
373 if ( base ) 373 if ( base )
374 return QString( base ) + "/Documents"; 374 return QString( base ) + "/Documents";
375 375
376 return QString( "../Documents" ); 376 return QString( "../Documents" );
377} 377}
378void QPEApplication::applyStyle() { 378void QPEApplication::applyStyle() {
379 Config config( "qpe" ); 379 Config config( "qpe" );
380 380
381 config.setGroup( "Appearance" ); 381 config.setGroup( "Appearance" );
382 382
383 // Widget style 383 // Widget style
384 QString style = config.readEntry( "Style", "Light" ); 384 QString style = config.readEntry( "Style", "Light" );
385 internalSetStyle( style ); 385 internalSetStyle( style );
386 386
387 // Colors 387 // Colors
388 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); 388 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) );
389 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); 389 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) );
390 QPalette pal( btncolor, bgcolor ); 390 QPalette pal( btncolor, bgcolor );
391 QString color = config.readEntry( "Highlight", "#800000" ); 391 QString color = config.readEntry( "Highlight", "#800000" );
392 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 392 pal.setColor( QColorGroup::Highlight, QColor( color ) );
393 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 393 color = config.readEntry( "HighlightedText", "#FFFFFF" );
394 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 394 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
395 color = config.readEntry( "Text", "#000000" ); 395 color = config.readEntry( "Text", "#000000" );
396 pal.setColor( QColorGroup::Text, QColor( color ) ); 396 pal.setColor( QColorGroup::Text, QColor( color ) );
397 color = config.readEntry( "ButtonText", "#000000" ); 397 color = config.readEntry( "ButtonText", "#000000" );
398 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 398 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
399 color = config.readEntry( "Base", "#FFFFFF" ); 399 color = config.readEntry( "Base", "#FFFFFF" );
400 pal.setColor( QColorGroup::Base, QColor( color ) ); 400 pal.setColor( QColorGroup::Base, QColor( color ) );
401 401
402 pal.setColor( QPalette::Disabled, QColorGroup::Text, 402 pal.setColor( QPalette::Disabled, QColorGroup::Text,
403 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 403 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
404 404
405 setPalette( pal, TRUE ); 405 setPalette( pal, TRUE );
406 406
407 407
408 408
409 // Font 409 // Font
410 QString ff = config.readEntry( "FontFamily", font().family() ); 410 QString ff = config.readEntry( "FontFamily", font().family() );
411 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 411 int fs = config.readNumEntry( "FontSize", font().pointSize() );
412 setFont( QFont(ff, fs) ); 412 setFont( QFont(ff, fs) );
413} 413}
414int QPEApplication::defaultRotation() { 414int QPEApplication::defaultRotation() {
415 return 0; 415 return 0;
416} 416}
417void QPEApplication::setDefaultRotation(int r ) { 417void QPEApplication::setDefaultRotation(int r ) {
418 418
419} 419}
420void QPEApplication::grabKeyboard() { 420void QPEApplication::grabKeyboard() {
421 QPEApplication::Private * d = ( ( QPEApplication* ) qApp ) ->d; 421 QPEApplication::Private * d = ( ( QPEApplication* ) qApp ) ->d;
422 if ( qApp->type() == QApplication::GuiServer ) 422 if ( qApp->type() == QApplication::GuiServer )
423 d->kbgrabber = 0; 423 d->kbgrabber = 0;
424 else { 424 else {
425 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); 425 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
426 e << d->appName; 426 e << d->appName;
427 427
428 d->kbgrabber = 2; // me 428 d->kbgrabber = 2; // me
429 } 429 }
430} 430}
431void QPEApplication::ungrabKeyboard() { 431void QPEApplication::ungrabKeyboard() {
432 QPEApplication::Private * d = ( ( QPEApplication* ) qApp ) ->d; 432 QPEApplication::Private * d = ( ( QPEApplication* ) qApp ) ->d;
433 if ( d->kbgrabber == 2 ) { 433 if ( d->kbgrabber == 2 ) {
434 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); 434 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
435 e << QString::null; 435 e << QString::null;
436 436
437 d->kbregrab = FALSE; 437 d->kbregrab = FALSE;
438 d->kbgrabber = 0; 438 d->kbgrabber = 0;
439 } 439 }
440} 440}
441void QPEApplication::showMainWidget( QWidget* wid, bool b) { 441void QPEApplication::showMainWidget( QWidget* wid, bool b) {
442 d->show(wid, b ); 442 d->show(wid, b );
443} 443}
444void QPEApplication::showMainDocumentWidget( QWidget* mw, bool m) { 444void QPEApplication::showMainDocumentWidget( QWidget* mw, bool m) {
445 if ( mw && argc() == 2 ) 445 if ( mw && argc() == 2 )
446 Global::setDocument( mw, QString::fromUtf8(argv()[1] ) ); 446 Global::setDocument( mw, QString::fromUtf8(argv()[1] ) );
447 447
448 d->show(mw, m ); 448 d->show(mw, m );
449} 449}
450void QPEApplication::showDialog( QDialog* d, bool nomax ) { 450void QPEApplication::showDialog( QDialog* d, bool nomax ) {
451 QSize sh = d->sizeHint(); 451 QSize sh = d->sizeHint();
452 int w = QMAX(sh.width(),d->width()); 452 int w = QMAX(sh.width(),d->width());
453 int h = QMAX(sh.height(),d->height()); 453 int h = QMAX(sh.height(),d->height());
454 if ( !nomax 454 if ( !nomax
455 && ( w > qApp->desktop()->width()*3/4 455 && ( w > qApp->desktop()->width()*3/4
456 || h > qApp->desktop()->height()*3/4 ) ) 456 || h > qApp->desktop()->height()*3/4 ) )
457 { 457 {
458 d->showMaximized(); 458 d->showMaximized();
459 } else { 459 } else {
460 d->resize(w,h); 460 d->resize(w,h);
461 d->show(); 461 d->show();
462 } 462 }
463} 463}
464int QPEApplication::execDialog( QDialog* d, bool nomax) { 464int QPEApplication::execDialog( QDialog* d, bool nomax) {
465 showDialog(d,nomax); 465 showDialog(d,nomax);
466 return d->exec(); 466 return d->exec();
467} 467}
468void QPEApplication::setKeepRunning() { 468void QPEApplication::setKeepRunning() {
469 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 469 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
470 QPEApplication * qpeApp = ( QPEApplication* ) qApp; 470 QPEApplication * qpeApp = ( QPEApplication* ) qApp;
471 qpeApp->d->keep_running = TRUE; 471 qpeApp->d->keep_running = TRUE;
472 } 472 }
473} 473}
474bool QPEApplication::keepRunning()const { 474bool QPEApplication::keepRunning()const {
475 return d->keep_running; 475 return d->keep_running;
476} 476}
477bool QPEApplication::keyboardGrabbed()const { 477bool QPEApplication::keyboardGrabbed()const {
478 return d->kbgrabber; 478 return d->kbgrabber;
479} 479}
480int QPEApplication::exec() { 480int QPEApplication::exec() {
481 /* now send the QCOP stuff gotten from the file */ 481 /* now send the QCOP stuff gotten from the file */
482 d->sendQCopQ(); 482 d->sendQCopQ();
483 483
484 if ( d->keep_running ) { 484 if ( d->keep_running ) {
485 qWarning("going to exec"); 485 qWarning("going to exec");
486 int a = QApplication::exec(); 486 int a = QApplication::exec();
487 qWarning("left"); 487 qWarning("left");
488 return a; 488 return a;
489 } 489 }
490 490
491 { 491 {
492 QCopEnvelope e( "QPE/System", "closing(QString)" ); 492 QCopEnvelope e( "QPE/System", "closing(QString)" );
493 e << d->appName; 493 e << d->appName;
494 } 494 }
495 qWarning("processing events!"); 495 qWarning("processing events!");
496 processEvents(); 496 processEvents();
497 return 0; 497 return 0;
498} 498}
499void QPEApplication::internalSetStyle( const QString& ) { 499void QPEApplication::internalSetStyle( const QString& ) {
500 500
501} 501}
502void QPEApplication::systemMessage( const QCString&, const QByteArray& ) { 502void QPEApplication::systemMessage( const QCString& chan, const QByteArray& ) {
503 503 qWarning("QPEApplication::systemMessage( %s )", chan.data() );
504} 504}
505void QPEApplication::pidMessage( const QCString&, const QByteArray& ) { 505void QPEApplication::pidMessage( const QCString&, const QByteArray& ) {
506 506
507} 507}
508void QPEApplication::timerEvent( QTimerEvent* e ) { 508void QPEApplication::timerEvent( QTimerEvent* e ) {
509 if ( e->timerId() == d->presstimer && d->presswidget ) { 509 if ( e->timerId() == d->presstimer && d->presswidget ) {
510 // Right pressed 510 // Right pressed
511 postEvent( d->presswidget, 511 postEvent( d->presswidget,
512 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 512 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
513 RightButton, LeftButton ) ); 513 RightButton, LeftButton ) );
514 killTimer( d->presstimer ); 514 killTimer( d->presstimer );
515 d->presstimer = 0; 515 d->presstimer = 0;
516 } 516 }
517} 517}
518 518
519// InputMethods Hints 519// InputMethods Hints
520namespace { 520namespace {
521 static QPtrDict<void>* inputMethodDict = 0; 521 static QPtrDict<void>* inputMethodDict = 0;
522 static void createInputMethodDict(){ 522 static void createInputMethodDict(){
523 if ( !inputMethodDict ) 523 if ( !inputMethodDict )
524 inputMethodDict = new QPtrDict<void>; 524 inputMethodDict = new QPtrDict<void>;
525 } 525 }
526 526
527 static QPtrDict<void>* stylusDict = 0; 527 static QPtrDict<void>* stylusDict = 0;
528 static void createDict() { 528 static void createDict() {
529 if ( !stylusDict ) 529 if ( !stylusDict )
530 stylusDict = new QPtrDict<void>; 530 stylusDict = new QPtrDict<void>;
531 } 531 }
532}; 532};
533 533
534void QPEApplication::setInputMethodHint( QWidget* w, InputMethodHint mode ) { 534void QPEApplication::setInputMethodHint( QWidget* w, InputMethodHint mode ) {
535 createInputMethodDict(); 535 createInputMethodDict();
536 if ( mode == Normal ) { 536 if ( mode == Normal ) {
537 inputMethodDict->remove 537 inputMethodDict->remove
538 ( w ); 538 ( w );
539 }else { 539 }else {
540 inputMethodDict->insert( w, ( void* ) mode ); 540 inputMethodDict->insert( w, ( void* ) mode );
541 } 541 }
542} 542}
543QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget* w) { 543QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget* w) {
544 if ( inputMethodDict && w ) 544 if ( inputMethodDict && w )
545 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 545 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
546 return Normal; 546 return Normal;
547} 547}
548 548
549 549
550void QPEApplication::removeSenderFromStylusDict() { 550void QPEApplication::removeSenderFromStylusDict() {
551 stylusDict->remove( ( void* ) sender() ); 551 stylusDict->remove( ( void* ) sender() );
552 if ( d->presswidget == sender() ) 552 if ( d->presswidget == sender() )
553 d->presswidget = 0; 553 d->presswidget = 0;
554} 554}
555void QPEApplication::setStylusOperation( QWidget* w, StylusMode mode) { 555void QPEApplication::setStylusOperation( QWidget* w, StylusMode mode) {
556 createDict(); 556 createDict();
557 if ( mode == LeftOnly ) { 557 if ( mode == LeftOnly ) {
558 stylusDict->remove 558 stylusDict->remove
559 ( w ); 559 ( w );
560 w->removeEventFilter( qApp ); 560 w->removeEventFilter( qApp );
561 }else { 561 }else {
562 stylusDict->insert( w, ( void* ) mode ); 562 stylusDict->insert( w, ( void* ) mode );
563 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); 563 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) );
564 w->installEventFilter( qApp ); 564 w->installEventFilter( qApp );
565 } 565 }
566} 566}
567QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w) { 567QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w) {
568 if ( stylusDict ) 568 if ( stylusDict )
569 return ( StylusMode ) ( int ) stylusDict->find( w ); 569 return ( StylusMode ) ( int ) stylusDict->find( w );
570 return LeftOnly; 570 return LeftOnly;
571} 571}
572 572
573// eventFilter...... 573// eventFilter......
574bool QPEApplication::eventFilter( QObject* o, QEvent* e ) { 574bool QPEApplication::eventFilter( QObject* o, QEvent* e ) {
575 /* 575 /*
576 * We want our WM to show Ok and a X button 576 * We want our WM to show Ok and a X button
577 * on dialogs 577 * on dialogs
578 * our part is to set the _NET_WM_CONTEXT_ACCEPT 578 * our part is to set the _NET_WM_CONTEXT_ACCEPT
579 * propery 579 * propery
580 * and then wait for a client message -zecke 580 * and then wait for a client message -zecke
581 * on show we will add the prop 581 * on show we will add the prop
582 */ 582 */
583 if (o->inherits("QDialog") && e->type() == QEvent::Show ) { 583 if (o->inherits("QDialog") && e->type() == QEvent::Show ) {
584 QDialog* dialog = (QDialog*)o; 584 QDialog* dialog = (QDialog*)o;
585 Atom wm_prot[45]; 585 Atom wm_prot[45];
586 int n = 0; 586 int n = 0;
587 wm_prot[n++] = d->wm_delete_window; 587 wm_prot[n++] = d->wm_delete_window;
588 wm_prot[n++] = d->wm_take_focus; 588 wm_prot[n++] = d->wm_take_focus;
589 wm_prot[n++] = d->wm_context_accept; 589 wm_prot[n++] = d->wm_context_accept;
590 if ( dialog->testWFlags( WStyle_ContextHelp ) ) 590 if ( dialog->testWFlags( WStyle_ContextHelp ) )
591 wm_prot[n++] = d->wm_context_help; 591 wm_prot[n++] = d->wm_context_help;
592 XSetWMProtocols( qt_xdisplay(), dialog->winId(), wm_prot, n ); 592 XSetWMProtocols( qt_xdisplay(), dialog->winId(), wm_prot, n );
593 return TRUE; // should be save 593 return TRUE; // should be save
594 } 594 }
595 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { 595 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
596 QMouseEvent * me = ( QMouseEvent* ) e; 596 QMouseEvent * me = ( QMouseEvent* ) e;
597 StylusMode mode = (StylusMode)(int)stylusDict->find(o); 597 StylusMode mode = (StylusMode)(int)stylusDict->find(o);
598 switch (mode) { 598 switch (mode) {
599 case RightOnHold: 599 case RightOnHold:
600 switch ( me->type() ) { 600 switch ( me->type() ) {
601 case QEvent::MouseButtonPress: 601 case QEvent::MouseButtonPress:
602 if ( me->button() == LeftButton ) { 602 if ( me->button() == LeftButton ) {
603 d->presstimer = startTimer(500); // #### pref. 603 d->presstimer = startTimer(500); // #### pref.
604 d->presswidget = (QWidget*)o; 604 d->presswidget = (QWidget*)o;
605 d->presspos = me->pos(); 605 d->presspos = me->pos();
606 d->rightpressed = FALSE; 606 d->rightpressed = FALSE;
607 } 607 }
608 break; 608 break;
609 case QEvent::MouseMove: 609 case QEvent::MouseMove:
610 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) { 610 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) {
611 killTimer(d->presstimer); 611 killTimer(d->presstimer);
612 d->presstimer = 0; 612 d->presstimer = 0;
613 } 613 }
614 break; 614 break;
615 case QEvent::MouseButtonRelease: 615 case QEvent::MouseButtonRelease:
616 if ( me->button() == LeftButton ) { 616 if ( me->button() == LeftButton ) {
617 if ( d->presstimer ) { 617 if ( d->presstimer ) {
618 killTimer(d->presstimer); 618 killTimer(d->presstimer);
619 d->presstimer = 0; 619 d->presstimer = 0;
620 } 620 }
621 if ( d->rightpressed && d->presswidget ) { 621 if ( d->rightpressed && d->presswidget ) {
622 // Right released 622 // Right released
623 postEvent( d->presswidget, 623 postEvent( d->presswidget,
624 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), 624 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
625 RightButton, LeftButton + RightButton ) ); 625 RightButton, LeftButton + RightButton ) );
626 // Left released, off-widget 626 // Left released, off-widget
627 postEvent( d->presswidget, 627 postEvent( d->presswidget,
628 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), 628 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1),
629 LeftButton, LeftButton ) ); 629 LeftButton, LeftButton ) );
630 postEvent( d->presswidget, 630 postEvent( d->presswidget,
631 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), 631 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1),
632 LeftButton, LeftButton ) ); 632 LeftButton, LeftButton ) );
633 d->rightpressed = FALSE; 633 d->rightpressed = FALSE;
634 return TRUE; // don't send the real Left release 634 return TRUE; // don't send the real Left release
635 } 635 }
636 } 636 }
637 break; 637 break;
638 default: 638 default:
639 break; 639 break;
640 } 640 }
641 break; 641 break;
642 default: 642 default:
643 ; 643 ;
644 } 644 }
645 } 645 }
646 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 646 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
647 QKeyEvent *ke = (QKeyEvent *)e; 647 QKeyEvent *ke = (QKeyEvent *)e;
648 if ( ke->key() == Key_Enter ) { 648 if ( ke->key() == Key_Enter ) {
649 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 649 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
650 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 650 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
651 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 651 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
652 return TRUE; 652 return TRUE;
653 } 653 }
654 } 654 }
655 } 655 }
656 return FALSE; 656 return FALSE;
657} 657}
658 658
659// Quit stuff 659// Quit stuff
660void QPEApplication::restart() { 660void QPEApplication::restart() {
661 661
662} 662}
663void QPEApplication::shutdown() { 663void QPEApplication::shutdown() {
664 664
665} 665}
666void QPEApplication::tryQuit() { 666void QPEApplication::tryQuit() {
667 qWarning("TryQuit!!"); 667 qWarning("TryQuit!!");
668 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 668 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
669 return ; // Inside modal loop or konsole. Too hard to save state. 669 return ; // Inside modal loop or konsole. Too hard to save state.
670 { 670 {
671 QCopEnvelope e( "QPE/System", "closing(QString)" ); 671 QCopEnvelope e( "QPE/System", "closing(QString)" );
672 e << d->appName; 672 e << d->appName;
673 } 673 }
674 processEvents(); 674 processEvents();
675 675
676 quit(); 676 quit();
677} 677}
678void QPEApplication::hideOrQuit() { 678void QPEApplication::hideOrQuit() {
679 qWarning("hide or close"); 679 qWarning("hide or close");
680 processEvents(); 680 processEvents();
681 qWarning("past processing"); 681 qWarning("past processing");
682 682
683 // If we are a preloaded application we don't actually quit, so emit 683 // If we are a preloaded application we don't actually quit, so emit
684 // a System message indicating we're quasi-closing. 684 // a System message indicating we're quasi-closing.
685 if ( d->preloaded && d->qpe_main_widget ) 685 if ( d->preloaded && d->qpe_main_widget )
686 686
687 { 687 {
688 qWarning("hiding"); 688 qWarning("hiding");
689 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 689 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
690 e << d->appName; 690 e << d->appName;
691 d->qpe_main_widget->hide(); 691 d->qpe_main_widget->hide();
692 } 692 }
693 else 693 else
694 quit(); 694 quit();
695} 695}
696 696
697/*! 697/*!
698 \internal 698 \internal
699*/ 699*/
700void QPEApplication::prepareForTermination( bool willrestart ) 700void QPEApplication::prepareForTermination( bool willrestart )
701{ 701{
702 if ( willrestart ) { 702 if ( willrestart ) {
703 // Draw a big wait icon, the image can be altered in later revisions 703 // Draw a big wait icon, the image can be altered in later revisions
704 // QWidget *d = QApplication::desktop(); 704 // QWidget *d = QApplication::desktop();
705 QImage img = Resource::loadImage( "launcher/new_wait" ); 705 QImage img = Resource::loadImage( "launcher/new_wait" );
706 QPixmap pix; 706 QPixmap pix;
707 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); 707 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) );
708 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | 708 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize |
709 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 709 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
710 lblWait->setPixmap( pix ); 710 lblWait->setPixmap( pix );
711 lblWait->setAlignment( QWidget::AlignCenter ); 711 lblWait->setAlignment( QWidget::AlignCenter );
712 lblWait->show(); 712 lblWait->show();
713 lblWait->showMaximized(); 713 lblWait->showMaximized();
714 } 714 }
715#ifndef SINGLE_APP 715#ifndef SINGLE_APP
716 { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); 716 { QCopEnvelope envelope( "QPE/System", "forceQuit()" );
717 } 717 }
718 processEvents(); // ensure the message goes out. 718 processEvents(); // ensure the message goes out.
719 sleep( 1 ); // You have 1 second to comply. 719 sleep( 1 ); // You have 1 second to comply.
720#endif 720#endif
721} 721}
722int QPEApplication::x11ClientMessage(QWidget* w, XEvent* event, bool b ) { 722int QPEApplication::x11ClientMessage(QWidget* w, XEvent* event, bool b ) {
723 qWarning("X11 ClientMessage %d %d", event->type, ClientMessage); 723 qWarning("X11 ClientMessage %d %d", event->type, ClientMessage);
724 if ( event->type == ClientMessage ) { 724 if ( event->type == ClientMessage ) {
725 if ( (event->xclient.message_type == d->wm_protocols) && 725 if ( (event->xclient.message_type == d->wm_protocols) &&
726 (event->xclient.data.l[0] == d->wm_context_accept ) ) { 726 (event->xclient.data.l[0] == d->wm_context_accept ) ) {
727 qWarning("accepted!!!"); 727 qWarning("accepted!!!");
728 /* 728 /*
729 * I'm not sure if we should use activeWidget 729 * I'm not sure if we should use activeWidget
730 * or activeModalWidget 730 * or activeModalWidget
731 * a QDialog could be not modal too 731 * a QDialog could be not modal too
732 */ 732 */
733 if ( w->inherits("QDialog" ) ) { 733 if ( w->inherits("QDialog" ) ) {
734 qWarning("inherits QDialog!!!"); 734 qWarning("inherits QDialog!!!");
735 QDialog* dia = (QDialog*)w; 735 QDialog* dia = (QDialog*)w;
736 /* 736 /*
737 * call it directly or via QTimer::singleShot? 737 * call it directly or via QTimer::singleShot?
738 */ 738 */
739 QTimer::singleShot(0, dia, SLOT(accept() ) ); 739 QTimer::singleShot(0, dia, SLOT(accept() ) );
740 return 0; 740 return 0;
741 } 741 }
742 742
743 } 743 }
744 } 744 }
745 return QApplication::x11ClientMessage(w, event, b ); 745 return QApplication::x11ClientMessage(w, event, b );
746} 746}
747 747
748#define KeyPress XKeyPress 748#define KeyPress XKeyPress
749#define KeyRelease XKeyRelease 749#define KeyRelease XKeyRelease
750 750
751#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) 751#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
752 752
753// The libraries with the skiff package (and possibly others) have 753// The libraries with the skiff package (and possibly others) have
754// completely useless implementations of builtin new and delete that 754// completely useless implementations of builtin new and delete that
755// use about 50% of your CPU. Here we revert to the simple libc 755// use about 50% of your CPU. Here we revert to the simple libc
756// functions. 756// functions.
757 757
758void* operator new[]( size_t size ) 758void* operator new[]( size_t size )
759{ 759{
760 return malloc( size ); 760 return malloc( size );
761} 761}
762 762
763void* operator new( size_t size ) 763void* operator new( size_t size )
764{ 764{
765 return malloc( size ); 765 return malloc( size );
766} 766}
767 767
768void operator delete[]( void* p ) 768void operator delete[]( void* p )
769{ 769{
770 free( p ); 770 free( p );
771} 771}
772 772
773void operator delete[]( void* p, size_t /*size*/ ) 773void operator delete[]( void* p, size_t /*size*/ )
774{ 774{
775 free( p ); 775 free( p );
776} 776}
777 777
778void operator delete( void* p ) 778void operator delete( void* p )
779{ 779{
780 free( p ); 780 free( p );
781} 781}
782 782
783void operator delete( void* p, size_t /*size*/ ) 783void operator delete( void* p, size_t /*size*/ )
784{ 784{
785 free( p ); 785 free( p );
786} 786}
787 787
788#endif 788#endif
diff --git a/x11/libqpe-x11/qt/qcopchannel_qws.cpp b/x11/libqpe-x11/qt/qcopchannel_qws.cpp
index 1cea80c..706756e 100644
--- a/x11/libqpe-x11/qt/qcopchannel_qws.cpp
+++ b/x11/libqpe-x11/qt/qcopchannel_qws.cpp
@@ -1,76 +1,83 @@
1 1
2#include "../../ipc/client/ocopclient.h" 2#include "../../ipc/client/ocopclient.h"
3 3
4#include <qcopchannel_qws.h> 4#include <qcopchannel_qws.h>
5 5
6QList<QCopChannel>* QCopChannel::m_list = 0; 6QList<QCopChannel>* QCopChannel::m_list = 0;
7QMap<QCString, int> QCopChannel::m_refCount; 7QMap<QCString, int> QCopChannel::m_refCount;
8 8
9QCopChannel::QCopChannel( const QCString& channel, QObject* parent, 9QCopChannel::QCopChannel( const QCString& channel, QObject* parent,
10 const char* name ) 10 const char* name )
11 : QObject( parent, name ),m_chan(channel) { 11 : QObject( parent, name ),m_chan(channel) {
12 if (!m_list ) { 12 if (!m_list ) {
13 m_list = new QList<QCopChannel>; 13 m_list = new QList<QCopChannel>;
14 /* only connect once */ 14 /* only connect once */
15 connect(OCOPClient::self(), SIGNAL(called(const QCString&, const QCString&, const QByteArray& ) ), 15 connect(OCOPClient::self(), SIGNAL(called(const QCString&, const QCString&, const QByteArray& ) ),
16 this, SLOT(rev(const QCString&, const QCString&, const QByteArray&) ) ); 16 this, SLOT(rev(const QCString&, const QCString&, const QByteArray&) ) );
17 } 17 }
18 /* first registration or ref count is 0 for m_chan*/ 18 /* first registration or ref count is 0 for m_chan*/
19 if (!m_refCount.contains( m_chan ) || !m_refCount[m_chan] ) { 19 if (!m_refCount.contains( m_chan ) || !m_refCount[m_chan] ) {
20 qWarning("adding channel %s", m_chan.data() );
20 m_refCount[m_chan] = 1; 21 m_refCount[m_chan] = 1;
21 OCOPClient::self()->addChannel( m_chan ); 22 OCOPClient::self()->addChannel( m_chan );
22 }else 23 }else{
24 qWarning("reffing up for %s %d", m_chan.data(), m_refCount[m_chan] );
23 m_refCount[m_chan]++; 25 m_refCount[m_chan]++;
26 }
24 27
25 m_list->append(this); 28 m_list->append(this);
26} 29}
27void QCopChannel::receive( const QCString& msg, const QByteArray& ar ) { 30void QCopChannel::receive( const QCString& msg, const QByteArray& ar ) {
28 emit received( msg, ar ); 31 emit received( msg, ar );
29} 32}
30QCopChannel::~QCopChannel() { 33QCopChannel::~QCopChannel() {
31 if (m_refCount[m_chan] == 1 ) { 34 if (m_refCount[m_chan] == 1 ) {
32 OCOPClient::self()->delChannel( m_chan ); 35 OCOPClient::self()->delChannel( m_chan );
33 m_refCount[m_chan] = 0; 36 m_refCount[m_chan] = 0;
34 }else 37 }else
35 m_refCount[m_chan]--; 38 m_refCount[m_chan]--;
36 39
37 40
38 m_list->remove(this); 41 m_list->remove(this);
39 if (m_list->count() == 0 ) { 42 if (m_list->count() == 0 ) {
40 delete m_list; 43 delete m_list;
41 m_list = 0; 44 m_list = 0;
42 } 45 }
43 46
44} 47}
45QCString QCopChannel::channel()const { 48QCString QCopChannel::channel()const {
46 return m_chan; 49 return m_chan;
47} 50}
48bool QCopChannel::isRegistered( const QCString& chan) {; 51bool QCopChannel::isRegistered( const QCString& chan) {
52 if (m_refCount.contains(chan) ) {
53 qDebug("Client:locally contains");
54 return true;
55 }
49 return OCOPClient::self()->isRegistered( chan ); 56 return OCOPClient::self()->isRegistered( chan );
50} 57}
51bool QCopChannel::send( const QCString& chan, const QCString& msg ) { 58bool QCopChannel::send( const QCString& chan, const QCString& msg ) {
52 QByteArray ar; 59 QByteArray ar;
53 return send(chan, msg, ar ); 60 return send(chan, msg, ar );
54} 61}
55bool QCopChannel::send( const QCString& chan, const QCString& msg, 62bool QCopChannel::send( const QCString& chan, const QCString& msg,
56 const QByteArray& ar ) { 63 const QByteArray& ar ) {
57 OCOPClient::self()->send( chan, msg, ar ); 64 OCOPClient::self()->send( chan, msg, ar );
58 return true; 65 return true;
59} 66}
60bool QCopChannel::sendLocally( const QCString& chann, const QCString& msg, 67bool QCopChannel::sendLocally( const QCString& chann, const QCString& msg,
61 const QByteArray& ar ) { 68 const QByteArray& ar ) {
62 qWarning("Client:sendLocally %s %s", chann.data(), msg.data() ); 69 qWarning("Client:sendLocally %s %s", chann.data(), msg.data() );
63 if (!m_list ) 70 if (!m_list )
64 return true; 71 return true;
65 QCopChannel* chan; 72 QCopChannel* chan;
66 73
67 for ( chan = m_list->first(); chan; chan = m_list->next() ) { 74 for ( chan = m_list->first(); chan; chan = m_list->next() ) {
68 if ( chan->channel() == chann ) 75 if ( chan->channel() == chann )
69 chan->receive( msg, ar ); 76 chan->receive( msg, ar );
70 } 77 }
71 78
72 return true; 79 return true;
73} 80}
74void QCopChannel::rev( const QCString& chan, const QCString& msg, const QByteArray& ar ) { 81void QCopChannel::rev( const QCString& chan, const QCString& msg, const QByteArray& ar ) {
75 sendLocally( chan, msg, ar ); 82 sendLocally( chan, msg, ar );
76} 83}