diff --git a/Ryujinx/Ui/GLRenderer.cs b/Ryujinx/Ui/GLRenderer.cs index fa41ca4c8..1105004a8 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 b4e9fa1ca..698b8b7e2 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; + } } }