diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 5b7bcfd32..0ada8a130 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -52,6 +52,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input [ObservableProperty] private object _configViewModel; [ObservableProperty] private string _profileName; private bool _isLoaded; + public bool InitInputPage { get; set; } private static readonly InputConfigJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); @@ -92,6 +93,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool CanClearLed => SelectedGamepad.Name.ContainsIgnoreCase("DualSense"); public bool IsModified { get; set; } + public bool IsInputConfigChanged { get; set; } + public event Action NotifyChangesEvent; public PlayerIndex PlayerIdChoose @@ -121,13 +124,12 @@ namespace Ryujinx.Ava.UI.ViewModels.Input } _isLoaded = false; - LoadConfiguration(); LoadDevice(); LoadProfiles(); _isLoaded = true; - + OnPropertyChanged(); } } @@ -296,7 +298,10 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { ConfigViewModel = new ControllerInputViewModel(this, new GamepadInputConfig(controllerInputConfig)); } - } + + IsInputConfigChanged |= InitInputPage; // If the field has been changed, the control settings will be overwritten + InitInputPage = true; // initialization variable + } public void LoadDevice() { @@ -817,6 +822,13 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { IsModified = false; + if (!IsInputConfigChanged) + { + return; //If the input settings were not touched, then do nothing + } + + IsInputConfigChanged = false; // Input settings have been changed + List newConfig = []; newConfig.AddRange(ConfigurationState.Instance.Hid.InputConfig.Value); diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs index d04085a89..803162866 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs @@ -65,6 +65,9 @@ namespace Ryujinx.Ava.UI.Views.Input if (!float.IsNaN(_changeSlider) && _changeSlider != (float)check.Value) { (DataContext as ControllerInputViewModel)!.ParentModel.IsModified = true; + + FlagInputConfigChanged(); + _changeSlider = (float)check.Value; } } @@ -75,6 +78,9 @@ namespace Ryujinx.Ava.UI.Views.Input if (sender is CheckBox { IsPointerOver: true }) { (DataContext as ControllerInputViewModel)!.ParentModel.IsModified = true; + + FlagInputConfigChanged(); + _currentAssigner?.Cancel(); _currentAssigner = null; } @@ -102,6 +108,8 @@ namespace Ryujinx.Ava.UI.Views.Input PointerPressed += MouseClick; + FlagInputConfigChanged(); + ControllerInputViewModel viewModel = (DataContext as ControllerInputViewModel); IKeyboard keyboard = @@ -208,6 +216,11 @@ namespace Ryujinx.Ava.UI.Views.Input } } + private void FlagInputConfigChanged() + { + (DataContext as ControllerInputViewModel)!.ParentModel.IsInputConfigChanged = true; + } + private void MouseClick(object sender, PointerPressedEventArgs e) { bool shouldUnbind = e.GetCurrentPoint(this).Properties.IsMiddleButtonPressed; @@ -239,7 +252,6 @@ namespace Ryujinx.Ava.UI.Views.Input { gamepad?.ClearLed(); } - _currentAssigner?.Cancel(); _currentAssigner = null; } diff --git a/src/Ryujinx/UI/Views/Input/InputView.axaml.cs b/src/Ryujinx/UI/Views/Input/InputView.axaml.cs index b1061f70d..086c30360 100644 --- a/src/Ryujinx/UI/Views/Input/InputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/InputView.axaml.cs @@ -48,6 +48,7 @@ namespace Ryujinx.Ava.UI.Views.Input if (result == UserResult.Yes) { + ViewModel.InitInputPage = false; ViewModel.Save(); } diff --git a/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs index 99e424d4f..bb4b290ec 100644 --- a/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs @@ -60,6 +60,8 @@ namespace Ryujinx.Ava.UI.Views.Input PointerPressed += MouseClick; + FlagInputConfigChanged(); + if (DataContext is not KeyboardInputViewModel viewModel) return; @@ -184,6 +186,11 @@ namespace Ryujinx.Ava.UI.Views.Input } } + private void FlagInputConfigChanged() + { + (DataContext as KeyboardInputViewModel)!.ParentModel.IsInputConfigChanged = true; + } + private void MouseClick(object sender, PointerPressedEventArgs e) { bool shouldUnbind = e.GetCurrentPoint(this).Properties.IsMiddleButtonPressed;