mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-05-07 14:44:01 +00:00
feat(SingleApplicationDBus): handle signals to quit properly app on GNU/Linux
This commit is contained in:
parent
ef43fac683
commit
068ea212cc
2 changed files with 31 additions and 0 deletions
|
|
@ -20,6 +20,8 @@
|
|||
* Author: Ghislain MARY
|
||||
*/
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
#include <QDBusInterface>
|
||||
|
||||
#include "config.h"
|
||||
|
|
@ -44,15 +46,41 @@ QDBusConnection SingleApplicationPrivate::getBus () const {
|
|||
}
|
||||
|
||||
void SingleApplicationPrivate::startPrimary () {
|
||||
crashHandler();
|
||||
if (!getBus().registerObject("/", this, QDBusConnection::ExportAllSlots))
|
||||
qWarning() << QStringLiteral("Failed to register single application object on DBus.");
|
||||
instanceNumber = 0;
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::startSecondary () {
|
||||
crashHandler();
|
||||
instanceNumber = 1;
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::crashHandler () {
|
||||
signal(SIGHUP, SingleApplicationPrivate::terminate); // 1
|
||||
signal(SIGINT, SingleApplicationPrivate::terminate); // 2
|
||||
signal(SIGQUIT, SingleApplicationPrivate::terminate); // 3
|
||||
signal(SIGILL, SingleApplicationPrivate::terminate); // 4
|
||||
signal(SIGABRT, SingleApplicationPrivate::terminate); // 6
|
||||
signal(SIGFPE, SingleApplicationPrivate::terminate); // 8
|
||||
signal(SIGBUS, SingleApplicationPrivate::terminate); // 10
|
||||
signal(SIGSEGV, SingleApplicationPrivate::terminate); // 11
|
||||
signal(SIGSYS, SingleApplicationPrivate::terminate); // 12
|
||||
signal(SIGPIPE, SingleApplicationPrivate::terminate); // 13
|
||||
signal(SIGALRM, SingleApplicationPrivate::terminate); // 14
|
||||
signal(SIGTERM, SingleApplicationPrivate::terminate); // 15
|
||||
signal(SIGXCPU, SingleApplicationPrivate::terminate); // 24
|
||||
signal(SIGXFSZ, SingleApplicationPrivate::terminate); // 25
|
||||
}
|
||||
|
||||
void SingleApplicationPrivate::terminate (int signum) {
|
||||
if (signum == SIGINT)
|
||||
SingleApplication::instance()->quit();
|
||||
else
|
||||
::exit(128 + signum);
|
||||
}
|
||||
|
||||
SingleApplication::SingleApplication (int &argc, char *argv[], bool allowSecondary, Options options, int)
|
||||
: QApplication(argc, argv), d_ptr(new SingleApplicationPrivate(this)) {
|
||||
Q_D(SingleApplication);
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@ public:
|
|||
void startPrimary ();
|
||||
void startSecondary ();
|
||||
|
||||
void crashHandler ();
|
||||
static void terminate (int signum);
|
||||
|
||||
SingleApplication *q_ptr;
|
||||
SingleApplication::Options options;
|
||||
quint32 instanceNumber;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue