diff --git a/src/gamelauncher.cpp b/src/gamelauncher.cpp index c6b0623..f2b3a60 100644 --- a/src/gamelauncher.cpp +++ b/src/gamelauncher.cpp @@ -761,21 +761,35 @@ void GameLauncher::onDaemonSessionChanged(const QVariantMap &session) return; } - m_daemonGameToSession.insert(gameId, sessionId); - m_daemonSessionToGame.insert(sessionId, gameId); - const QString state = s.value(QStringLiteral("state")).toString(); + if (state == QLatin1String("Exited")) { + m_daemonGameToSession.remove(gameId); + m_daemonSessionToGame.remove(sessionId); + Game *game = App::instance()->gameModel()->gameById(gameId); + if (game) { + game->setRunning(false); + } + Q_EMIT runningGamesChanged(); + applyRunningStateToLibrary(); return; } + if (m_daemonSessionToGame.contains(sessionId)) { + return; + } + + m_daemonGameToSession.insert(gameId, sessionId); + m_daemonSessionToGame.insert(sessionId, gameId); + + const bool isActiveState = state == QLatin1String("Running") || state == QLatin1String("Launching") || state == QLatin1String("Stopping"); + Game *game = App::instance()->gameModel()->gameById(gameId); - if (game) { + if (game && isActiveState) { game->setRunning(true); } Q_EMIT runningGamesChanged(); - applyRunningStateToLibrary(); }