|
|
@ -1,7 +1,11 @@ |
|
|
|
#include "tools/cabana/util.h" |
|
|
|
#include "tools/cabana/util.h" |
|
|
|
|
|
|
|
|
|
|
|
#include <array> |
|
|
|
#include <array> |
|
|
|
|
|
|
|
#include <csignal> |
|
|
|
|
|
|
|
#include <sys/socket.h> |
|
|
|
|
|
|
|
#include <unistd.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <QDebug> |
|
|
|
#include <QColor> |
|
|
|
#include <QColor> |
|
|
|
#include <QFontDatabase> |
|
|
|
#include <QFontDatabase> |
|
|
|
#include <QLocale> |
|
|
|
#include <QLocale> |
|
|
@ -145,6 +149,40 @@ void TabBar::closeTabClicked() { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// UnixSignalHandler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UnixSignalHandler::UnixSignalHandler(QObject *parent) : QObject(nullptr) { |
|
|
|
|
|
|
|
if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sig_fd)) { |
|
|
|
|
|
|
|
qFatal("Couldn't create TERM socketpair"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sn = new QSocketNotifier(sig_fd[1], QSocketNotifier::Read, this); |
|
|
|
|
|
|
|
connect(sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(handleSigTerm())); |
|
|
|
|
|
|
|
std::signal(SIGINT, signalHandler); |
|
|
|
|
|
|
|
std::signal(SIGTERM, UnixSignalHandler::signalHandler); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UnixSignalHandler::~UnixSignalHandler() { |
|
|
|
|
|
|
|
::close(sig_fd[0]); |
|
|
|
|
|
|
|
::close(sig_fd[1]); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void UnixSignalHandler::signalHandler(int s) { |
|
|
|
|
|
|
|
::write(sig_fd[0], &s, sizeof(s)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void UnixSignalHandler::handleSigTerm() { |
|
|
|
|
|
|
|
sn->setEnabled(false); |
|
|
|
|
|
|
|
int tmp; |
|
|
|
|
|
|
|
::read(sig_fd[1], &tmp, sizeof(tmp)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf("\nexiting...\n"); |
|
|
|
|
|
|
|
qApp->closeAllWindows(); |
|
|
|
|
|
|
|
qApp->exit(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// NameValidator
|
|
|
|
|
|
|
|
|
|
|
|
NameValidator::NameValidator(QObject *parent) : QRegExpValidator(QRegExp("^(\\w+)"), parent) {} |
|
|
|
NameValidator::NameValidator(QObject *parent) : QRegExpValidator(QRegExp("^(\\w+)"), parent) {} |
|
|
|
|
|
|
|
|
|
|
|
QValidator::State NameValidator::validate(QString &input, int &pos) const { |
|
|
|
QValidator::State NameValidator::validate(QString &input, int &pos) const { |
|
|
|