aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMutantAura <44103205+MutantAura@users.noreply.github.com>2022-08-21 14:07:28 +0100
committerGitHub <noreply@github.com>2022-08-21 13:07:28 +0000
commit54421760c33f77de78fee58d637552d2e00d464b (patch)
tree070b8a94d395ee7756a00cc8298663b6f6d655ea
parent88a0e720cbe567aff67b6124aa9e6cfc17599739 (diff)
Check if game directories have been updated before refreshing GUI (#3607)1.1.227
* Check if game directories have been updated before refreshing list on save. * Cleanup spacing * Add Avalonia and reset value after saving * Fix Avalonia * Fix multiple directories not being added in GTK
-rw-r--r--Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs21
-rw-r--r--Ryujinx.Ava/Ui/Windows/SettingsWindow.axaml.cs7
-rw-r--r--Ryujinx/Ui/Windows/SettingsWindow.cs32
3 files changed, 45 insertions, 15 deletions
diff --git a/Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs b/Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs
index a7cf710e..32f08ff9 100644
--- a/Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs
+++ b/Ryujinx.Ava/Ui/ViewModels/SettingsViewModel.cs
@@ -49,6 +49,7 @@ namespace Ryujinx.Ava.Ui.ViewModels
private float _previousVolumeLevel;
private float _volume;
private bool _isVulkanAvailable = true;
+ private bool _directoryChanged = false;
private List<string> _gpuIds = new List<string>();
private KeyboardHotkeys _keyboardHotkeys;
private int _graphicsBackendIndex;
@@ -112,6 +113,17 @@ namespace Ryujinx.Ava.Ui.ViewModels
}
}
+ public bool DirectoryChanged
+ {
+ get => _directoryChanged;
+ set
+ {
+ _directoryChanged = value;
+
+ OnPropertyChanged();
+ }
+ }
+
public bool EnableDiscordIntegration { get; set; }
public bool CheckUpdatesOnStart { get; set; }
public bool ShowConfirmExit { get; set; }
@@ -397,10 +409,14 @@ namespace Ryujinx.Ava.Ui.ViewModels
public async Task SaveSettings()
{
- List<string> gameDirs = new List<string>(GameDirectories);
-
ConfigurationState config = ConfigurationState.Instance;
+ if (_directoryChanged)
+ {
+ List<string> gameDirs = new List<string>(GameDirectories);
+ config.Ui.GameDirs.Value = gameDirs;
+ }
+
if (_validTzRegions.Contains(TimeZone))
{
config.System.TimeZone.Value = TimeZone;
@@ -465,7 +481,6 @@ namespace Ryujinx.Ava.Ui.ViewModels
config.System.SystemTimeOffset.Value = systemTimeOffset.Seconds;
config.Graphics.ShadersDumpPath.Value = ShaderDumpPath;
- config.Ui.GameDirs.Value = gameDirs;
config.System.FsGlobalAccessLogMode.Value = FsGlobalAccessLogMode;
config.System.MemoryManagerMode.Value = (MemoryManagerMode)MemoryMode;
diff --git a/Ryujinx.Ava/Ui/Windows/SettingsWindow.axaml.cs b/Ryujinx.Ava/Ui/Windows/SettingsWindow.axaml.cs
index 97e9bfed..5b2ea276 100644
--- a/Ryujinx.Ava/Ui/Windows/SettingsWindow.axaml.cs
+++ b/Ryujinx.Ava/Ui/Windows/SettingsWindow.axaml.cs
@@ -162,6 +162,7 @@ namespace Ryujinx.Ava.Ui.Windows
if (!string.IsNullOrWhiteSpace(path) && Directory.Exists(path) && !ViewModel.GameDirectories.Contains(path))
{
ViewModel.GameDirectories.Add(path);
+ ViewModel.DirectoryChanged = true;
}
else
{
@@ -170,6 +171,7 @@ namespace Ryujinx.Ava.Ui.Windows
if (!string.IsNullOrWhiteSpace(path))
{
ViewModel.GameDirectories.Add(path);
+ ViewModel.DirectoryChanged = true;
}
}
}
@@ -181,6 +183,7 @@ namespace Ryujinx.Ava.Ui.Windows
foreach (string path in selected)
{
ViewModel.GameDirectories.Remove(path);
+ ViewModel.DirectoryChanged = true;
}
}
@@ -232,10 +235,12 @@ namespace Ryujinx.Ava.Ui.Windows
ControllerSettings?.SaveCurrentProfile();
- if (Owner is MainWindow window)
+ if (Owner is MainWindow window && ViewModel.DirectoryChanged)
{
window.ViewModel.LoadApplications();
}
+
+ ViewModel.DirectoryChanged = false;
}
protected override void OnClosed(EventArgs e)
diff --git a/Ryujinx/Ui/Windows/SettingsWindow.cs b/Ryujinx/Ui/Windows/SettingsWindow.cs
index fc3373db..c07ad115 100644
--- a/Ryujinx/Ui/Windows/SettingsWindow.cs
+++ b/Ryujinx/Ui/Windows/SettingsWindow.cs
@@ -34,6 +34,7 @@ namespace Ryujinx.Ui.Windows
private long _systemTimeOffset;
private float _previousVolumeLevel;
+ private bool _directoryChanged = false;
#pragma warning disable CS0649, IDE0044
[GUI] CheckButton _traceLogToggle;
@@ -501,14 +502,22 @@ namespace Ryujinx.Ui.Windows
private void SaveSettings()
{
- List<string> gameDirs = new List<string>();
-
- _gameDirsBoxStore.GetIterFirst(out TreeIter treeIter);
- for (int i = 0; i < _gameDirsBoxStore.IterNChildren(); i++)
+ if (_directoryChanged)
{
- gameDirs.Add((string)_gameDirsBoxStore.GetValue(treeIter, 0));
+ List<string> gameDirs = new List<string>();
+
+ _gameDirsBoxStore.GetIterFirst(out TreeIter treeIter);
+
+ for (int i = 0; i < _gameDirsBoxStore.IterNChildren(); i++)
+ {
+ gameDirs.Add((string)_gameDirsBoxStore.GetValue(treeIter, 0));
+
+ _gameDirsBoxStore.IterNext(ref treeIter);
+ }
+
+ ConfigurationState.Instance.Ui.GameDirs.Value = gameDirs;
- _gameDirsBoxStore.IterNext(ref treeIter);
+ _directoryChanged = false;
}
if (!float.TryParse(_resScaleText.Buffer.Text, out float resScaleCustom) || resScaleCustom <= 0.0f)
@@ -571,7 +580,6 @@ namespace Ryujinx.Ui.Windows
ConfigurationState.Instance.System.SystemTimeOffset.Value = _systemTimeOffset;
ConfigurationState.Instance.Ui.CustomThemePath.Value = _custThemePath.Buffer.Text;
ConfigurationState.Instance.Graphics.ShadersDumpPath.Value = _graphicsShadersDumpPath.Buffer.Text;
- ConfigurationState.Instance.Ui.GameDirs.Value = gameDirs;
ConfigurationState.Instance.System.FsGlobalAccessLogMode.Value = (int)_fsLogSpinAdjustment.Value;
ConfigurationState.Instance.Graphics.MaxAnisotropy.Value = float.Parse(_anisotropy.ActiveId, CultureInfo.InvariantCulture);
ConfigurationState.Instance.Graphics.AspectRatio.Value = Enum.Parse<AspectRatio>(_aspectRatio.ActiveId);
@@ -655,27 +663,27 @@ namespace Ryujinx.Ui.Windows
if (fileChooser.Run() == (int)ResponseType.Accept)
{
+ _directoryChanged = false;
foreach (string directory in fileChooser.Filenames)
{
- bool directoryAdded = false;
-
if (_gameDirsBoxStore.GetIterFirst(out TreeIter treeIter))
{
do
{
if (directory.Equals((string)_gameDirsBoxStore.GetValue(treeIter, 0)))
{
- directoryAdded = true;
break;
}
} while(_gameDirsBoxStore.IterNext(ref treeIter));
}
- if (!directoryAdded)
+ if (!_directoryChanged)
{
_gameDirsBoxStore.AppendValues(directory);
}
}
+
+ _directoryChanged = true;
}
fileChooser.Dispose();
@@ -693,6 +701,8 @@ namespace Ryujinx.Ui.Windows
if (selection.GetSelected(out TreeIter treeIter))
{
_gameDirsBoxStore.Remove(ref treeIter);
+
+ _directoryChanged = true;
}
((ToggleButton)sender).SetStateFlags(StateFlags.Normal, true);