diff --git a/src/qtsingleapplication.h b/src/qtsingleapplication.h index 049406f..aedd45e 100644 --- a/src/qtsingleapplication.h +++ b/src/qtsingleapplication.h @@ -78,6 +78,7 @@ public: #endif // QT_VERSION < 0x050000 bool isRunning(); + void setAppId(const QString &id); QString id() const; void setActivationWindow(QWidget* aw, bool activateOnMessage = true); @@ -87,6 +88,8 @@ public: void initialize(bool dummy = true) { isRunning(); Q_UNUSED(dummy) } + void removeLockFile(); + public Q_SLOTS: bool sendMessage(const QString &message, int timeout = 5000); void activateWindow(); diff --git a/src/qtsingleapplication.cpp b/src/qtsingleapplication.cpp index d0fb15d..9428a82 100644 --- a/src/qtsingleapplication.cpp +++ b/src/qtsingleapplication.cpp @@ -153,6 +153,8 @@ void QtSingleApplication::sysInit(const QString &appId) QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled) : QApplication(argc, argv, GUIenabled) + , peer(0) + , actWin(0) { sysInit(); } @@ -166,6 +168,8 @@ QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv) : QApplication(argc, argv) + , peer(0) + , actWin(0) { sysInit(appId); } @@ -239,9 +243,13 @@ QtSingleApplication::QtSingleApplication(Display* dpy, const QString &appId, int bool QtSingleApplication::isRunning() { - return peer->isClient(); + return (peer && peer->isClient()); } +void QtSingleApplication::setAppId(const QString &id) +{ + sysInit(id); +} /*! Tries to send the text \a message to the currently running @@ -258,7 +266,7 @@ bool QtSingleApplication::isRunning() */ bool QtSingleApplication::sendMessage(const QString &message, int timeout) { - return peer->sendMessage(message, timeout); + return (peer && peer->sendMessage(message, timeout)); } @@ -268,7 +276,7 @@ bool QtSingleApplication::sendMessage(const QString &message, int timeout) */ QString QtSingleApplication::id() const { - return peer->applicationId(); + return (peer ? peer->applicationId() : QString()); } @@ -287,6 +295,10 @@ QString QtSingleApplication::id() const void QtSingleApplication::setActivationWindow(QWidget* aw, bool activateOnMessage) { actWin = aw; + if (!peer) { + return; + } + if (activateOnMessage) connect(peer, SIGNAL(messageReceived(const QString&)), this, SLOT(activateWindow())); else @@ -305,6 +317,11 @@ QWidget* QtSingleApplication::activationWindow() const return actWin; } +void QtSingleApplication::removeLockFile() +{ + peer->removeLockedFile(); +} + /*! De-minimizes, raises, and activates this application's activation window. @@ -326,6 +343,7 @@ void QtSingleApplication::activateWindow() actWin->setWindowState(actWin->windowState() & ~Qt::WindowMinimized); actWin->raise(); actWin->activateWindow(); + actWin->setFocus(); } } diff --git a/src/qtlocalpeer.h b/src/qtlocalpeer.h index 2ff1512..6a5e57e 100644 --- a/src/qtlocalpeer.h +++ b/src/qtlocalpeer.h @@ -57,6 +57,7 @@ public: bool sendMessage(const QString &message, int timeout); QString applicationId() const { return id; } + void removeLockedFile(); Q_SIGNALS: void messageReceived(const QString &message); diff --git a/src/qtlocalpeer.cpp b/src/qtlocalpeer.cpp index 5a2abf9..321f861 100644 --- a/src/qtlocalpeer.cpp +++ b/src/qtlocalpeer.cpp @@ -159,6 +159,10 @@ bool QtLocalPeer::sendMessage(const QString &message, int timeout) return res; } +void QtLocalPeer::removeLockedFile() +{ + lockFile.remove(); +} void QtLocalPeer::receiveConnection() {