Compare commits

..

6 Commits

Author SHA1 Message Date
Daenorth
1018c9db8b Update Norwegian Translation (#503)
Norwegian translation updated with the Compatibility list addition
2025-01-16 10:02:33 -06:00
Evan Husted
01ccd18726 UI: Meant to use that method in another place [ci-skip] 2025-01-16 09:52:35 -06:00
Evan Husted
abfbc6f4bc UI: Prevent desynced RPC when toggling it off/on while in-game 2025-01-16 09:52:01 -06:00
Francesco Saltori
6a4bc02d7a Update Italian translation (#489) 2025-01-16 06:38:36 -06:00
Hack茶ん
814c0526d2 Korean translations for compat list (#502) 2025-01-16 04:57:32 -06:00
Evan Husted
a5a4ef38e6 HLE: Stub IHidServer SetGestureOutputRanges (#524)
Lets "Donkey Kong Country Returns HD" get into main gameplay.
2025-01-16 02:39:39 -06:00
26 changed files with 224 additions and 508 deletions

View File

@@ -702,6 +702,18 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return ResultCode.Success; return ResultCode.Success;
} }
[CommandCmif(92)]
// SetGestureOutputRanges(pid, ushort Unknown0)
public ResultCode SetGestureOutputRanges(ServiceCtx context)
{
ulong pid = context.Request.HandleDesc.PId;
ushort unknown0 = context.RequestData.ReadUInt16();
Logger.Stub?.PrintStub(LogClass.ServiceHid, new { pid, unknown0 });
return ResultCode.Success;
}
[CommandCmif(100)] [CommandCmif(100)]
// SetSupportedNpadStyleSet(pid, nn::applet::AppletResourceUserId, nn::hid::NpadStyleTag) // SetSupportedNpadStyleSet(pid, nn::applet::AppletResourceUserId, nn::hid::NpadStyleTag)

View File

@@ -253,23 +253,11 @@ namespace Ryujinx.Input.SDL2
return IGamepad.GetStateSnapshot(this); return IGamepad.GetStateSnapshot(this);
} }
private static bool hotButtonMinus = false;
private static bool hotExit = false;
public bool SpecialExit()
{
if (hotButtonMinus)
{
hotButtonMinus = false;
return hotExit;
}
return hotExit = false;
}
public GamepadStateSnapshot GetMappedStateSnapshot() public GamepadStateSnapshot GetMappedStateSnapshot()
{ {
GamepadStateSnapshot rawState = GetStateSnapshot(); GamepadStateSnapshot rawState = GetStateSnapshot();
GamepadStateSnapshot result = default; GamepadStateSnapshot result = default;
lock (_userMappingLock) lock (_userMappingLock)
{ {
if (_buttonsUserMapping.Count == 0) if (_buttonsUserMapping.Count == 0)
@@ -282,28 +270,6 @@ namespace Ryujinx.Input.SDL2
if (!entry.IsValid) if (!entry.IsValid)
continue; continue;
if (GamepadButtonInputId.Minus == entry.To)
{
if (rawState.IsPressed(entry.From) && !hotButtonMinus)
{
hotButtonMinus = true;
}
else if (!result.IsPressed(entry.From) && hotButtonMinus)
{
hotButtonMinus = false;
}
}
if (GamepadButtonInputId.Plus == entry.To)
{
if (rawState.IsPressed(entry.To) && hotButtonMinus)
{
hotExit = true;
}
}
// Do not touch state of button already pressed // Do not touch state of button already pressed
if (!result.IsPressed(entry.To)) if (!result.IsPressed(entry.To))
{ {
@@ -410,7 +376,5 @@ namespace Ryujinx.Input.SDL2
return SDL_GameControllerGetButton(_gamepadHandle, _buttonsDriverMapping[(int)inputId]) == 1; return SDL_GameControllerGetButton(_gamepadHandle, _buttonsDriverMapping[(int)inputId]) == 1;
} }
} }
} }

View File

@@ -329,11 +329,6 @@ namespace Ryujinx.Input.SDL2
return result; return result;
} }
public bool SpecialExit()
{
return false;
}
public GamepadStateSnapshot GetStateSnapshot() public GamepadStateSnapshot GetStateSnapshot()
{ {
throw new NotSupportedException(); throw new NotSupportedException();

View File

@@ -25,10 +25,6 @@ namespace Ryujinx.Input.SDL2
{ {
_driver = driver; _driver = driver;
} }
public bool SpecialExit()
{
return false;
}
public Vector2 GetPosition() public Vector2 GetPosition()
{ {

View File

@@ -3,7 +3,6 @@ using Ryujinx.Common.Configuration.Hid;
using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Configuration.Hid.Controller;
using Ryujinx.Common.Configuration.Hid.Controller.Motion; using Ryujinx.Common.Configuration.Hid.Controller.Motion;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Gpu;
using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.HLE.HOS.Services.Hid;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
@@ -274,21 +273,15 @@ namespace Ryujinx.Input.HLE
} }
} }
public bool Update() public void Update()
{ {
// _gamepad may be altered by other threads // _gamepad may be altered by other threads
var gamepad = _gamepad; var gamepad = _gamepad;
if (gamepad != null && GamepadDriver != null) if (gamepad != null && GamepadDriver != null)
{ {
State = gamepad.GetMappedStateSnapshot(); State = gamepad.GetMappedStateSnapshot();
if (gamepad.SpecialExit())
{
return true;
}
if (_config is StandardControllerInputConfig controllerConfig && controllerConfig.Motion.EnableMotion) if (_config is StandardControllerInputConfig controllerConfig && controllerConfig.Motion.EnableMotion)
{ {
if (controllerConfig.Motion.MotionBackend == MotionInputBackendType.GamepadDriver) if (controllerConfig.Motion.MotionBackend == MotionInputBackendType.GamepadDriver)
@@ -341,7 +334,6 @@ namespace Ryujinx.Input.HLE
State = default; State = default;
_leftMotionInput = null; _leftMotionInput = null;
} }
return false;
} }
public GamepadInput GetHLEInputState() public GamepadInput GetHLEInputState()

View File

@@ -200,10 +200,8 @@ namespace Ryujinx.Input.HLE
ReloadConfiguration(inputConfig, enableKeyboard, enableMouse); ReloadConfiguration(inputConfig, enableKeyboard, enableMouse);
} }
public bool Update(float aspectRatio = 1) public void Update(float aspectRatio = 1)
{ {
bool specialExit = false;
lock (_lock) lock (_lock)
{ {
List<GamepadInput> hleInputStates = new(); List<GamepadInput> hleInputStates = new();
@@ -227,10 +225,9 @@ namespace Ryujinx.Input.HLE
DriverConfigurationUpdate(ref controller, inputConfig); DriverConfigurationUpdate(ref controller, inputConfig);
controller.UpdateUserConfiguration(inputConfig); controller.UpdateUserConfiguration(inputConfig);
controller.Update();
specialExit = controller.Update(); //hotkey press check
controller.UpdateRumble(_device.Hid.Npads.GetRumbleQueue(playerIndex)); controller.UpdateRumble(_device.Hid.Npads.GetRumbleQueue(playerIndex));
inputState = controller.GetHLEInputState(); inputState = controller.GetHLEInputState();
inputState.Buttons |= _device.Hid.UpdateStickButtons(inputState.LStick, inputState.RStick); inputState.Buttons |= _device.Hid.UpdateStickButtons(inputState.LStick, inputState.RStick);
@@ -318,8 +315,6 @@ namespace Ryujinx.Input.HLE
_device.TamperMachine.UpdateInput(hleInputStates); _device.TamperMachine.UpdateInput(hleInputStates);
} }
return specialExit;
} }
internal InputConfig GetPlayerInputConfigByIndex(int index) internal InputConfig GetPlayerInputConfigByIndex(int index)

View File

@@ -79,12 +79,6 @@ namespace Ryujinx.Input
/// <returns>A remapped snaphost of the state of the gamepad.</returns> /// <returns>A remapped snaphost of the state of the gamepad.</returns>
GamepadStateSnapshot GetMappedStateSnapshot(); GamepadStateSnapshot GetMappedStateSnapshot();
/// <summary>
/// Gets the state if the minus and plus buttons were pressed on the gamepad.
/// </summary>
/// <returns>returns true if the buttons were pressed.</returns>
bool SpecialExit();
/// <summary> /// <summary>
/// Get a snaphost of the state of the gamepad. /// Get a snaphost of the state of the gamepad.
/// </summary> /// </summary>

View File

@@ -18,7 +18,6 @@ using Ryujinx.Ava.UI.Helpers;
using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.Models;
using Ryujinx.Ava.UI.Renderer; using Ryujinx.Ava.UI.Renderer;
using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.Ava.UI.Views.Main;
using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.UI.Windows;
using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities;
using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Ava.Utilities.AppLibrary;
@@ -71,7 +70,6 @@ namespace Ryujinx.Ava
private const float MaxResolutionScale = 4.0f; // Max resolution hotkeys can scale to before wrapping. private const float MaxResolutionScale = 4.0f; // Max resolution hotkeys can scale to before wrapping.
private const int TargetFps = 60; private const int TargetFps = 60;
private const float VolumeDelta = 0.05f; private const float VolumeDelta = 0.05f;
static bool SpecialExit = false;
private static readonly Cursor _invisibleCursor = new(StandardCursorType.None); private static readonly Cursor _invisibleCursor = new(StandardCursorType.None);
private readonly nint _invisibleCursorWin; private readonly nint _invisibleCursorWin;
@@ -98,7 +96,6 @@ namespace Ryujinx.Ava
private bool _isCursorInRenderer = true; private bool _isCursorInRenderer = true;
private bool _ignoreCursorState = false; private bool _ignoreCursorState = false;
private enum CursorStates private enum CursorStates
{ {
CursorIsHidden, CursorIsHidden,
@@ -506,13 +503,8 @@ namespace Ryujinx.Ava
_viewModel.Volume = ConfigurationState.Instance.System.AudioVolume.Value; _viewModel.Volume = ConfigurationState.Instance.System.AudioVolume.Value;
MainLoop(); MainLoop();
Exit();
}
public bool IsSpecialExit() Exit();
{
return SpecialExit;
} }
private void UpdateIgnoreMissingServicesState(object sender, ReactiveEventArgs<bool> args) private void UpdateIgnoreMissingServicesState(object sender, ReactiveEventArgs<bool> args)
@@ -597,7 +589,6 @@ namespace Ryujinx.Ava
_isStopped = true; _isStopped = true;
Stop(); Stop();
} }
public void DisposeContext() public void DisposeContext()
@@ -1144,7 +1135,6 @@ namespace Ryujinx.Ava
string dockedMode = ConfigurationState.Instance.System.EnableDockedMode ? LocaleManager.Instance[LocaleKeys.Docked] : LocaleManager.Instance[LocaleKeys.Handheld]; string dockedMode = ConfigurationState.Instance.System.EnableDockedMode ? LocaleManager.Instance[LocaleKeys.Docked] : LocaleManager.Instance[LocaleKeys.Handheld];
string vSyncMode = Device.VSyncMode.ToString(); string vSyncMode = Device.VSyncMode.ToString();
UpdateShaderCount(); UpdateShaderCount();
if (GraphicsConfig.ResScale != 1) if (GraphicsConfig.ResScale != 1)
@@ -1210,17 +1200,7 @@ namespace Ryujinx.Ava
return false; return false;
} }
if (NpadManager.Update(ConfigurationState.Instance.Graphics.AspectRatio.Value.ToFloat())) NpadManager.Update(ConfigurationState.Instance.Graphics.AspectRatio.Value.ToFloat());
{
if (ConfigurationState.Instance.Hid.SpecialExitEmulator.Value == 1)
{
SpecialExit = true; // close App
}
if (ConfigurationState.Instance.Hid.SpecialExitEmulator.Value > 0)
{
_isActive = false; //close game
}
}
if (_viewModel.IsActive) if (_viewModel.IsActive)
{ {
@@ -1355,8 +1335,6 @@ namespace Ryujinx.Ava
Device.Hid.DebugPad.Update(); Device.Hid.DebugPad.Update();
return true; return true;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,5 @@
using DiscordRPC; using DiscordRPC;
using Gommon;
using Humanizer; using Humanizer;
using Humanizer.Localisation; using Humanizer.Localisation;
using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Ava.Utilities.AppLibrary;
@@ -45,16 +46,7 @@ namespace Ryujinx.Ava
}; };
ConfigurationState.Instance.EnableDiscordIntegration.Event += Update; ConfigurationState.Instance.EnableDiscordIntegration.Event += Update;
TitleIDs.CurrentApplication.Event += (_, e) => TitleIDs.CurrentApplication.Event += (_, e) => Use(e.NewValue);
{
if (e.NewValue)
SwitchToPlayingState(
ApplicationLibrary.LoadAndSaveMetaData(e.NewValue),
Switch.Shared.Processes.ActiveApplication
);
else
SwitchToMainState();
};
} }
private static void Update(object sender, ReactiveEventArgs<bool> evnt) private static void Update(object sender, ReactiveEventArgs<bool> evnt)
@@ -75,11 +67,23 @@ namespace Ryujinx.Ava
_discordClient = new DiscordRpcClient(ApplicationId); _discordClient = new DiscordRpcClient(ApplicationId);
_discordClient.Initialize(); _discordClient.Initialize();
_discordClient.SetPresence(_discordPresenceMain);
Use(TitleIDs.CurrentApplication);
} }
} }
} }
public static void Use(Optional<string> titleId)
{
if (titleId.TryGet(out string tid))
SwitchToPlayingState(
ApplicationLibrary.LoadAndSaveMetaData(tid),
Switch.Shared.Processes.ActiveApplication
);
else
SwitchToMainState();
}
private static void SwitchToPlayingState(ApplicationMetadata appMeta, ProcessResult procRes) private static void SwitchToPlayingState(ApplicationMetadata appMeta, ProcessResult procRes)
{ {
_discordClient?.SetPresence(new RichPresence _discordClient?.SetPresence(new RichPresence

View File

@@ -350,11 +350,11 @@ namespace Ryujinx.Headless
{ {
return options.GraphicsBackend switch return options.GraphicsBackend switch
{ {
GraphicsBackend.Vulkan => new VulkanWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet, options.SpecialExit), GraphicsBackend.Vulkan => new VulkanWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet),
GraphicsBackend.Metal => OperatingSystem.IsMacOS() ? GraphicsBackend.Metal => OperatingSystem.IsMacOS() ?
new MetalWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableKeyboard, options.HideCursorMode, options.IgnoreControllerApplet, options.SpecialExit) : new MetalWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableKeyboard, options.HideCursorMode, options.IgnoreControllerApplet) :
throw new Exception("Attempted to use Metal renderer on non-macOS platform!"), throw new Exception("Attempted to use Metal renderer on non-macOS platform!"),
_ => new OpenGLWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet, options.SpecialExit) _ => new OpenGLWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet)
}; };
} }

View File

@@ -23,9 +23,8 @@ namespace Ryujinx.Headless
AspectRatio aspectRatio, AspectRatio aspectRatio,
bool enableMouse, bool enableMouse,
HideCursorMode hideCursorMode, HideCursorMode hideCursorMode,
bool ignoreControllerApplet, bool ignoreControllerApplet)
int specialExitEmulator) : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { }
: base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet, specialExitEmulator) { }
public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_METAL; public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_METAL;

View File

@@ -118,9 +118,8 @@ namespace Ryujinx.Headless
AspectRatio aspectRatio, AspectRatio aspectRatio,
bool enableMouse, bool enableMouse,
HideCursorMode hideCursorMode, HideCursorMode hideCursorMode,
bool ignoreControllerApplet, bool ignoreControllerApplet)
int specialExitEmulator) : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet)
: base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet, specialExitEmulator)
{ {
_glLogLevel = glLogLevel; _glLogLevel = glLogLevel;
} }

View File

@@ -150,10 +150,7 @@ namespace Ryujinx.Headless
if (NeedsOverride(nameof(IgnoreControllerApplet))) if (NeedsOverride(nameof(IgnoreControllerApplet)))
IgnoreControllerApplet = configurationState.IgnoreApplet; IgnoreControllerApplet = configurationState.IgnoreApplet;
if (NeedsOverride(nameof(SpecialExit)))
SpecialExit = configurationState.Hid.SpecialExitEmulator;
return; return;
bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey))); bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey)));
@@ -277,9 +274,6 @@ namespace Ryujinx.Headless
[Option("enable-mouse", Required = false, Default = false, HelpText = "Enable or disable mouse support.")] [Option("enable-mouse", Required = false, Default = false, HelpText = "Enable or disable mouse support.")]
public bool EnableMouse { get; set; } public bool EnableMouse { get; set; }
[Option("enable-press-hotkeys-to-exit", Required = false, Default = 0, HelpText = "press the minus and plus buttons to: 0 -disable, 1 - exit app, 2 - exit game.")]
public int SpecialExit { get; set; }
[Option("hide-cursor", Required = false, Default = HideCursorMode.OnIdle, HelpText = "Change when the cursor gets hidden.")] [Option("hide-cursor", Required = false, Default = HideCursorMode.OnIdle, HelpText = "Change when the cursor gets hidden.")]
public HideCursorMode HideCursorMode { get; set; } public HideCursorMode HideCursorMode { get; set; }
@@ -420,7 +414,6 @@ namespace Ryujinx.Headless
[Option("ignore-controller-applet", Required = false, Default = false, HelpText = "Enable ignoring the controller applet when your game loses connection to your controller.")] [Option("ignore-controller-applet", Required = false, Default = false, HelpText = "Enable ignoring the controller applet when your game loses connection to your controller.")]
public bool IgnoreControllerApplet { get; set; } public bool IgnoreControllerApplet { get; set; }
// Values // Values
[Value(0, MetaName = "input", HelpText = "Input to load.", Required = true)] [Value(0, MetaName = "input", HelpText = "Input to load.", Required = true)]

View File

@@ -18,9 +18,8 @@ namespace Ryujinx.Headless
AspectRatio aspectRatio, AspectRatio aspectRatio,
bool enableMouse, bool enableMouse,
HideCursorMode hideCursorMode, HideCursorMode hideCursorMode,
bool ignoreControllerApplet, bool ignoreControllerApplet)
int specialExitEmulator) : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet)
: base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet, specialExitEmulator)
{ {
_glLogLevel = glLogLevel; _glLogLevel = glLogLevel;
} }

View File

@@ -88,7 +88,6 @@ namespace Ryujinx.Headless
private readonly AspectRatio _aspectRatio; private readonly AspectRatio _aspectRatio;
private readonly bool _enableMouse; private readonly bool _enableMouse;
private readonly int _specialExitEmulator;
private readonly bool _ignoreControllerApplet; private readonly bool _ignoreControllerApplet;
public WindowBase( public WindowBase(
@@ -97,8 +96,7 @@ namespace Ryujinx.Headless
AspectRatio aspectRatio, AspectRatio aspectRatio,
bool enableMouse, bool enableMouse,
HideCursorMode hideCursorMode, HideCursorMode hideCursorMode,
bool ignoreControllerApplet, bool ignoreControllerApplet)
int specialExitEmulator)
{ {
MouseDriver = new SDL2MouseDriver(hideCursorMode); MouseDriver = new SDL2MouseDriver(hideCursorMode);
_inputManager = inputManager; _inputManager = inputManager;
@@ -114,7 +112,6 @@ namespace Ryujinx.Headless
_gpuDoneEvent = new ManualResetEvent(false); _gpuDoneEvent = new ManualResetEvent(false);
_aspectRatio = aspectRatio; _aspectRatio = aspectRatio;
_enableMouse = enableMouse; _enableMouse = enableMouse;
_specialExitEmulator = specialExitEmulator;
_ignoreControllerApplet = ignoreControllerApplet; _ignoreControllerApplet = ignoreControllerApplet;
HostUITheme = new HeadlessHostUiTheme(); HostUITheme = new HeadlessHostUiTheme();

View File

@@ -30,11 +30,6 @@ namespace Ryujinx.Ava.Input
public readonly Key From = from; public readonly Key From = from;
} }
public bool SpecialExit()
{
return false;
}
public AvaloniaKeyboard(AvaloniaKeyboardDriver driver, string id, string name) public AvaloniaKeyboard(AvaloniaKeyboardDriver driver, string id, string name)
{ {
_buttonsUserMapping = []; _buttonsUserMapping = [];

View File

@@ -13,11 +13,6 @@ namespace Ryujinx.Ava.Input
public string Id => "0"; public string Id => "0";
public string Name => "AvaloniaMouse"; public string Name => "AvaloniaMouse";
public bool SpecialExit()
{
return false;
}
public bool IsConnected => true; public bool IsConnected => true;
public GamepadFeaturesFlag Features => throw new NotImplementedException(); public GamepadFeaturesFlag Features => throw new NotImplementedException();
public bool[] Buttons => _driver.PressedButtons; public bool[] Buttons => _driver.PressedButtons;

View File

@@ -1049,7 +1049,6 @@ namespace Ryujinx.Ava.UI.ViewModels
private void InitializeGame() private void InitializeGame()
{ {
RendererHostControl.WindowCreated += RendererHost_Created; RendererHostControl.WindowCreated += RendererHost_Created;
AppHost.StatusUpdatedEvent += Update_StatusBar; AppHost.StatusUpdatedEvent += Update_StatusBar;
@@ -1059,13 +1058,7 @@ namespace Ryujinx.Ava.UI.ViewModels
AppHost?.Start(); AppHost?.Start();
if (AppHost?.IsSpecialExit() == true)
{
Window.ForceExit();
}
AppHost?.DisposeContext(); AppHost?.DisposeContext();
} }
private async Task HandleRelaunch() private async Task HandleRelaunch()

View File

@@ -128,7 +128,6 @@ namespace Ryujinx.Ava.UI.ViewModels
public bool EnableDockedMode { get; set; } public bool EnableDockedMode { get; set; }
public bool EnableKeyboard { get; set; } public bool EnableKeyboard { get; set; }
public bool EnableMouse { get; set; } public bool EnableMouse { get; set; }
public int EnableSpecialExit { get; set; }
public VSyncMode VSyncMode public VSyncMode VSyncMode
{ {
get => _vSyncMode; get => _vSyncMode;
@@ -260,8 +259,6 @@ namespace Ryujinx.Ava.UI.ViewModels
public int OpenglDebugLevel { get; set; } public int OpenglDebugLevel { get; set; }
public int MemoryMode { get; set; } public int MemoryMode { get; set; }
public int BaseStyleIndex { get; set; } public int BaseStyleIndex { get; set; }
public int GraphicsBackendIndex public int GraphicsBackendIndex
{ {
get => _graphicsBackendIndex; get => _graphicsBackendIndex;
@@ -514,13 +511,6 @@ namespace Ryujinx.Ava.UI.ViewModels
EnableDockedMode = config.System.EnableDockedMode; EnableDockedMode = config.System.EnableDockedMode;
EnableKeyboard = config.Hid.EnableKeyboard; EnableKeyboard = config.Hid.EnableKeyboard;
EnableMouse = config.Hid.EnableMouse; EnableMouse = config.Hid.EnableMouse;
EnableSpecialExit = config.Hid.SpecialExitEmulator.Value switch
{
0 => 0, // "Hotkey 'Exit' is Disabled"
1 => 1, // "Close app. by hotkey"
2 => 2, // "Close game by hotkey"
_ => 0
};
// Keyboard Hotkeys // Keyboard Hotkeys
KeyboardHotkey = new HotkeyConfig(config.Hid.Hotkeys.Value); KeyboardHotkey = new HotkeyConfig(config.Hid.Hotkeys.Value);
@@ -628,13 +618,6 @@ namespace Ryujinx.Ava.UI.ViewModels
config.System.EnableDockedMode.Value = EnableDockedMode; config.System.EnableDockedMode.Value = EnableDockedMode;
config.Hid.EnableKeyboard.Value = EnableKeyboard; config.Hid.EnableKeyboard.Value = EnableKeyboard;
config.Hid.EnableMouse.Value = EnableMouse; config.Hid.EnableMouse.Value = EnableMouse;
config.Hid.SpecialExitEmulator.Value = EnableSpecialExit switch
{
0 => 0, // "Hotkey 'Exit' is Disabled",
1 => 1, // "Close app. by hotkey",
2 => 2, // "Close game by hotkey",
_ => 0
};
// Keyboard Hotkeys // Keyboard Hotkeys
config.Hid.Hotkeys.Value = KeyboardHotkey.GetConfig(); config.Hid.Hotkeys.Value = KeyboardHotkey.GetConfig();

View File

@@ -1,4 +1,4 @@
<UserControl <UserControl
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsInputView" x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsInputView"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -58,20 +58,6 @@
<TextBlock <TextBlock
Text="{ext:Locale SettingsTabInputDirectMouseAccess}" /> Text="{ext:Locale SettingsTabInputDirectMouseAccess}" />
</CheckBox> </CheckBox>
<ComboBox SelectedIndex="{Binding EnableSpecialExit}"
ToolTip.Tip="{ext:Locale SpecialExitTooltip}"
HorizontalContentAlignment="Left"
MinWidth="160">
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabInputDisableExitHotKey}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabInputHotkeyIsCloseApp}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabInputHotkeyIsCloseGame}" />
</ComboBoxItem>
</ComboBox>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</Grid> </Grid>

View File

@@ -45,7 +45,6 @@ namespace Ryujinx.Ava.UI.Windows
internal readonly AvaHostUIHandler UiHandler; internal readonly AvaHostUIHandler UiHandler;
private bool _isLoading; private bool _isLoading;
private bool _isExitWithoutConfirm = false;
private bool _applicationsLoadedOnce; private bool _applicationsLoadedOnce;
private UserChannelPersistence _userChannelPersistence; private UserChannelPersistence _userChannelPersistence;
@@ -572,11 +571,11 @@ namespace Ryujinx.Ava.UI.Windows
protected override void OnClosing(WindowClosingEventArgs e) protected override void OnClosing(WindowClosingEventArgs e)
{ {
if (!ViewModel.IsClosing && ViewModel.AppHost != null && ConfigurationState.Instance.ShowConfirmExit && !_isExitWithoutConfirm) if (!ViewModel.IsClosing && ViewModel.AppHost != null && ConfigurationState.Instance.ShowConfirmExit)
{ {
e.Cancel = true; e.Cancel = true;
ConfirmExit(); ConfirmExit();
return; return;
} }
@@ -617,12 +616,6 @@ namespace Ryujinx.Ava.UI.Windows
base.OnClosing(e); base.OnClosing(e);
} }
public void ForceExit()
{
_isExitWithoutConfirm = true;
Close();
}
private void ConfirmExit() private void ConfirmExit()
{ {
Dispatcher.UIThread.InvokeAsync(async () => Dispatcher.UIThread.InvokeAsync(async () =>

View File

@@ -17,7 +17,7 @@ namespace Ryujinx.Ava.Utilities.Configuration
/// <summary> /// <summary>
/// The current version of the file format /// The current version of the file format
/// </summary> /// </summary>
public const int CurrentVersion = 60; public const int CurrentVersion = 59;
/// <summary> /// <summary>
/// Version of the configuration file format /// Version of the configuration file format
@@ -366,12 +366,6 @@ namespace Ryujinx.Ava.Utilities.Configuration
/// </summary> /// </summary>
public bool EnableMouse { get; set; } public bool EnableMouse { get; set; }
/// <summary>
/// Allows you to choose one of several behaviors when pressing hotkeys:
/// 0 - Do nothing, 1 - Close the emulator application, 2 - Exit the game.
/// </summary>
public int SpecialExitEmulator { get; set; }
/// <summary> /// <summary>
/// Hotkey Keyboard Bindings /// Hotkey Keyboard Bindings
/// </summary> /// </summary>

View File

@@ -136,7 +136,6 @@ namespace Ryujinx.Ava.Utilities.Configuration
Hid.EnableKeyboard.Value = cff.EnableKeyboard; Hid.EnableKeyboard.Value = cff.EnableKeyboard;
Hid.EnableMouse.Value = cff.EnableMouse; Hid.EnableMouse.Value = cff.EnableMouse;
Hid.SpecialExitEmulator.Value = cff.SpecialExitEmulator;
Hid.Hotkeys.Value = cff.Hotkeys; Hid.Hotkeys.Value = cff.Hotkeys;
Hid.InputConfig.Value = cff.InputConfig ?? []; Hid.InputConfig.Value = cff.InputConfig ?? [];
@@ -415,10 +414,6 @@ namespace Ryujinx.Ava.Utilities.Configuration
// This was accidentally enabled by default when it was PRed. That is not what we want, // This was accidentally enabled by default when it was PRed. That is not what we want,
// so as a compromise users who want to use it will simply need to re-enable it once after updating. // so as a compromise users who want to use it will simply need to re-enable it once after updating.
cff.IgnoreApplet = false; cff.IgnoreApplet = false;
}),
(60, static cff =>
{
cff.SpecialExitEmulator = 0;
}) })
); );
} }

View File

@@ -420,13 +420,6 @@ namespace Ryujinx.Ava.Utilities.Configuration
/// </summary> /// </summary>
public ReactiveObject<bool> EnableMouse { get; private set; } public ReactiveObject<bool> EnableMouse { get; private set; }
/// <summary>
/// Allows you to choose one of several behaviors when pressing hotkeys:
/// 0 - Do nothing, 1 - Close the emulator application, 2 - Exit the game.
/// </summary>
public ReactiveObject<int> SpecialExitEmulator { get; private set; }
/// <summary> /// <summary>
/// Hotkey Keyboard Bindings /// Hotkey Keyboard Bindings
/// </summary> /// </summary>
@@ -443,7 +436,6 @@ namespace Ryujinx.Ava.Utilities.Configuration
{ {
EnableKeyboard = new ReactiveObject<bool>(); EnableKeyboard = new ReactiveObject<bool>();
EnableMouse = new ReactiveObject<bool>(); EnableMouse = new ReactiveObject<bool>();
SpecialExitEmulator = new ReactiveObject<int>();
Hotkeys = new ReactiveObject<KeyboardHotkeys>(); Hotkeys = new ReactiveObject<KeyboardHotkeys>();
InputConfig = new ReactiveObject<List<InputConfig>>(); InputConfig = new ReactiveObject<List<InputConfig>>();
} }

View File

@@ -128,7 +128,6 @@ namespace Ryujinx.Ava.Utilities.Configuration
ShowConsole = UI.ShowConsole, ShowConsole = UI.ShowConsole,
EnableKeyboard = Hid.EnableKeyboard, EnableKeyboard = Hid.EnableKeyboard,
EnableMouse = Hid.EnableMouse, EnableMouse = Hid.EnableMouse,
SpecialExitEmulator = Hid.SpecialExitEmulator,
Hotkeys = Hid.Hotkeys, Hotkeys = Hid.Hotkeys,
KeyboardConfig = [], KeyboardConfig = [],
ControllerConfig = [], ControllerConfig = [],
@@ -242,7 +241,6 @@ namespace Ryujinx.Ava.Utilities.Configuration
UI.WindowStartup.WindowMaximized.Value = false; UI.WindowStartup.WindowMaximized.Value = false;
Hid.EnableKeyboard.Value = false; Hid.EnableKeyboard.Value = false;
Hid.EnableMouse.Value = false; Hid.EnableMouse.Value = false;
Hid.SpecialExitEmulator.Value = 0;
Hid.Hotkeys.Value = new KeyboardHotkeys Hid.Hotkeys.Value = new KeyboardHotkeys
{ {
ToggleVSyncMode = Key.F1, ToggleVSyncMode = Key.F1,