aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx/Ui/GtkHostUiHandler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx/Ui/GtkHostUiHandler.cs')
-rw-r--r--Ryujinx/Ui/GtkHostUiHandler.cs69
1 files changed, 69 insertions, 0 deletions
diff --git a/Ryujinx/Ui/GtkHostUiHandler.cs b/Ryujinx/Ui/GtkHostUiHandler.cs
new file mode 100644
index 00000000..7b7b3647
--- /dev/null
+++ b/Ryujinx/Ui/GtkHostUiHandler.cs
@@ -0,0 +1,69 @@
+using Gtk;
+using Ryujinx.Common.Logging;
+using Ryujinx.HLE;
+using Ryujinx.HLE.HOS.Applets;
+using System;
+using System.Threading;
+
+namespace Ryujinx.Ui
+{
+ internal class GtkHostUiHandler : IHostUiHandler
+ {
+ private readonly Window _parent;
+
+ public GtkHostUiHandler(Window parent)
+ {
+ _parent = parent;
+ }
+
+ public bool DisplayInputDialog(SoftwareKeyboardUiArgs args, out string userText)
+ {
+ ManualResetEvent dialogCloseEvent = new ManualResetEvent(false);
+ bool okPressed = false;
+ bool error = false;
+ string inputText = args.InitialText ?? "";
+
+ Application.Invoke(delegate
+ {
+ try
+ {
+ var swkbdDialog = new InputDialog(_parent)
+ {
+ Title = "Software Keyboard",
+ Text = args.HeaderText,
+ SecondaryText = args.SubtitleText
+ };
+
+ swkbdDialog.InputEntry.Text = inputText;
+ swkbdDialog.InputEntry.PlaceholderText = args.GuideText;
+ swkbdDialog.OkButton.Label = args.SubmitText;
+
+ swkbdDialog.SetInputLengthValidation(args.StringLengthMin, args.StringLengthMax);
+
+ if (swkbdDialog.Run() == (int)ResponseType.Ok)
+ {
+ inputText = swkbdDialog.InputEntry.Text;
+ okPressed = true;
+ }
+
+ swkbdDialog.Dispose();
+ }
+ catch (Exception e)
+ {
+ error = true;
+ Logger.PrintError(LogClass.Application, $"Error displaying Software Keyboard: {e}");
+ }
+ finally
+ {
+ dialogCloseEvent.Set();
+ }
+ });
+
+ dialogCloseEvent.WaitOne();
+
+ userText = error ? null : inputText;
+
+ return error || okPressed;
+ }
+ }
+}