From 5c1757f7c29fc06577b5fc551dd3d76b12b281d3 Mon Sep 17 00:00:00 2001 From: Elise Date: Sun, 29 Mar 2020 14:47:37 +0200 Subject: [PATCH] Escape key now brings up a dialog to confirm you want to stop emulation (#1044) * Add a dialog to make sure user wants to stop emulation when esc is pressed * Remove unneccesary space * Fix formatting * Remove unnessecary spaces * Fix formatting for member of GtkDialog --- Ryujinx/Ui/GLRenderer.cs | 5 ++++- Ryujinx/Ui/GtkDialog.cs | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Ryujinx/Ui/GLRenderer.cs b/Ryujinx/Ui/GLRenderer.cs index fa41ca4c..1105004a 100644 --- a/Ryujinx/Ui/GLRenderer.cs +++ b/Ryujinx/Ui/GLRenderer.cs @@ -138,7 +138,10 @@ namespace Ryujinx.Ui { if (keyboard.IsKeyDown(OpenTK.Input.Key.Escape)) { - Exit(); + if (GtkDialog.CreateExitDialog()) + { + Exit(); + } } else { diff --git a/Ryujinx/Ui/GtkDialog.cs b/Ryujinx/Ui/GtkDialog.cs index b4e9fa1c..698b8b7e 100644 --- a/Ryujinx/Ui/GtkDialog.cs +++ b/Ryujinx/Ui/GtkDialog.cs @@ -5,6 +5,8 @@ namespace Ryujinx.Ui { internal class GtkDialog { + internal static bool _isExitDialogOpen = false; + internal static void CreateDialog(string title, string text, string secondaryText) { MessageDialog errorDialog = new MessageDialog(null, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, null) @@ -29,5 +31,36 @@ namespace Ryujinx.Ui { CreateDialog("Ryujinx - Error", "Ryujinx has encountered an error", errorMessage); } + + internal static bool CreateExitDialog() + { + if (_isExitDialogOpen) + { + return false; + } + + _isExitDialogOpen = true; + + MessageDialog messageDialog = new MessageDialog(null, DialogFlags.Modal, MessageType.Question, ButtonsType.OkCancel, null) + { + Title = "Ryujinx - Exit", + Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.Icon.png"), + Text = "Are you sure you want to stop emulation?", + SecondaryText = "All unsaved data will be lost", + WindowPosition = WindowPosition.Center + }; + + messageDialog.SetSizeRequest(100, 20); + ResponseType res = (ResponseType)messageDialog.Run(); + messageDialog.Dispose(); + _isExitDialogOpen = false; + + if (res == ResponseType.Ok) + { + return true; + } + + return false; + } } }