mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
MainNoGUI: Shut down Wii software gracefully
This commit is contained in:
@ -34,6 +34,8 @@
|
|||||||
static bool rendererHasFocus = true;
|
static bool rendererHasFocus = true;
|
||||||
static bool rendererIsFullscreen = false;
|
static bool rendererIsFullscreen = false;
|
||||||
static Common::Flag s_running{true};
|
static Common::Flag s_running{true};
|
||||||
|
static Common::Flag s_shutdown_requested{false};
|
||||||
|
static Common::Flag s_tried_graceful_shutdown{false};
|
||||||
|
|
||||||
static void signal_handler(int)
|
static void signal_handler(int)
|
||||||
{
|
{
|
||||||
@ -41,7 +43,12 @@ static void signal_handler(int)
|
|||||||
if (write(STDERR_FILENO, message, sizeof(message)) < 0)
|
if (write(STDERR_FILENO, message, sizeof(message)) < 0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
s_running.Clear();
|
s_shutdown_requested.Set();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ProcessorInterface
|
||||||
|
{
|
||||||
|
void PowerButton_Tap();
|
||||||
}
|
}
|
||||||
|
|
||||||
class Platform
|
class Platform
|
||||||
@ -222,6 +229,19 @@ class PlatformX11 : public Platform
|
|||||||
// The actual loop
|
// The actual loop
|
||||||
while (s_running.IsSet())
|
while (s_running.IsSet())
|
||||||
{
|
{
|
||||||
|
if (s_shutdown_requested.TestAndClear())
|
||||||
|
{
|
||||||
|
if (!s_tried_graceful_shutdown.IsSet() && SConfig::GetInstance().bWii)
|
||||||
|
{
|
||||||
|
ProcessorInterface::PowerButton_Tap();
|
||||||
|
s_tried_graceful_shutdown.Set();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_running.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
XEvent event;
|
XEvent event;
|
||||||
KeySym key;
|
KeySym key;
|
||||||
for (int num_events = XPending(dpy); num_events > 0; num_events--)
|
for (int num_events = XPending(dpy); num_events > 0; num_events--)
|
||||||
@ -286,7 +306,7 @@ class PlatformX11 : public Platform
|
|||||||
break;
|
break;
|
||||||
case ClientMessage:
|
case ClientMessage:
|
||||||
if ((unsigned long)event.xclient.data.l[0] == XInternAtom(dpy, "WM_DELETE_WINDOW", False))
|
if ((unsigned long)event.xclient.data.l[0] == XInternAtom(dpy, "WM_DELETE_WINDOW", False))
|
||||||
s_running.Clear();
|
s_shutdown_requested.Set();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -375,6 +395,7 @@ int main(int argc, char* argv[])
|
|||||||
UICommon::SetUserDirectory(""); // Auto-detect user folder
|
UICommon::SetUserDirectory(""); // Auto-detect user folder
|
||||||
UICommon::Init();
|
UICommon::Init();
|
||||||
|
|
||||||
|
Core::SetOnStoppedCallback([]() { s_running.Clear(); });
|
||||||
platform->Init();
|
platform->Init();
|
||||||
|
|
||||||
// Shut down cleanly on SIGINT and SIGTERM
|
// Shut down cleanly on SIGINT and SIGTERM
|
||||||
|
Reference in New Issue
Block a user