syncthingtray/tray/application/singleinstance.h
Martchus c9cd81311d Improve startup/shutdown behavior; add --replace CLI option
* Make functions in `main.cpp` static as they are not used by
  other units
* Delete the `TrayIcon` via an extra parent object that is
  deleted before the `QNetworkAccessManager` is deleted; otherwise
  the destruction of `SyncthingConnection` (which aborts pending
  replies) might access dangling `QNetworkReply` objects
* Improve error handling in `SingleInstance` code
* Allow to replace the current instance via the new `--replace`
  argument; this may be useful when creating an installer/updater
2023-04-29 21:07:30 +02:00

37 lines
809 B
C++

#ifndef SINGLEINSTANCE_H
#define SINGLEINSTANCE_H
#include <QObject>
QT_FORWARD_DECLARE_CLASS(QLocalServer)
namespace Data {
struct SyncthingDir;
}
namespace QtGui {
class SingleInstance : public QObject {
Q_OBJECT
public:
explicit SingleInstance(
int argc, const char *const *argv, bool skipSingleInstanceBehavior = false, bool skipPassing = false, QObject *parent = nullptr);
Q_SIGNALS:
void newInstance(int argc, const char *const *argv);
public:
static const QString &applicationId();
static bool passArgsToRunningInstance(int argc, const char *const *argv, const QString &appId, bool waitUntilGone = false);
private Q_SLOTS:
void handleNewConnection();
void readArgs();
private:
QLocalServer *m_server;
};
} // namespace QtGui
#endif // SINGLEINSTANCE_H