Qt: Fix window close in nogui mode

This commit is contained in:
Connor McLaughlin
2022-08-29 20:31:29 +10:00
parent 28363af3ff
commit 837495d90f
5 changed files with 37 additions and 24 deletions

View File

@ -162,6 +162,23 @@ void DisplayWidget::updateCursor(bool hidden)
}
}
void DisplayWidget::handleCloseEvent(QCloseEvent* event)
{
// Closing the separate widget will either cancel the close, or trigger shutdown.
// In the latter case, it's going to destroy us, so don't let Qt do it first.
if (QtHost::IsSystemValid())
{
QMetaObject::invokeMethod(g_main_window, "requestShutdown", Q_ARG(bool, true), Q_ARG(bool, true),
Q_ARG(bool, false));
}
else
{
QMetaObject::invokeMethod(g_main_window, "requestExit");
}
event->ignore();
}
void DisplayWidget::updateCenterPos()
{
#ifdef _WIN32
@ -348,11 +365,7 @@ bool DisplayWidget::event(QEvent* event)
case QEvent::Close:
{
// Closing the separate widget will either cancel the close, or trigger shutdown.
// In the latter case, it's going to destroy us, so don't let Qt do it first.
QMetaObject::invokeMethod(g_main_window, "requestShutdown", Q_ARG(bool, true), Q_ARG(bool, true),
Q_ARG(bool, false));
event->ignore();
handleCloseEvent(static_cast<QCloseEvent*>(event));
return true;
}
@ -416,13 +429,9 @@ DisplayWidget* DisplayContainer::removeDisplayWidget()
bool DisplayContainer::event(QEvent* event)
{
if (event->type() == QEvent::Close)
if (event->type() == QEvent::Close && m_display_widget)
{
// Closing the separate widget will either cancel the close, or trigger shutdown.
// In the latter case, it's going to destroy us, so don't let Qt do it first.
QMetaObject::invokeMethod(g_main_window, "requestShutdown", Q_ARG(bool, true), Q_ARG(bool, true),
Q_ARG(bool, false));
event->ignore();
m_display_widget->handleCloseEvent(static_cast<QCloseEvent*>(event));
return true;
}