diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json
index 43f25e353..c806bbfc5 100644
--- a/src/Ryujinx/Assets/Locales/en_US.json
+++ b/src/Ryujinx/Assets/Locales/en_US.json
@@ -23,6 +23,7 @@
"MenuBarOptionsStartGamesInFullscreen": "Start Games in Fullscreen Mode",
"MenuBarOptionsStartGamesWithoutUI": "Start Games with UI Hidden",
"MenuBarOptionsStopEmulation": "Stop Emulation",
+ "MenuBarOptionsRestartEmulation": "Restart Emulation",
"MenuBarOptionsSettings": "_Settings",
"MenuBarOptionsManageUserProfiles": "_Manage User Profiles",
"MenuBarActions": "_Actions",
diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs
index e8b4c033a..6a98a934a 100644
--- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs
+++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs
@@ -115,6 +115,7 @@ namespace Ryujinx.Ava.UI.ViewModels
private string _screenshotKey = "F8";
private float _volume;
private ApplicationData _currentApplicationData;
+ private bool _pendingRestart;
private readonly AutoResetEvent _rendererWaitEvent;
private int _customVSyncInterval;
private int _customVSyncIntervalPercentageProxy;
@@ -1092,6 +1093,14 @@ namespace Ryujinx.Ava.UI.ViewModels
await LoadApplication(_currentApplicationData);
}
+ else if (_pendingRestart)
+ {
+ _pendingRestart = false;
+
+ Logger.Info?.Print(LogClass.Application, $"Restarting emulation for '{_currentApplicationData.Name}'");
+
+ await LoadApplication(_currentApplicationData);
+ }
else
{
// Otherwise, clear state.
@@ -1100,6 +1109,21 @@ namespace Ryujinx.Ava.UI.ViewModels
}
}
+ public void RestartEmulation()
+ {
+ if (AppHost is null || _currentApplicationData is null)
+ {
+ Logger.Warning?.Print(LogClass.Application, "RestartEmulation called but no application is running.");
+
+ return;
+ }
+
+ Logger.Info?.Print(LogClass.Application, $"Restart requested for '{_currentApplicationData.Name}'");
+
+ _pendingRestart = true;
+ AppHost.Stop();
+ }
+
private void Update_StatusBar(object sender, StatusUpdatedEventArgs args)
{
if (ShowMenuAndStatusBar && !ShowLoadProgress && Application.Current != null)
diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml
index 676f0ef07..f10459ff1 100644
--- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml
+++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml
@@ -189,6 +189,11 @@
Click="StopEmulation_Click"
Header="{locale:Locale MenuBarOptionsStopEmulation}"
InputGesture="Escape"
+ IsEnabled="{Binding IsGameRunning}" />
+
diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml b/src/Ryujinx/UI/Windows/MainWindow.axaml
index 1f50b1cb3..fee2755d4 100644
--- a/src/Ryujinx/UI/Windows/MainWindow.axaml
+++ b/src/Ryujinx/UI/Windows/MainWindow.axaml
@@ -42,6 +42,7 @@
+