Support Quit event

This commit is contained in:
LordGrey 2024-04-28 11:02:31 +02:00
parent c14fc0651d
commit 6535cdd899
5 changed files with 21 additions and 6 deletions

View File

@ -13,7 +13,8 @@ enum class Event
ResumeIdle, ResumeIdle,
ToggleIdle, ToggleIdle,
Reload, Reload,
Restart Restart,
Quit
}; };
inline const char* eventToString(Event event) inline const char* eventToString(Event event)
@ -24,6 +25,7 @@ inline const char* eventToString(Event event)
case Event::Resume: return "Resume"; case Event::Resume: return "Resume";
case Event::ToggleSuspend: return "ToggleSuspend"; case Event::ToggleSuspend: return "ToggleSuspend";
case Event::Idle: return "Idle"; case Event::Idle: return "Idle";
case Event::Quit: return "Quit";
case Event::ResumeIdle: return "ResumeIdle"; case Event::ResumeIdle: return "ResumeIdle";
case Event::ToggleIdle: return "ToggleIdle"; case Event::ToggleIdle: return "ToggleIdle";
case Event::Reload: return "Reload"; 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("Resume")==0) return Event::Resume;
if (event.compare("ToggleSuspend")==0) return Event::ToggleSuspend; if (event.compare("ToggleSuspend")==0) return Event::ToggleSuspend;
if (event.compare("Idle")==0) return Event::Idle; 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("ResumeIdle")==0) return Event::ResumeIdle;
if (event.compare("ToggleIdle")==0) return Event::ToggleIdle; if (event.compare("ToggleIdle")==0) return Event::ToggleIdle;
if (event.compare("Reload")==0) return Event::Reload; if (event.compare("Reload")==0) return Event::Reload;

View File

@ -29,6 +29,7 @@ public:
public slots: public slots:
void suspend(bool sleep); void suspend(bool sleep);
void lock(bool isLocked); void lock(bool isLocked);
void quit();
virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config); virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
@ -101,6 +102,7 @@ public:
void handleSignal(int signum); void handleSignal(int signum);
private: private:
static OsEventHandlerLinux* getInstance(); static OsEventHandlerLinux* getInstance();

View File

@ -144,7 +144,7 @@ void EventHandler::handleEvent(Event event)
{ {
QObject *senderObj = QObject::sender(); QObject *senderObj = QObject::sender();
QString senderObjectClass; QString senderObjectClass;
if (senderObj) if (senderObj != nullptr)
{ {
senderObjectClass = senderObj->metaObject()->className(); senderObjectClass = senderObj->metaObject()->className();
} else } else
@ -188,6 +188,10 @@ void EventHandler::handleEvent(Event event)
Process::restartHyperion(11); Process::restartHyperion(11);
break; break;
case Event::Quit:
emit signalEvent(Event::Quit);
break;
default: default:
Error(_log,"Unkonwn Event '%d' received", event); Error(_log,"Unkonwn Event '%d' received", event);
break; break;

View File

@ -35,7 +35,7 @@ OsEventHandlerBase::OsEventHandlerBase()
_log = Logger::getInstance("EVENTS-OS"); _log = Logger::getInstance("EVENTS-OS");
QCoreApplication* app = QCoreApplication::instance(); QCoreApplication* app = QCoreApplication::instance();
if (!qobject_cast<QApplication*>(app)) if (qobject_cast<QApplication*>(app) == nullptr)
{ {
_isService = true; _isService = true;
} }
@ -46,6 +46,7 @@ OsEventHandlerBase::OsEventHandlerBase()
OsEventHandlerBase::~OsEventHandlerBase() OsEventHandlerBase::~OsEventHandlerBase()
{ {
quit();
QObject::disconnect(this, &OsEventHandlerBase::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent); QObject::disconnect(this, &OsEventHandlerBase::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
OsEventHandlerBase::unregisterLockHandler(); OsEventHandlerBase::unregisterLockHandler();
@ -130,6 +131,11 @@ void OsEventHandlerBase::lock(bool isLocked)
} }
} }
void OsEventHandlerBase::quit()
{
emit signalEvent(Event::Quit);
}
#if defined(_WIN32) #if defined(_WIN32)
OsEventHandlerWindows* OsEventHandlerWindows::getInstance() OsEventHandlerWindows* OsEventHandlerWindows::getInstance()

View File

@ -84,10 +84,8 @@ void SysTray::createTrayIcon()
restartAction = new QAction(tr("&Restart"), this); restartAction = new QAction(tr("&Restart"), this);
restartAction->setIcon(QPixmap(":/restart.svg")); 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 = new QAction(tr("&Suspend"), this);
suspendAction->setIcon(QPixmap(":/suspend.svg")); suspendAction->setIcon(QPixmap(":/suspend.svg"));
connect(suspendAction, &QAction::triggered, this, [this]() { emit signalEvent(Event::Suspend); }); connect(suspendAction, &QAction::triggered, this, [this]() { emit signalEvent(Event::Suspend); });
@ -129,7 +127,9 @@ void SysTray::createTrayIcon()
// add seperator if custom effects exists // add seperator if custom effects exists
if (!_trayIconEfxMenu->isEmpty()) if (!_trayIconEfxMenu->isEmpty())
{
_trayIconEfxMenu->addSeparator(); _trayIconEfxMenu->addSeparator();
}
// build in effects // build in effects
for (const auto &efx : efxs) for (const auto &efx : efxs)