1 diff -ur /home/david/qtsingleapplication-2.6_1-opensource/src/qtlocalpeer.cpp qtsingleapplication/qtlocalpeer.cpp
2 --- /home/david/qtsingleapplication-2.6_1-opensource/src/qtlocalpeer.cpp 2009-12-16 10:43:33.000000000 +0000
3 +++ qtsingleapplication/qtlocalpeer.cpp 2010-07-10 16:26:50.000000000 +0100
5 #include "qtlocalpeer.h"
6 #include <QtCore/QCoreApplication>
7 #include <QtCore/QTime>
11 #include <QtCore/QLibrary>
16 -namespace QtLP_Private {
17 #include "qtlockedfile.cpp"
19 #include "qtlockedfile_win.cpp"
21 #include "qtlockedfile_unix.cpp"
25 const char* QtLocalPeer::ack = "ack";
28 if (lockFile.isLocked())
31 - if (!lockFile.lock(QtLP_Private::QtLockedFile::WriteLock, false))
32 + if (!lockFile.lock(QtLockedFile::WriteLock, false))
35 bool res = server->listen(socketName);
38 bool QtLocalPeer::sendMessage(const QString &message, int timeout)
40 + return sendMessage(message.toUtf8(), timeout);
43 +bool QtLocalPeer::sendMessage(const QByteArray &message, int timeout)
52 - QByteArray uMsg(message.toUtf8());
53 QDataStream ds(&socket);
54 - ds.writeBytes(uMsg.constData(), uMsg.size());
55 + ds.writeBytes(message.constData(), message.size());
56 bool res = socket.waitForBytesWritten(timeout);
57 res &= socket.waitForReadyRead(timeout); // wait for ack
58 res &= (socket.read(qstrlen(ack)) == ack);
63 - QString message(QString::fromUtf8(uMsg));
64 socket->write(ack, qstrlen(ack));
65 socket->waitForBytesWritten(1000);
67 - emit messageReceived(message); //### (might take a long time to return)
68 + emit messageReceived(uMsg); //### (might take a long time to return)
69 + emit messageReceived(QString::fromUtf8(uMsg));
71 diff -ur /home/david/qtsingleapplication-2.6_1-opensource/src/qtlocalpeer.h qtsingleapplication/qtlocalpeer.h
72 --- /home/david/qtsingleapplication-2.6_1-opensource/src/qtlocalpeer.h 2009-12-16 10:43:33.000000000 +0000
73 +++ qtsingleapplication/qtlocalpeer.h 2010-07-10 16:26:16.000000000 +0100
75 #include <QtNetwork/QLocalSocket>
76 #include <QtCore/QDir>
78 -namespace QtLP_Private {
79 #include "qtlockedfile.h"
82 class QtLocalPeer : public QObject
85 QtLocalPeer(QObject *parent = 0, const QString &appId = QString());
87 bool sendMessage(const QString &message, int timeout);
88 + bool sendMessage(const QByteArray &message, int timeout);
89 QString applicationId() const
93 void messageReceived(const QString &message);
94 + void messageReceived(const QByteArray &message);
97 void receiveConnection();
101 QLocalServer* server;
102 - QtLP_Private::QtLockedFile lockFile;
103 + QtLockedFile lockFile;
106 static const char* ack;
107 diff -ur /home/david/qtsingleapplication-2.6_1-opensource/src/qtlockedfile_win.cpp qtsingleapplication/qtlockedfile_win.cpp
108 --- /home/david/qtsingleapplication-2.6_1-opensource/src/qtlockedfile_win.cpp 2009-12-16 10:43:33.000000000 +0000
109 +++ qtsingleapplication/qtlockedfile_win.cpp 2010-07-10 16:26:33.000000000 +0100
114 - QT_WA( { mutex = CreateMutexW(NULL, FALSE, (TCHAR*)mname.utf16()); },
115 + QT_WA( { mutex = CreateMutexW(NULL, FALSE, (WCHAR*)mname.utf16()); },
116 { mutex = CreateMutexA(NULL, FALSE, mname.toLocal8Bit().constData()); } );
118 qErrnoWarning("QtLockedFile::lock(): CreateMutex failed");
123 - QT_WA( { mutex = OpenMutexW(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, (TCHAR*)mname.utf16()); },
124 + QT_WA( { mutex = OpenMutexW(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, (WCHAR*)mname.utf16()); },
125 { mutex = OpenMutexA(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, mname.toLocal8Bit().constData()); } );
127 if (GetLastError() != ERROR_FILE_NOT_FOUND)
128 diff -ur /home/david/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.cpp qtsingleapplication/qtsingleapplication.cpp
129 --- /home/david/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.cpp 2009-12-16 10:43:33.000000000 +0000
130 +++ qtsingleapplication/qtsingleapplication.cpp 2010-07-10 16:23:53.000000000 +0100
133 peer = new QtLocalPeer(this, appId);
134 connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&)));
135 + connect(peer, SIGNAL(messageReceived(const QByteArray&)), SIGNAL(messageReceived(const QByteArray&)));
140 return peer->sendMessage(message, timeout);
143 +bool QtSingleApplication::sendMessage(const QByteArray &message, int timeout)
145 + return peer->sendMessage(message, timeout);
150 Returns the application identifier. Two processes with the same
151 @@ -291,10 +297,14 @@
152 void QtSingleApplication::setActivationWindow(QWidget* aw, bool activateOnMessage)
155 - if (activateOnMessage)
156 + if (activateOnMessage) {
157 connect(peer, SIGNAL(messageReceived(const QString&)), this, SLOT(activateWindow()));
159 + connect(peer, SIGNAL(messageReceived(const QByteArray&)), this, SLOT(activateWindow()));
162 disconnect(peer, SIGNAL(messageReceived(const QString&)), this, SLOT(activateWindow()));
163 + disconnect(peer, SIGNAL(messageReceived(const QByteArray&)), this, SLOT(activateWindow()));
168 diff -ur /home/david/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.h qtsingleapplication/qtsingleapplication.h
169 --- /home/david/qtsingleapplication-2.6_1-opensource/src/qtsingleapplication.h 2009-12-16 10:43:33.000000000 +0000
170 +++ qtsingleapplication/qtsingleapplication.h 2010-07-10 16:23:53.000000000 +0100
174 bool sendMessage(const QString &message, int timeout = 5000);
175 + bool sendMessage(const QByteArray &message, int timeout = 5000);
176 void activateWindow();
180 void messageReceived(const QString &message);
181 + void messageReceived(const QByteArray &message);
185 diff -ur /home/david/qtsingleapplication-2.6_1-opensource/src/qtsinglecoreapplication.cpp qtsingleapplication/qtsinglecoreapplication.cpp
186 --- /home/david/qtsingleapplication-2.6_1-opensource/src/qtsinglecoreapplication.cpp 2009-12-16 10:43:33.000000000 +0000
187 +++ qtsingleapplication/qtsinglecoreapplication.cpp 2010-07-10 16:32:33.000000000 +0100
190 peer = new QtLocalPeer(this);
191 connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&)));
192 + connect(peer, SIGNAL(messageReceived(const QByteArray&)), SIGNAL(messageReceived(const QByteArray&)));
198 peer = new QtLocalPeer(this, appId);
199 connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&)));
200 + connect(peer, SIGNAL(messageReceived(const QByteArray&)), SIGNAL(messageReceived(const QByteArray&)));
205 return peer->sendMessage(message, timeout);
208 +bool QtSingleCoreApplication::sendMessage(const QByteArray &message, int timeout)
210 + return peer->sendMessage(message, timeout);
215 Returns the application identifier. Two processes with the same
216 diff -ur /home/david/qtsingleapplication-2.6_1-opensource/src/qtsinglecoreapplication.h qtsingleapplication/qtsinglecoreapplication.h
217 --- /home/david/qtsingleapplication-2.6_1-opensource/src/qtsinglecoreapplication.h 2009-12-16 10:43:33.000000000 +0000
218 +++ qtsingleapplication/qtsinglecoreapplication.h 2010-07-10 16:32:33.000000000 +0100
222 bool sendMessage(const QString &message, int timeout = 5000);
223 + bool sendMessage(const QByteArray &message, int timeout = 5000);
227 void messageReceived(const QString &message);
228 + void messageReceived(const QByteArray &message);