Add quit-app-and-exit shortcut Ctrl+Alt+Shift+E

Add a shortcut to quit the current app and exit Moonlight entirely.
This commit is contained in:
James Poje 2025-03-20 01:13:04 -04:00 committed by Cameron Gutman
parent 29b1304337
commit 9c9bfd8428
5 changed files with 36 additions and 1 deletions

View File

@ -111,6 +111,11 @@ SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, int streamWidth, i
m_SpecialKeyCombos[KeyComboTogglePointerRegionLock].scanCode = SDL_SCANCODE_L;
m_SpecialKeyCombos[KeyComboTogglePointerRegionLock].enabled = true;
m_SpecialKeyCombos[KeyComboQuitAndExit].keyCombo = KeyComboQuitAndExit;
m_SpecialKeyCombos[KeyComboQuitAndExit].keyCode = SDLK_e;
m_SpecialKeyCombos[KeyComboQuitAndExit].scanCode = SDL_SCANCODE_E;
m_SpecialKeyCombos[KeyComboQuitAndExit].enabled = true;
m_OldIgnoreDevices = SDL_GetHint(SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES);
m_OldIgnoreDevicesExcept = SDL_GetHint(SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT);

View File

@ -164,6 +164,7 @@ private:
KeyComboToggleMinimize,
KeyComboPasteText,
KeyComboTogglePointerRegionLock,
KeyComboQuitAndExit,
KeyComboMax
};

View File

@ -139,6 +139,20 @@ void SdlInputHandler::performSpecialKeyCombo(KeyCombo combo)
updatePointerRegionLock();
break;
case KeyComboQuitAndExit:
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Detected quitAndExit key combo");
// Indicate that we want to exit afterwards
Session::get()->setShouldExitAfterQuit();
// Push a quit event to the main loop
SDL_Event quitExitEvent;
quitExitEvent.type = SDL_QUIT;
quitExitEvent.quit.timestamp = SDL_GetTicks();
SDL_PushEvent(&quitExitEvent);
break;
default:
Q_UNREACHABLE();
}

View File

@ -577,6 +577,7 @@ Session::Session(NvComputer* computer, NvApp& app, StreamingPreferences *prefere
m_InputHandler(nullptr),
m_MouseEmulationRefCount(0),
m_FlushingWindowEventsRef(0),
m_ShouldExitAfterQuit(false),
m_AsyncConnectionSuccess(false),
m_PortTestResults(0),
m_OpusDecoder(nullptr),
@ -1251,7 +1252,8 @@ private:
// Only quit the running app if our session terminated gracefully
bool shouldQuit =
!m_Session->m_UnexpectedTermination &&
m_Session->m_Preferences->quitAppAfter;
(m_Session->m_Preferences->quitAppAfter ||
m_Session->m_ShouldExitAfterQuit);
// Notify the UI
if (shouldQuit) {
@ -1280,6 +1282,11 @@ private:
} catch (const QtNetworkReplyException&) {
}
// Exit the entire program if requested
if (m_Session->m_ShouldExitAfterQuit) {
QCoreApplication::instance()->quit();
}
// Session is finished now
emit m_Session->sessionFinished(m_Session->m_PortTestResults);
}
@ -1698,6 +1705,11 @@ void Session::flushWindowEvents()
SDL_PushEvent(&flushEvent);
}
void Session::setShouldExitAfterQuit()
{
m_ShouldExitAfterQuit = true;
}
class ExecThread : public QThread
{
public:

View File

@ -124,6 +124,8 @@ public:
void flushWindowEvents();
void setShouldExitAfterQuit();
signals:
void stageStarting(QString stage);
@ -264,6 +266,7 @@ private:
int m_MouseEmulationRefCount;
int m_FlushingWindowEventsRef;
QList<QString> m_LaunchWarnings;
bool m_ShouldExitAfterQuit;
bool m_AsyncConnectionSuccess;
int m_PortTestResults;