diff --git a/include/events/EventEnum.h b/include/events/EventEnum.h index 54f9c2c8..8d7934a8 100644 --- a/include/events/EventEnum.h +++ b/include/events/EventEnum.h @@ -13,7 +13,8 @@ enum class Event ResumeIdle, ToggleIdle, Reload, - Restart + Restart, + Quit }; inline const char* eventToString(Event event) @@ -24,6 +25,7 @@ inline const char* eventToString(Event event) case Event::Resume: return "Resume"; case Event::ToggleSuspend: return "ToggleSuspend"; case Event::Idle: return "Idle"; + case Event::Quit: return "Quit"; case Event::ResumeIdle: return "ResumeIdle"; case Event::ToggleIdle: return "ToggleIdle"; case Event::Reload: return "Reload"; @@ -39,6 +41,7 @@ inline Event stringToEvent(const QString& event) if (event.compare("Resume")==0) return Event::Resume; if (event.compare("ToggleSuspend")==0) return Event::ToggleSuspend; if (event.compare("Idle")==0) return Event::Idle; + if (event.compare("Quit")==0) return Event::Quit; if (event.compare("ResumeIdle")==0) return Event::ResumeIdle; if (event.compare("ToggleIdle")==0) return Event::ToggleIdle; if (event.compare("Reload")==0) return Event::Reload; diff --git a/include/events/OsEventHandler.h b/include/events/OsEventHandler.h index e65865f5..6bed4f28 100644 --- a/include/events/OsEventHandler.h +++ b/include/events/OsEventHandler.h @@ -29,6 +29,7 @@ public: public slots: void suspend(bool sleep); void lock(bool isLocked); + void quit(); virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config); @@ -101,6 +102,7 @@ public: void handleSignal(int signum); + private: static OsEventHandlerLinux* getInstance(); diff --git a/libsrc/events/EventHandler.cpp b/libsrc/events/EventHandler.cpp index 58eab1cc..f0d70a48 100644 --- a/libsrc/events/EventHandler.cpp +++ b/libsrc/events/EventHandler.cpp @@ -144,7 +144,7 @@ void EventHandler::handleEvent(Event event) { QObject *senderObj = QObject::sender(); QString senderObjectClass; - if (senderObj) + if (senderObj != nullptr) { senderObjectClass = senderObj->metaObject()->className(); } else @@ -188,6 +188,10 @@ void EventHandler::handleEvent(Event event) Process::restartHyperion(11); break; + case Event::Quit: + emit signalEvent(Event::Quit); + break; + default: Error(_log,"Unkonwn Event '%d' received", event); break; diff --git a/libsrc/events/OsEventHandler.cpp b/libsrc/events/OsEventHandler.cpp index 24026532..188ac184 100644 --- a/libsrc/events/OsEventHandler.cpp +++ b/libsrc/events/OsEventHandler.cpp @@ -35,7 +35,7 @@ OsEventHandlerBase::OsEventHandlerBase() _log = Logger::getInstance("EVENTS-OS"); QCoreApplication* app = QCoreApplication::instance(); - if (!qobject_cast(app)) + if (qobject_cast(app) == nullptr) { _isService = true; } @@ -46,6 +46,7 @@ OsEventHandlerBase::OsEventHandlerBase() OsEventHandlerBase::~OsEventHandlerBase() { + quit(); QObject::disconnect(this, &OsEventHandlerBase::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent); OsEventHandlerBase::unregisterLockHandler(); @@ -130,6 +131,11 @@ void OsEventHandlerBase::lock(bool isLocked) } } +void OsEventHandlerBase::quit() +{ + emit signalEvent(Event::Quit); +} + #if defined(_WIN32) OsEventHandlerWindows* OsEventHandlerWindows::getInstance() diff --git a/src/hyperiond/systray.cpp b/src/hyperiond/systray.cpp index c0bac537..939e852c 100644 --- a/src/hyperiond/systray.cpp +++ b/src/hyperiond/systray.cpp @@ -84,10 +84,8 @@ void SysTray::createTrayIcon() restartAction = new QAction(tr("&Restart"), this); restartAction->setIcon(QPixmap(":/restart.svg")); - connect(restartAction, &QAction::triggered, this , [=](){ Process::restartHyperion(12); }); + connect(restartAction, &QAction::triggered, this , [=](){ emit signalEvent(Event::Restart); }); - - // TODO: Check if can be done with SystemEvents suspendAction = new QAction(tr("&Suspend"), this); suspendAction->setIcon(QPixmap(":/suspend.svg")); connect(suspendAction, &QAction::triggered, this, [this]() { emit signalEvent(Event::Suspend); }); @@ -129,7 +127,9 @@ void SysTray::createTrayIcon() // add seperator if custom effects exists if (!_trayIconEfxMenu->isEmpty()) + { _trayIconEfxMenu->addSeparator(); + } // build in effects for (const auto &efx : efxs)