Inline software keyboard without input pop up dialog (#2180)

* Initial implementation

* Refactor dynamic text input keys out to facilitate configuration via UI

* Fix code styling

* Add per applet indirect layer handles

* Remove static functions from SoftwareKeyboardRenderer

* Remove inline keyboard reset delay

* Remove inline keyboard V2 responses

* Add inline keyboard soft-lock recovering

* Add comments

* Forward accept and cancel key names to the keyboard and add soft-lock prevention line

* Add dummy window to handle paste events

* Rework inline keyboard state machine and graphics

* Implement IHostUiHandler interfaces on headless WindowBase class

* Add inline keyboard assets

* Fix coding style

* Fix coding style

* Change mode cycling shortcut to F6

* Fix invalid calc size error in games using extended calc

* Remove unnecessary namespaces
This commit is contained in:
Caian Benedicto 2021-10-12 16:54:21 -03:00 committed by GitHub
parent 69093cf2d6
commit 380b95bc59
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 2853 additions and 344 deletions

View file

@ -25,6 +25,8 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
private int _normalOutDataEventHandle;
private int _interactiveOutDataEventHandle;
private int _indirectLayerHandle;
public ILibraryAppletAccessor(AppletId appletId, Horizon system)
{
_kernelContext = system.KernelContext;
@ -222,21 +224,11 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
// GetIndirectLayerConsumerHandle() -> u64 indirect_layer_consumer_handle
public ResultCode GetIndirectLayerConsumerHandle(ServiceCtx context)
{
/*
if (indirectLayerConsumer == null)
{
return ResultCode.ObjectInvalid;
}
*/
Horizon horizon = _kernelContext.Device.System;
// TODO: Official sw uses this during LibraryApplet creation when LibraryAppletMode is 0x3.
// Since we don't support IndirectLayer and the handle couldn't be 0, it's fine to return 1.
_indirectLayerHandle = horizon.AppletState.IndirectLayerHandles.Add(_applet);
ulong indirectLayerConsumerHandle = 1;
context.ResponseData.Write(indirectLayerConsumerHandle);
Logger.Stub?.PrintStub(LogClass.ServiceAm, new { indirectLayerConsumerHandle });
context.ResponseData.Write((ulong)_indirectLayerHandle);
return ResultCode.Success;
}
@ -260,6 +252,10 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
_kernelContext.Syscall.CloseHandle(_interactiveOutDataEventHandle);
}
}
Horizon horizon = _kernelContext.Device.System;
horizon.AppletState.IndirectLayerHandles.Delete(_indirectLayerHandle);
}
}
}