mirror of
https://git.naxdy.org/Mirror/Ryujinx.git
synced 2026-08-18 05:07:58 +00:00
fix Dynamic input swap checkbox persistence bug
This commit is contained in:
parent
b723743d8c
commit
fa4fe3a96a
1 changed files with 29 additions and 25 deletions
|
|
@ -2116,18 +2116,14 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
|||
|
||||
public void Save()
|
||||
{
|
||||
|
||||
if (!IsModified)
|
||||
{
|
||||
return; //If the input settings were not touched, then do nothing
|
||||
}
|
||||
|
||||
// Don't persist changes when editing the Default profile
|
||||
if (IsDefaultProfileName(ProfileName))
|
||||
{
|
||||
IsModified = false;
|
||||
return;
|
||||
}
|
||||
// Don't persist profile changes when editing the Default profile
|
||||
// However, player-level settings (Dynamic Input Swap, AllowDuplicateDeviceAssignment) should still be saved
|
||||
bool isEditingDefaultProfile = IsDefaultProfileName(ProfileName);
|
||||
|
||||
IsModified = false;
|
||||
|
||||
|
|
@ -2148,15 +2144,36 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
|||
newConfig.RemoveAll(static inputConfig => inputConfig == null);
|
||||
newAssignments.RemoveAll(static assignment => assignment == null);
|
||||
|
||||
if (Device == 0)
|
||||
// Always save PlayerInputAssignment to persist player-level settings (Dynamic Input Swap, etc.)
|
||||
// even when editing the Default profile
|
||||
PlayerInputAssignment assignment = GetEditedPlayerInputAssignment();
|
||||
int assignmentIndex = newAssignments.FindIndex(x => x.PlayerIndex == PlayerId);
|
||||
if (assignmentIndex == -1)
|
||||
{
|
||||
newAssignments.Add(assignment);
|
||||
}
|
||||
else
|
||||
{
|
||||
newAssignments[assignmentIndex] = assignment;
|
||||
}
|
||||
|
||||
if (!AllowDuplicateDeviceAssignment)
|
||||
{
|
||||
RemoveDuplicateDeviceAssignmentsForCurrentPlayer(newAssignments, assignment);
|
||||
}
|
||||
|
||||
// Don't save InputConfig profile when editing Default profile
|
||||
if (isEditingDefaultProfile)
|
||||
{
|
||||
// Skip InputConfig save
|
||||
}
|
||||
else if (Device == 0)
|
||||
{
|
||||
newConfig.RemoveAll(inputConfig => inputConfig.PlayerIndex == PlayerId);
|
||||
newAssignments.RemoveAll(assignment => assignment.PlayerIndex == PlayerId);
|
||||
}
|
||||
else
|
||||
{
|
||||
InputConfig config = GetSelectedDeviceConfig();
|
||||
PlayerInputAssignment assignment = GetEditedPlayerInputAssignment();
|
||||
|
||||
if (config == null)
|
||||
{
|
||||
|
|
@ -2164,6 +2181,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
|||
return;
|
||||
}
|
||||
|
||||
config.EnableDynamicGamepadSwap = EnableDynamicGamepadSwap;
|
||||
|
||||
int i = newConfig.FindIndex(x => x.PlayerIndex == PlayerId);
|
||||
if (i == -1)
|
||||
{
|
||||
|
|
@ -2173,21 +2192,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
|||
{
|
||||
newConfig[i] = config;
|
||||
}
|
||||
|
||||
int assignmentIndex = newAssignments.FindIndex(x => x.PlayerIndex == PlayerId);
|
||||
if (assignmentIndex == -1)
|
||||
{
|
||||
newAssignments.Add(assignment);
|
||||
}
|
||||
else
|
||||
{
|
||||
newAssignments[assignmentIndex] = assignment;
|
||||
}
|
||||
|
||||
if (!AllowDuplicateDeviceAssignment)
|
||||
{
|
||||
RemoveDuplicateDeviceAssignmentsForCurrentPlayer(newAssignments, assignment);
|
||||
}
|
||||
}
|
||||
|
||||
// Atomically replace and signal input change.
|
||||
|
|
|
|||
Loading…
Reference in a new issue