| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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.Error?.Print(LogClass.Application, $"Error displaying Software Keyboard: {e}");
- }
- finally
- {
- dialogCloseEvent.Set();
- }
- });
- dialogCloseEvent.WaitOne();
- userText = error ? null : inputText;
- return error || okPressed;
- }
- }
- }
|