diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt
index 46df0235d8..672616c8e7 100644
--- a/.github/actions/spell-check/expect.txt
+++ b/.github/actions/spell-check/expect.txt
@@ -1483,6 +1483,7 @@ rgh
rgn
rgs
rguid
+rhk
RIDEV
RIGHTSCROLLBAR
riid
@@ -1588,6 +1589,7 @@ SHGDNF
SHGFI
SHIL
shinfo
+shk
shlwapi
shobjidl
SHORTCUTATLEAST
@@ -1798,6 +1800,7 @@ tlbimp
tlc
tmain
TNP
+toolgood
Toolhelp
toolwindow
TOPDOWNDIB
diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json
index 83289fa102..e3ebffc20c 100644
--- a/.pipelines/ESRPSigning_core.json
+++ b/.pipelines/ESRPSigning_core.json
@@ -60,6 +60,8 @@
"PowerToys.FancyZonesEditorCommon.dll",
"PowerToys.FancyZonesModuleInterface.dll",
"PowerToys.FancyZones.exe",
+ "FancyZonesCLI.exe",
+ "FancyZonesCLI.dll",
"PowerToys.GcodePreviewHandler.dll",
"PowerToys.GcodePreviewHandler.exe",
@@ -351,6 +353,11 @@
"Microsoft.SemanticKernel.Connectors.Ollama.dll",
"OllamaSharp.dll",
+ "boost_regex-vc143-mt-gd-x32-1_87.dll",
+ "boost_regex-vc143-mt-gd-x64-1_87.dll",
+ "boost_regex-vc143-mt-x32-1_87.dll",
+ "boost_regex-vc143-mt-x64-1_87.dll",
+
"UnitsNet.dll",
"UtfUnknown.dll",
"Wpf.Ui.dll"
diff --git a/.pipelines/versionAndSignCheck.ps1 b/.pipelines/versionAndSignCheck.ps1
index 1bb271300d..f90e59afd6 100644
--- a/.pipelines/versionAndSignCheck.ps1
+++ b/.pipelines/versionAndSignCheck.ps1
@@ -52,7 +52,12 @@ $nullVersionExceptions = @(
"System.Diagnostics.EventLog.Messages.dll",
"Microsoft.Windows.Widgets.dll",
"AdaptiveCards.ObjectModel.WinUI3.dll",
- "AdaptiveCards.Rendering.WinUI3.dll") -join '|';
+ "AdaptiveCards.Rendering.WinUI3.dll",
+ "boost_regex_vc143_mt_gd_x32_1_87.dll",
+ "boost_regex_vc143_mt_gd_x64_1_87.dll",
+ "boost_regex_vc143_mt_x32_1_87.dll",
+ "boost_regex_vc143_mt_x64_1_87.dll"
+ ) -join '|';
$totalFailure = 0;
Write-Host $DirPath;
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 00db38f4df..3d64052a21 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -73,10 +73,10 @@
-
-
-
-
+
+
+
+
@@ -115,6 +115,7 @@
+
@@ -122,6 +123,7 @@
+
diff --git a/NOTICE.md b/NOTICE.md
index 6ca3cbfceb..23efb64864 100644
--- a/NOTICE.md
+++ b/NOTICE.md
@@ -75,6 +75,37 @@ OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to
```
+### ToolGood.Words.Pinyin
+
+We use the ToolGood.Words.Pinyin NuGet package for converting Chinese characters to pinyin.
+
+**Source**: [https://github.com/toolgood/ToolGood.Words.Pinyin](https://github.com/toolgood/ToolGood.Words.Pinyin)
+
+```
+MIT License
+
+Copyright (c) 2020 ToolGood
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+```
+
+
## Utility: Command Palette Built-in Extensions
### Calculator
@@ -1532,6 +1563,7 @@ SOFTWARE.
- SkiaSharp.Views.WinUI
- StreamJsonRpc
- StyleCop.Analyzers
+- ToolGood.Words.Pinyin
- UnicodeInformation
- UnitsNet
- UTF.Unknown
diff --git a/PowerToys.slnx b/PowerToys.slnx
index c946514fb5..1884b2d58b 100644
--- a/PowerToys.slnx
+++ b/PowerToys.slnx
@@ -370,6 +370,10 @@
+
+
+
+
diff --git a/doc/devdocs/core/settings/settings-implementation.md b/doc/devdocs/core/settings/settings-implementation.md
index defe59a3fa..65d0d27c73 100644
--- a/doc/devdocs/core/settings/settings-implementation.md
+++ b/doc/devdocs/core/settings/settings-implementation.md
@@ -38,7 +38,7 @@ For C# modules, the settings are accessed through the `SettingsUtils` class in t
using Microsoft.PowerToys.Settings.UI.Library;
// Read settings
-var settings = SettingsUtils.GetSettings("ModuleName");
+var settings = SettingsUtils.Default.GetSettings("ModuleName");
bool enabled = settings.Enabled;
```
@@ -49,7 +49,7 @@ using Microsoft.PowerToys.Settings.UI.Library;
// Write settings
settings.Enabled = true;
-SettingsUtils.SaveSettings(settings.ToJsonString(), "ModuleName");
+SettingsUtils.Default.SaveSettings(settings.ToJsonString(), "ModuleName");
```
## Settings Handling in Modules
diff --git a/src/common/UITestAutomation/SettingsConfigHelper.cs b/src/common/UITestAutomation/SettingsConfigHelper.cs
index 833ec4f19d..0a01891dc4 100644
--- a/src/common/UITestAutomation/SettingsConfigHelper.cs
+++ b/src/common/UITestAutomation/SettingsConfigHelper.cs
@@ -21,7 +21,7 @@ namespace Microsoft.PowerToys.UITest
public class SettingsConfigHelper
{
private static readonly JsonSerializerOptions IndentedJsonOptions = new() { WriteIndented = true };
- private static readonly SettingsUtils SettingsUtils = new SettingsUtils();
+ private static readonly SettingsUtils SettingsUtils = SettingsUtils.Default;
///
/// Configures global PowerToys settings to enable only specified modules and disable all others.
diff --git a/src/common/utils/registry.h b/src/common/utils/registry.h
index 059589352d..c9770bbea3 100644
--- a/src/common/utils/registry.h
+++ b/src/common/utils/registry.h
@@ -16,9 +16,54 @@
namespace registry
{
+ namespace detail
+ {
+ struct on_exit
+ {
+ std::function f;
+
+ on_exit(std::function f) :
+ f{ std::move(f) } {}
+ ~on_exit() { f(); }
+ };
+
+ template
+ struct overloaded : Ts...
+ {
+ using Ts::operator()...;
+ };
+
+ template
+ overloaded(Ts...) -> overloaded;
+
+ inline const wchar_t* getScopeName(HKEY scope)
+ {
+ if (scope == HKEY_LOCAL_MACHINE)
+ {
+ return L"HKLM";
+ }
+ else if (scope == HKEY_CURRENT_USER)
+ {
+ return L"HKCU";
+ }
+ else if (scope == HKEY_CLASSES_ROOT)
+ {
+ return L"HKCR";
+ }
+ else
+ {
+ return L"HK??";
+ }
+ }
+ }
+
namespace install_scope
{
const wchar_t INSTALL_SCOPE_REG_KEY[] = L"Software\\Classes\\powertoys\\";
+ const wchar_t UNINSTALL_REG_KEY[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
+
+ // Bundle UpgradeCode from PowerToys.wxs (with braces as stored in registry)
+ const wchar_t BUNDLE_UPGRADE_CODE[] = L"{6341382D-C0A9-4238-9188-BE9607E3FAB2}";
enum class InstallScope
{
@@ -26,8 +71,67 @@ namespace registry
PerUser,
};
+ // Helper function to find PowerToys bundle in Windows Uninstall registry by BundleUpgradeCode
+ inline bool find_powertoys_bundle_in_uninstall_registry(HKEY rootKey)
+ {
+ HKEY uninstallKey{};
+ if (RegOpenKeyExW(rootKey, UNINSTALL_REG_KEY, 0, KEY_READ, &uninstallKey) != ERROR_SUCCESS)
+ {
+ return false;
+ }
+ detail::on_exit closeUninstallKey{ [uninstallKey] { RegCloseKey(uninstallKey); } };
+
+ DWORD index = 0;
+ wchar_t subKeyName[256];
+
+ // Enumerate all subkeys under Uninstall
+ while (RegEnumKeyW(uninstallKey, index++, subKeyName, 256) == ERROR_SUCCESS)
+ {
+ HKEY productKey{};
+ if (RegOpenKeyExW(uninstallKey, subKeyName, 0, KEY_READ, &productKey) != ERROR_SUCCESS)
+ {
+ continue;
+ }
+ detail::on_exit closeProductKey{ [productKey] { RegCloseKey(productKey); } };
+
+ // Check BundleUpgradeCode value (specific to WiX Bundle installations)
+ wchar_t bundleUpgradeCode[256]{};
+ DWORD bundleUpgradeCodeSize = sizeof(bundleUpgradeCode);
+
+ if (RegQueryValueExW(productKey, L"BundleUpgradeCode", nullptr, nullptr,
+ reinterpret_cast(bundleUpgradeCode), &bundleUpgradeCodeSize) == ERROR_SUCCESS)
+ {
+ if (_wcsicmp(bundleUpgradeCode, BUNDLE_UPGRADE_CODE) == 0)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
inline const InstallScope get_current_install_scope()
{
+ // 1. Check HKCU Uninstall registry first (user-level bundle)
+ // Note: MSI components are always in HKLM regardless of install scope,
+ // but the Bundle entry will be in HKCU for per-user installations
+ if (find_powertoys_bundle_in_uninstall_registry(HKEY_CURRENT_USER))
+ {
+ Logger::info(L"Found user-level PowerToys bundle via BundleUpgradeCode in HKCU");
+ return InstallScope::PerUser;
+ }
+
+ // 2. Check HKLM Uninstall registry (machine-level bundle)
+ if (find_powertoys_bundle_in_uninstall_registry(HKEY_LOCAL_MACHINE))
+ {
+ Logger::info(L"Found machine-level PowerToys bundle via BundleUpgradeCode in HKLM");
+ return InstallScope::PerMachine;
+ }
+
+ // 3. Fallback to legacy custom registry key detection
+ Logger::info(L"PowerToys bundle not found in Uninstall registry, falling back to legacy detection");
+
// Open HKLM key
HKEY perMachineKey{};
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
@@ -45,6 +149,7 @@ namespace registry
&perUserKey) != ERROR_SUCCESS)
{
// both keys are missing
+ Logger::warn(L"No PowerToys installation detected, defaulting to PerMachine");
return InstallScope::PerMachine;
}
else
@@ -96,47 +201,6 @@ namespace registry
template
inline constexpr bool always_false_v = false;
- namespace detail
- {
- struct on_exit
- {
- std::function f;
-
- on_exit(std::function f) :
- f{ std::move(f) } {}
- ~on_exit() { f(); }
- };
-
- template
- struct overloaded : Ts...
- {
- using Ts::operator()...;
- };
-
- template
- overloaded(Ts...) -> overloaded;
-
- inline const wchar_t* getScopeName(HKEY scope)
- {
- if (scope == HKEY_LOCAL_MACHINE)
- {
- return L"HKLM";
- }
- else if (scope == HKEY_CURRENT_USER)
- {
- return L"HKCU";
- }
- else if (scope == HKEY_CLASSES_ROOT)
- {
- return L"HKCR";
- }
- else
- {
- return L"HK??";
- }
- }
- }
-
struct ValueChange
{
using value_t = std::variant;
diff --git a/src/dsc/v3/PowerToys.DSC.UnitTests/SettingsResourceTests/SettingsResourceModuleTest`1.cs b/src/dsc/v3/PowerToys.DSC.UnitTests/SettingsResourceTests/SettingsResourceModuleTest`1.cs
index ad7eb1d200..8d43f48a77 100644
--- a/src/dsc/v3/PowerToys.DSC.UnitTests/SettingsResourceTests/SettingsResourceModuleTest`1.cs
+++ b/src/dsc/v3/PowerToys.DSC.UnitTests/SettingsResourceTests/SettingsResourceModuleTest`1.cs
@@ -18,7 +18,7 @@ namespace PowerToys.DSC.UnitTests.SettingsResourceTests;
public abstract class SettingsResourceModuleTest : BaseDscTest
where TSettingsConfig : ISettingsConfig, new()
{
- private readonly SettingsUtils _settingsUtils = new();
+ private readonly SettingsUtils _settingsUtils = SettingsUtils.Default;
private TSettingsConfig _originalSettings;
protected TSettingsConfig DefaultSettings => new();
diff --git a/src/dsc/v3/PowerToys.DSC/Models/FunctionData/SettingsFunctionData`1.cs b/src/dsc/v3/PowerToys.DSC/Models/FunctionData/SettingsFunctionData`1.cs
index 7fcce03d33..9d87b1e773 100644
--- a/src/dsc/v3/PowerToys.DSC/Models/FunctionData/SettingsFunctionData`1.cs
+++ b/src/dsc/v3/PowerToys.DSC/Models/FunctionData/SettingsFunctionData`1.cs
@@ -18,7 +18,7 @@ namespace PowerToys.DSC.Models.FunctionData;
public sealed class SettingsFunctionData : BaseFunctionData, ISettingsFunctionData
where TSettingsConfig : ISettingsConfig, new()
{
- private static readonly SettingsUtils _settingsUtils = new();
+ private static readonly SettingsUtils _settingsUtils = SettingsUtils.Default;
private static readonly TSettingsConfig _settingsConfig = new();
private readonly SettingsResourceObject _input;
diff --git a/src/modules/Hosts/Hosts/Settings/UserSettings.cs b/src/modules/Hosts/Hosts/Settings/UserSettings.cs
index 038823f0e2..bd69a336eb 100644
--- a/src/modules/Hosts/Hosts/Settings/UserSettings.cs
+++ b/src/modules/Hosts/Hosts/Settings/UserSettings.cs
@@ -62,7 +62,7 @@ namespace Hosts.Settings
public UserSettings()
{
- _settingsUtils = new SettingsUtils();
+ _settingsUtils = SettingsUtils.Default;
var defaultSettings = new HostsProperties();
ShowStartupWarning = defaultSettings.ShowStartupWarning;
LoopbackDuplicates = defaultSettings.LoopbackDuplicates;
diff --git a/src/modules/MeasureTool/MeasureToolUI/Settings.cs b/src/modules/MeasureTool/MeasureToolUI/Settings.cs
index 4e8cd99b18..ac48339ad6 100644
--- a/src/modules/MeasureTool/MeasureToolUI/Settings.cs
+++ b/src/modules/MeasureTool/MeasureToolUI/Settings.cs
@@ -11,7 +11,7 @@ namespace MeasureToolUI
{
public sealed class Settings
{
- private static readonly SettingsUtils ModuleSettings = new();
+ private static readonly SettingsUtils ModuleSettings = SettingsUtils.Default;
public MeasureToolMeasureStyle DefaultMeasureStyle
{
diff --git a/src/modules/MouseUtils/MouseJumpUI/Helpers/SettingsHelper.cs b/src/modules/MouseUtils/MouseJumpUI/Helpers/SettingsHelper.cs
index efe721e873..6e19043547 100644
--- a/src/modules/MouseUtils/MouseJumpUI/Helpers/SettingsHelper.cs
+++ b/src/modules/MouseUtils/MouseJumpUI/Helpers/SettingsHelper.cs
@@ -53,7 +53,7 @@ internal sealed class SettingsHelper
lock (this.LockObject)
{
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
// set this to 1 to disable retries
var remainingRetries = 5;
diff --git a/src/modules/MouseWithoutBorders/App/Class/Setting.cs b/src/modules/MouseWithoutBorders/App/Class/Setting.cs
index c526c70976..7d440a6125 100644
--- a/src/modules/MouseWithoutBorders/App/Class/Setting.cs
+++ b/src/modules/MouseWithoutBorders/App/Class/Setting.cs
@@ -192,7 +192,7 @@ namespace MouseWithoutBorders.Class
internal Settings()
{
- _settingsUtils = new SettingsUtils();
+ _settingsUtils = SettingsUtils.Default;
_watcher = SettingsHelper.GetFileWatcher("MouseWithoutBorders", "settings.json", () =>
{
diff --git a/src/modules/PowerOCR/PowerOCR/Settings/UserSettings.cs b/src/modules/PowerOCR/PowerOCR/Settings/UserSettings.cs
index 0c57171f3a..053f3b5f30 100644
--- a/src/modules/PowerOCR/PowerOCR/Settings/UserSettings.cs
+++ b/src/modules/PowerOCR/PowerOCR/Settings/UserSettings.cs
@@ -29,7 +29,7 @@ namespace PowerOCR.Settings
[ImportingConstructor]
public UserSettings(Helpers.IThrottledActionInvoker throttledActionInvoker)
{
- _settingsUtils = new SettingsUtils();
+ _settingsUtils = SettingsUtils.Default;
ActivationShortcut = new SettingItem(DefaultActivationShortcut);
PreferredLanguage = new SettingItem(string.Empty);
diff --git a/src/modules/Workspaces/WorkspacesEditor/Utils/Settings.cs b/src/modules/Workspaces/WorkspacesEditor/Utils/Settings.cs
index 29dd65d56f..0955e4019e 100644
--- a/src/modules/Workspaces/WorkspacesEditor/Utils/Settings.cs
+++ b/src/modules/Workspaces/WorkspacesEditor/Utils/Settings.cs
@@ -9,7 +9,7 @@ namespace WorkspacesEditor.Utils
public class Settings
{
private const string WorkspacesModuleName = "Workspaces";
- private static readonly SettingsUtils _settingsUtils = new();
+ private static readonly SettingsUtils _settingsUtils = SettingsUtils.Default;
public static WorkspacesSettings ReadSettings()
{
diff --git a/src/modules/Workspaces/WorkspacesEditor/ViewModels/MainViewModel.cs b/src/modules/Workspaces/WorkspacesEditor/ViewModels/MainViewModel.cs
index d05498d62e..30b28f4cd8 100644
--- a/src/modules/Workspaces/WorkspacesEditor/ViewModels/MainViewModel.cs
+++ b/src/modules/Workspaces/WorkspacesEditor/ViewModels/MainViewModel.cs
@@ -133,7 +133,7 @@ namespace WorkspacesEditor.ViewModels
_orderByIndex = value;
OnPropertyChanged(new PropertyChangedEventArgs(nameof(WorkspacesView)));
settings.Properties.SortBy = (WorkspacesProperties.SortByProperty)value;
- settings.Save(new SettingsUtils());
+ settings.Save(SettingsUtils.Default);
}
}
diff --git a/src/modules/awake/Awake/Core/Manager.cs b/src/modules/awake/Awake/Core/Manager.cs
index c6aa1c2efb..cc3e461b20 100644
--- a/src/modules/awake/Awake/Core/Manager.cs
+++ b/src/modules/awake/Awake/Core/Manager.cs
@@ -60,7 +60,7 @@ namespace Awake.Core
{
_tokenSource = new CancellationTokenSource();
_stateQueue = [];
- ModuleSettings = new SettingsUtils();
+ ModuleSettings = SettingsUtils.Default;
}
internal static void StartMonitor()
diff --git a/src/modules/awake/Awake/Program.cs b/src/modules/awake/Awake/Program.cs
index 4d6d20bc96..b5c3102ba0 100644
--- a/src/modules/awake/Awake/Program.cs
+++ b/src/modules/awake/Awake/Program.cs
@@ -51,7 +51,7 @@ namespace Awake
private static async Task Main(string[] args)
{
- _settingsUtils = new SettingsUtils();
+ _settingsUtils = SettingsUtils.Default;
LockMutex = new Mutex(true, Core.Constants.AppName, out bool instantiated);
diff --git a/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateLeftCommand.cs b/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateLeftCommand.cs
new file mode 100644
index 0000000000..d352b552cf
--- /dev/null
+++ b/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateLeftCommand.cs
@@ -0,0 +1,10 @@
+// Copyright (c) Microsoft Corporation
+// The Microsoft Corporation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace Microsoft.CmdPal.Core.ViewModels.Messages;
+
+///
+/// Used to navigate left in a grid view when pressing the Left arrow key in the SearchBox.
+///
+public record NavigateLeftCommand;
diff --git a/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateRightCommand.cs b/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateRightCommand.cs
new file mode 100644
index 0000000000..3cfb05913d
--- /dev/null
+++ b/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/Messages/NavigateRightCommand.cs
@@ -0,0 +1,10 @@
+// Copyright (c) Microsoft Corporation
+// The Microsoft Corporation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace Microsoft.CmdPal.Core.ViewModels.Messages;
+
+///
+/// Used to navigate right in a grid view when pressing the Right arrow key in the SearchBox.
+///
+public record NavigateRightCommand;
diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPage.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPage.cs
index 003a0bfb9e..4118ac64db 100644
--- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPage.cs
+++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPage.cs
@@ -12,6 +12,7 @@ using Microsoft.CmdPal.Core.ViewModels.Messages;
using Microsoft.CmdPal.Ext.Apps;
using Microsoft.CmdPal.Ext.Apps.Programs;
using Microsoft.CmdPal.Ext.Apps.State;
+using Microsoft.CmdPal.UI.ViewModels.Commands;
using Microsoft.CmdPal.UI.ViewModels.Messages;
using Microsoft.CmdPal.UI.ViewModels.Properties;
using Microsoft.CommandPalette.Extensions;
@@ -44,6 +45,9 @@ public partial class MainListPage : DynamicListPage,
private List>? _filteredItems;
private List>? _filteredApps;
private List>? _fallbackItems;
+
+ // Keep as IEnumerable for deferred execution. Fallback item titles are updated
+ // asynchronously, so scoring must happen lazily when GetItems is called.
private IEnumerable>? _scoredFallbackItems;
private bool _includeApps;
private bool _filteredItemsIncludesApps;
@@ -155,42 +159,18 @@ public partial class MainListPage : DynamicListPage,
public override IListItem[] GetItems()
{
- if (string.IsNullOrEmpty(SearchText))
+ lock (_tlcManager.TopLevelCommands)
{
- lock (_tlcManager.TopLevelCommands)
- {
- return _tlcManager
- .TopLevelCommands
- .Where(tlc => !tlc.IsFallback && !string.IsNullOrEmpty(tlc.Title))
- .ToArray();
- }
- }
- else
- {
- lock (_tlcManager.TopLevelCommands)
- {
- var limitedApps = new List>();
-
- // Fuzzy matching can produce a lot of results, so we want to limit the
- // number of apps we show at once if it's a large set.
- if (_filteredApps?.Count > 0)
- {
- limitedApps = _filteredApps.OrderByDescending(s => s.Score).Take(_appResultLimit).ToList();
- }
-
- var items = Enumerable.Empty>()
- .Concat(_filteredItems is not null ? _filteredItems : [])
- .Concat(_scoredFallbackItems is not null ? _scoredFallbackItems : [])
- .Concat(limitedApps)
- .OrderByDescending(o => o.Score)
-
- // Add fallback items post-sort so they are always at the end of the list
- // and eventually ordered based on user preference
- .Concat(_fallbackItems is not null ? _fallbackItems.Where(w => !string.IsNullOrEmpty(w.Item.Title)) : [])
- .Select(s => s.Item)
- .ToArray();
- return items;
- }
+ // Either return the top-level commands (no search text), or the merged and
+ // filtered results.
+ return string.IsNullOrEmpty(SearchText)
+ ? _tlcManager.TopLevelCommands.Where(tlc => !tlc.IsFallback && !string.IsNullOrEmpty(tlc.Title)).ToArray()
+ : MainListPageResultFactory.Create(
+ _filteredItems,
+ _scoredFallbackItems?.ToList(),
+ _filteredApps,
+ _fallbackItems,
+ _appResultLimit);
}
}
diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPageResultFactory.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPageResultFactory.cs
new file mode 100644
index 0000000000..f1bddf5197
--- /dev/null
+++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Commands/MainListPageResultFactory.cs
@@ -0,0 +1,156 @@
+// Copyright (c) Microsoft Corporation
+// The Microsoft Corporation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#pragma warning disable IDE0007 // Use implicit type
+
+using Microsoft.CommandPalette.Extensions;
+using Microsoft.CommandPalette.Extensions.Toolkit;
+
+namespace Microsoft.CmdPal.UI.ViewModels.Commands;
+
+internal static class MainListPageResultFactory
+{
+ ///
+ /// Creates a merged and ordered array of results from multiple scored input lists,
+ /// applying an application result limit and filtering fallback items as needed.
+ ///
+ public static IListItem[] Create(
+ IList>? filteredItems,
+ IList>? scoredFallbackItems,
+ IList>? filteredApps,
+ IList>? fallbackItems,
+ int appResultLimit)
+ {
+ if (appResultLimit < 0)
+ {
+ throw new ArgumentOutOfRangeException(
+ nameof(appResultLimit), "App result limit must be non-negative.");
+ }
+
+ int len1 = filteredItems?.Count ?? 0;
+ int len2 = scoredFallbackItems?.Count ?? 0;
+
+ // Apps are pre-sorted, so we just need to take the top N, limited by appResultLimit.
+ int len3 = Math.Min(filteredApps?.Count ?? 0, appResultLimit);
+
+ // Allocate the exact size of the result array.
+ int totalCount = len1 + len2 + len3 + GetNonEmptyFallbackItemsCount(fallbackItems);
+ var result = new IListItem[totalCount];
+
+ // Three-way stable merge of already-sorted lists.
+ int idx1 = 0, idx2 = 0, idx3 = 0;
+ int writePos = 0;
+
+ // Merge while all three lists have items. To maintain a stable sort, the
+ // priority is: list1 > list2 > list3 when scores are equal.
+ while (idx1 < len1 && idx2 < len2 && idx3 < len3)
+ {
+ // Using null-forgiving operator as we have already checked against lengths.
+ int score1 = filteredItems![idx1].Score;
+ int score2 = scoredFallbackItems![idx2].Score;
+ int score3 = filteredApps![idx3].Score;
+
+ if (score1 >= score2 && score1 >= score3)
+ {
+ result[writePos++] = filteredItems[idx1++].Item;
+ }
+ else if (score2 >= score3)
+ {
+ result[writePos++] = scoredFallbackItems[idx2++].Item;
+ }
+ else
+ {
+ result[writePos++] = filteredApps[idx3++].Item;
+ }
+ }
+
+ // Two-way merges for remaining pairs.
+ while (idx1 < len1 && idx2 < len2)
+ {
+ if (filteredItems![idx1].Score >= scoredFallbackItems![idx2].Score)
+ {
+ result[writePos++] = filteredItems[idx1++].Item;
+ }
+ else
+ {
+ result[writePos++] = scoredFallbackItems[idx2++].Item;
+ }
+ }
+
+ while (idx1 < len1 && idx3 < len3)
+ {
+ if (filteredItems![idx1].Score >= filteredApps![idx3].Score)
+ {
+ result[writePos++] = filteredItems[idx1++].Item;
+ }
+ else
+ {
+ result[writePos++] = filteredApps[idx3++].Item;
+ }
+ }
+
+ while (idx2 < len2 && idx3 < len3)
+ {
+ if (scoredFallbackItems![idx2].Score >= filteredApps![idx3].Score)
+ {
+ result[writePos++] = scoredFallbackItems[idx2++].Item;
+ }
+ else
+ {
+ result[writePos++] = filteredApps[idx3++].Item;
+ }
+ }
+
+ // Drain remaining items from a non-empty list.
+ while (idx1 < len1)
+ {
+ result[writePos++] = filteredItems![idx1++].Item;
+ }
+
+ while (idx2 < len2)
+ {
+ result[writePos++] = scoredFallbackItems![idx2++].Item;
+ }
+
+ while (idx3 < len3)
+ {
+ result[writePos++] = filteredApps![idx3++].Item;
+ }
+
+ // Append filtered fallback items. Fallback items are added post-sort so they are
+ // always at the end of the list and eventually ordered based on user preference.
+ if (fallbackItems is not null)
+ {
+ for (int i = 0; i < fallbackItems.Count; i++)
+ {
+ var item = fallbackItems[i].Item;
+ if (!string.IsNullOrEmpty(item.Title))
+ {
+ result[writePos++] = item;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private static int GetNonEmptyFallbackItemsCount(IList>? fallbackItems)
+ {
+ int fallbackItemsCount = 0;
+
+ if (fallbackItems is not null)
+ {
+ for (int i = 0; i < fallbackItems.Count; i++)
+ {
+ if (!string.IsNullOrEmpty(fallbackItems[i].Item.Title))
+ {
+ fallbackItemsCount++;
+ }
+ }
+ }
+
+ return fallbackItemsCount;
+ }
+}
+#pragma warning restore IDE0007 // Use implicit type
diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/SearchBar.xaml.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/SearchBar.xaml.cs
index 169b34a8b0..0d6fd58afa 100644
--- a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/SearchBar.xaml.cs
+++ b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/SearchBar.xaml.cs
@@ -208,21 +208,32 @@ public sealed partial class SearchBar : UserControl,
e.Handled = true;
}
+ else if (e.Key == VirtualKey.Left)
+ {
+ // Check if we're in a grid view, and if so, send grid navigation command
+ var isGridView = CurrentPageViewModel is ListViewModel { IsGridView: true };
+
+ // Special handling is required if we're in grid view.
+ if (isGridView)
+ {
+ WeakReferenceMessenger.Default.Send();
+ e.Handled = true;
+ }
+ }
else if (e.Key == VirtualKey.Right)
{
// Check if the "replace search text with suggestion" feature from 0.4-0.5 is enabled.
// If it isn't, then only use the suggestion when the caret is at the end of the input.
if (!IsTextToSuggestEnabled)
{
- if (_textToSuggest != null &&
+ if (!string.IsNullOrEmpty(_textToSuggest) &&
FilterBox.SelectionStart == FilterBox.Text.Length)
{
FilterBox.Text = _textToSuggest;
FilterBox.Select(_textToSuggest.Length, 0);
e.Handled = true;
+ return;
}
-
- return;
}
// Here, we're using the "replace search text with suggestion" feature.
@@ -232,6 +243,20 @@ public sealed partial class SearchBar : UserControl,
_lastText = null;
DoFilterBoxUpdate();
}
+
+ // Wouldn't want to perform text completion *and* move the selected item, so only perform this if text suggestion wasn't performed.
+ if (!e.Handled)
+ {
+ // Check if we're in a grid view, and if so, send grid navigation command
+ var isGridView = CurrentPageViewModel is ListViewModel { IsGridView: true };
+
+ // Special handling is required if we're in grid view.
+ if (isGridView)
+ {
+ WeakReferenceMessenger.Default.Send();
+ e.Handled = true;
+ }
+ }
}
else if (e.Key == VirtualKey.Down)
{
@@ -274,6 +299,8 @@ public sealed partial class SearchBar : UserControl,
e.Key == VirtualKey.Up ||
e.Key == VirtualKey.Down ||
+ e.Key == VirtualKey.Left ||
+ e.Key == VirtualKey.Right ||
e.Key == VirtualKey.RightMenu ||
e.Key == VirtualKey.LeftMenu ||
diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI/ExtViews/ListPage.xaml.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI/ExtViews/ListPage.xaml.cs
index a28ae3e133..8957f63ea4 100644
--- a/src/modules/cmdpal/Microsoft.CmdPal.UI/ExtViews/ListPage.xaml.cs
+++ b/src/modules/cmdpal/Microsoft.CmdPal.UI/ExtViews/ListPage.xaml.cs
@@ -26,6 +26,8 @@ namespace Microsoft.CmdPal.UI;
public sealed partial class ListPage : Page,
IRecipient,
IRecipient,
+ IRecipient,
+ IRecipient,
IRecipient,
IRecipient,
IRecipient,
@@ -85,6 +87,8 @@ public sealed partial class ListPage : Page,
// RegisterAll isn't AOT compatible
WeakReferenceMessenger.Default.Register(this);
WeakReferenceMessenger.Default.Register(this);
+ WeakReferenceMessenger.Default.Register(this);
+ WeakReferenceMessenger.Default.Register(this);
WeakReferenceMessenger.Default.Register(this);
WeakReferenceMessenger.Default.Register(this);
WeakReferenceMessenger.Default.Register(this);
@@ -99,6 +103,8 @@ public sealed partial class ListPage : Page,
WeakReferenceMessenger.Default.Unregister(this);
WeakReferenceMessenger.Default.Unregister(this);
+ WeakReferenceMessenger.Default.Unregister(this);
+ WeakReferenceMessenger.Default.Unregister(this);
WeakReferenceMessenger.Default.Unregister(this);
WeakReferenceMessenger.Default.Unregister(this);
WeakReferenceMessenger.Default.Unregister(this);
@@ -257,25 +263,71 @@ public sealed partial class ListPage : Page,
// And then have these commands manipulate that state being bound to the UI instead
// We may want to see how other non-list UIs need to behave to make this decision
// At least it's decoupled from the SearchBox now :)
- if (ItemView.SelectedIndex < ItemView.Items.Count - 1)
+ if (ViewModel?.IsGridView == true)
{
- ItemView.SelectedIndex++;
+ // For grid views, use spatial navigation (down)
+ HandleGridArrowNavigation(VirtualKey.Down);
}
else
{
- ItemView.SelectedIndex = 0;
+ // For list views, use simple linear navigation
+ if (ItemView.SelectedIndex < ItemView.Items.Count - 1)
+ {
+ ItemView.SelectedIndex++;
+ }
+ else
+ {
+ ItemView.SelectedIndex = 0;
+ }
}
}
public void Receive(NavigatePreviousCommand message)
{
- if (ItemView.SelectedIndex > 0)
+ if (ViewModel?.IsGridView == true)
{
- ItemView.SelectedIndex--;
+ // For grid views, use spatial navigation (up)
+ HandleGridArrowNavigation(VirtualKey.Up);
}
else
{
- ItemView.SelectedIndex = ItemView.Items.Count - 1;
+ // For list views, use simple linear navigation
+ if (ItemView.SelectedIndex > 0)
+ {
+ ItemView.SelectedIndex--;
+ }
+ else
+ {
+ ItemView.SelectedIndex = ItemView.Items.Count - 1;
+ }
+ }
+ }
+
+ public void Receive(NavigateLeftCommand message)
+ {
+ // For grid views, use spatial navigation. For list views, just move up.
+ if (ViewModel?.IsGridView == true)
+ {
+ HandleGridArrowNavigation(VirtualKey.Left);
+ }
+ else
+ {
+ // In list view, left arrow doesn't navigate
+ // This maintains consistency with the SearchBar behavior
+ }
+ }
+
+ public void Receive(NavigateRightCommand message)
+ {
+ // For grid views, use spatial navigation. For list views, just move down.
+ if (ViewModel?.IsGridView == true)
+ {
+ HandleGridArrowNavigation(VirtualKey.Right);
+ }
+ else
+ {
+ // In list view, right arrow doesn't navigate
+ // This maintains consistency with the SearchBar behavior
}
}
@@ -514,6 +566,130 @@ public sealed partial class ListPage : Page,
return null;
}
+ // Find a logical neighbor in the requested direction using containers' positions.
+ private void HandleGridArrowNavigation(VirtualKey key)
+ {
+ if (ItemView.Items.Count == 0)
+ {
+ // No items, goodbye.
+ return;
+ }
+
+ var currentIndex = ItemView.SelectedIndex;
+ if (currentIndex < 0)
+ {
+ // -1 is a valid value (no item currently selected)
+ currentIndex = 0;
+ ItemView.SelectedIndex = 0;
+ }
+
+ try
+ {
+ // Try to compute using container positions; if not available, fall back to simple +/-1.
+ var currentContainer = ItemView.ContainerFromIndex(currentIndex) as FrameworkElement;
+ if (currentContainer is not null && currentContainer.ActualWidth != 0 && currentContainer.ActualHeight != 0)
+ {
+ // Use center of current container as reference
+ var curPoint = currentContainer.TransformToVisual(ItemView).TransformPoint(new Point(0, 0));
+ var curCenterX = curPoint.X + (currentContainer.ActualWidth / 2.0);
+ var curCenterY = curPoint.Y + (currentContainer.ActualHeight / 2.0);
+
+ var bestScore = double.MaxValue;
+ var bestIndex = currentIndex;
+
+ for (var i = 0; i < ItemView.Items.Count; i++)
+ {
+ if (i == currentIndex)
+ {
+ continue;
+ }
+
+ if (ItemView.ContainerFromIndex(i) is FrameworkElement c && c.ActualWidth > 0 && c.ActualHeight > 0)
+ {
+ var p = c.TransformToVisual(ItemView).TransformPoint(new Point(0, 0));
+ var centerX = p.X + (c.ActualWidth / 2.0);
+ var centerY = p.Y + (c.ActualHeight / 2.0);
+
+ var dx = centerX - curCenterX;
+ var dy = centerY - curCenterY;
+
+ var candidate = false;
+ var score = double.MaxValue;
+
+ switch (key)
+ {
+ case VirtualKey.Left:
+ if (dx < 0)
+ {
+ candidate = true;
+ score = Math.Abs(dy) + (Math.Abs(dx) * 0.7);
+ }
+
+ break;
+ case VirtualKey.Right:
+ if (dx > 0)
+ {
+ candidate = true;
+ score = Math.Abs(dy) + (Math.Abs(dx) * 0.7);
+ }
+
+ break;
+ case VirtualKey.Up:
+ if (dy < 0)
+ {
+ candidate = true;
+ score = Math.Abs(dx) + (Math.Abs(dy) * 0.7);
+ }
+
+ break;
+ case VirtualKey.Down:
+ if (dy > 0)
+ {
+ candidate = true;
+ score = Math.Abs(dx) + (Math.Abs(dy) * 0.7);
+ }
+
+ break;
+ }
+
+ if (candidate && score < bestScore)
+ {
+ bestScore = score;
+ bestIndex = i;
+ }
+ }
+ }
+
+ if (bestIndex != currentIndex)
+ {
+ ItemView.SelectedIndex = bestIndex;
+ ItemView.ScrollIntoView(ItemView.SelectedItem);
+ }
+
+ return;
+ }
+ }
+ catch
+ {
+ // ignore transform errors and fall back
+ }
+
+ // fallback linear behavior
+ var fallback = key switch
+ {
+ VirtualKey.Left => Math.Max(0, currentIndex - 1),
+ VirtualKey.Right => Math.Min(ItemView.Items.Count - 1, currentIndex + 1),
+ VirtualKey.Up => Math.Max(0, currentIndex - 1),
+ VirtualKey.Down => Math.Min(ItemView.Items.Count - 1, currentIndex + 1),
+ _ => currentIndex,
+ };
+ if (fallback != currentIndex)
+ {
+ ItemView.SelectedIndex = fallback;
+ ItemView.ScrollIntoView(ItemView.SelectedItem);
+ }
+ }
+
private void Items_OnContextRequested(UIElement sender, ContextRequestedEventArgs e)
{
var (item, element) = e.OriginalSource switch
@@ -564,9 +740,27 @@ public sealed partial class ListPage : Page,
private void Items_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
+ // Track keyboard as the last input source for activation logic.
if (e.Key is VirtualKey.Enter or VirtualKey.Space)
{
_lastInputSource = InputSource.Keyboard;
+ return;
+ }
+
+ // Handle arrow navigation when we're showing a grid.
+ if (ViewModel?.IsGridView == true)
+ {
+ switch (e.Key)
+ {
+ case VirtualKey.Left:
+ case VirtualKey.Right:
+ case VirtualKey.Up:
+ case VirtualKey.Down:
+ _lastInputSource = InputSource.Keyboard;
+ HandleGridArrowNavigation(e.Key);
+ e.Handled = true;
+ break;
+ }
}
}
diff --git a/src/modules/cmdpal/Tests/Microsoft.CmdPal.UI.ViewModels.UnitTests/MainListPageResultFactoryTests.cs b/src/modules/cmdpal/Tests/Microsoft.CmdPal.UI.ViewModels.UnitTests/MainListPageResultFactoryTests.cs
new file mode 100644
index 0000000000..624fa2da73
--- /dev/null
+++ b/src/modules/cmdpal/Tests/Microsoft.CmdPal.UI.ViewModels.UnitTests/MainListPageResultFactoryTests.cs
@@ -0,0 +1,161 @@
+// Copyright (c) Microsoft Corporation
+// The Microsoft Corporation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.CmdPal.UI.ViewModels.Commands;
+using Microsoft.CommandPalette.Extensions;
+using Microsoft.CommandPalette.Extensions.Toolkit;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Windows.Foundation;
+
+namespace Microsoft.CmdPal.UI.ViewModels.UnitTests;
+
+[TestClass]
+public partial class MainListPageResultFactoryTests
+{
+ private sealed partial class MockListItem : IListItem
+ {
+ public string Title { get; set; } = string.Empty;
+
+ public string Subtitle { get; set; } = string.Empty;
+
+ public ICommand Command => new NoOpCommand();
+
+ public IDetails? Details => null;
+
+ public IIconInfo? Icon => null;
+
+ public string Section => throw new NotImplementedException();
+
+ public ITag[] Tags => throw new NotImplementedException();
+
+ public string TextToSuggest => throw new NotImplementedException();
+
+ public IContextItem[] MoreCommands => throw new NotImplementedException();
+
+#pragma warning disable CS0067 // The event is never used
+ public event TypedEventHandler
public class Settings
{
- private static SettingsUtils moduleSettings = new SettingsUtils();
+ private static SettingsUtils moduleSettings = SettingsUtils.Default;
///
/// Gets a value indicating whether word wrapping should be applied. Set by PT settings.
diff --git a/src/modules/previewpane/StlThumbnailProvider/StlThumbnailProvider.cs b/src/modules/previewpane/StlThumbnailProvider/StlThumbnailProvider.cs
index 2301c7beb0..d6dbd74251 100644
--- a/src/modules/previewpane/StlThumbnailProvider/StlThumbnailProvider.cs
+++ b/src/modules/previewpane/StlThumbnailProvider/StlThumbnailProvider.cs
@@ -155,7 +155,7 @@ namespace Microsoft.PowerToys.ThumbnailHandler.Stl
{
try
{
- var moduleSettings = new SettingsUtils();
+ var moduleSettings = SettingsUtils.Default;
var colorString = moduleSettings.GetSettings(PowerPreviewSettings.ModuleName).Properties.StlThumbnailColor.Value;
diff --git a/src/modules/previewpane/SvgPreviewHandler/Settings.cs b/src/modules/previewpane/SvgPreviewHandler/Settings.cs
index 925da8307a..dfde5bed03 100644
--- a/src/modules/previewpane/SvgPreviewHandler/Settings.cs
+++ b/src/modules/previewpane/SvgPreviewHandler/Settings.cs
@@ -8,7 +8,7 @@ namespace SvgPreviewHandler
{
internal sealed class Settings
{
- private static readonly SettingsUtils ModuleSettings = new SettingsUtils();
+ private static readonly SettingsUtils ModuleSettings = SettingsUtils.Default;
public int ColorMode
{
diff --git a/src/settings-ui/Settings.UI.Library/SettingsBackupAndRestoreUtils.cs b/src/settings-ui/Settings.UI.Library/SettingsBackupAndRestoreUtils.cs
index 10ebf74314..08708009d0 100644
--- a/src/settings-ui/Settings.UI.Library/SettingsBackupAndRestoreUtils.cs
+++ b/src/settings-ui/Settings.UI.Library/SettingsBackupAndRestoreUtils.cs
@@ -592,7 +592,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library
///
public (bool Success, string Message, string Severity, bool LastBackupExists, string OptionalMessage) DryRunBackup()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
var appBasePath = Path.GetDirectoryName(settingsUtils.GetSettingsFilePath());
string settingsBackupAndRestoreDir = GetSettingsBackupAndRestoreDir();
var results = BackupSettings(appBasePath, settingsBackupAndRestoreDir, true);
diff --git a/src/settings-ui/Settings.UI.Library/SettingsUtils.cs b/src/settings-ui/Settings.UI.Library/SettingsUtils.cs
index 6109df0646..eb4169f422 100644
--- a/src/settings-ui/Settings.UI.Library/SettingsUtils.cs
+++ b/src/settings-ui/Settings.UI.Library/SettingsUtils.cs
@@ -22,7 +22,14 @@ namespace Microsoft.PowerToys.Settings.UI.Library
private readonly ISettingsPath _settingsPath;
private readonly JsonSerializerOptions _serializerOptions;
- public SettingsUtils()
+ ///
+ /// Gets the default instance of the class for general use.
+ /// Same as instantiating a new instance with the constructor with a new object as the first argument and null as the second argument.
+ ///
+ /// For using in tests, you should use one of the public constructors.
+ public static SettingsUtils Default { get; } = new SettingsUtils();
+
+ private SettingsUtils()
: this(new FileSystem())
{
}
@@ -234,7 +241,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library
public static (bool Success, string Message, string Severity, bool LastBackupExists, string OptionalMessage) BackupSettings()
{
var settingsBackupAndRestoreUtilsX = SettingsBackupAndRestoreUtils.Instance;
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = Default;
var appBasePath = Path.GetDirectoryName(settingsUtils._settingsPath.GetSettingsPath(string.Empty, string.Empty));
string settingsBackupAndRestoreDir = settingsBackupAndRestoreUtilsX.GetSettingsBackupAndRestoreDir();
@@ -247,7 +254,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library
public static (bool Success, string Message, string Severity) RestoreSettings()
{
var settingsBackupAndRestoreUtilsX = SettingsBackupAndRestoreUtils.Instance;
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = Default;
var appBasePath = Path.GetDirectoryName(settingsUtils._settingsPath.GetSettingsPath(string.Empty, string.Empty));
string settingsBackupAndRestoreDir = settingsBackupAndRestoreUtilsX.GetSettingsBackupAndRestoreDir();
return settingsBackupAndRestoreUtilsX.RestoreSettings(appBasePath, settingsBackupAndRestoreDir);
diff --git a/src/settings-ui/Settings.UI.Library/Utilities/GetSettingCommandLineCommand.cs b/src/settings-ui/Settings.UI.Library/Utilities/GetSettingCommandLineCommand.cs
index a4ad1d1862..5780b95392 100644
--- a/src/settings-ui/Settings.UI.Library/Utilities/GetSettingCommandLineCommand.cs
+++ b/src/settings-ui/Settings.UI.Library/Utilities/GetSettingCommandLineCommand.cs
@@ -48,7 +48,7 @@ public sealed class GetSettingCommandLineCommand
var modulesSettings = new Dictionary>();
var settingsAssembly = CommandLineUtils.GetSettingsAssembly();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
var enabledModules = SettingsRepository.GetInstance(settingsUtils).SettingsConfig.Enabled;
diff --git a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/ColorPicker.cs b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/ColorPicker.cs
index baf46827c4..19e2ca3b67 100644
--- a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/ColorPicker.cs
+++ b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/ColorPicker.cs
@@ -67,7 +67,7 @@ namespace ViewModelTests
using (var viewModel = new ColorPickerViewModel(
ISettingsUtilsMocks.GetStubSettingsUtils().Object,
SettingsRepository.GetInstance(ISettingsUtilsMocks.GetStubSettingsUtils().Object),
- SettingsRepository.GetInstance(new SettingsUtils()),
+ SettingsRepository.GetInstance(SettingsUtils.Default),
ColorPickerIsEnabledByDefaultIPC))
{
Assert.IsTrue(viewModel.IsEnabled);
diff --git a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/FancyZones.cs b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/FancyZones.cs
index de6421785b..bf8f9396c4 100644
--- a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/FancyZones.cs
+++ b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/FancyZones.cs
@@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System;
+using System.IO.Abstractions;
using System.Text.Json;
using Microsoft.PowerToys.Settings.UI.Library;
@@ -120,7 +121,7 @@ namespace ViewModelTests
[TestMethod]
public void IsEnabledShouldDisableModuleWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
Func sendMockIPCConfigMSG = msg =>
{
@@ -140,7 +141,7 @@ namespace ViewModelTests
[TestMethod]
public void ShiftDragShouldSetValue2FalseWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -158,7 +159,7 @@ namespace ViewModelTests
[TestMethod]
public void OverrideSnapHotkeysShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -176,7 +177,7 @@ namespace ViewModelTests
[TestMethod]
public void MoveWindowsAcrossMonitorsShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -194,7 +195,7 @@ namespace ViewModelTests
[TestMethod]
public void MoveWindowsBasedOnPositionShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -217,7 +218,7 @@ namespace ViewModelTests
[TestMethod]
public void QuickLayoutSwitchShouldSetValue2FalseWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -235,7 +236,7 @@ namespace ViewModelTests
[TestMethod]
public void FlashZonesOnQuickSwitchShouldSetValue2FalseWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -253,7 +254,7 @@ namespace ViewModelTests
[TestMethod]
public void MakeDraggedWindowsTransparentShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -271,7 +272,7 @@ namespace ViewModelTests
[TestMethod]
public void MouseSwitchShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -289,7 +290,7 @@ namespace ViewModelTests
[TestMethod]
public void DisplayOrWorkAreaChangeMoveWindowsShouldSetValue2FalseWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -307,7 +308,7 @@ namespace ViewModelTests
[TestMethod]
public void ZoneSetChangeMoveWindowsShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -325,7 +326,7 @@ namespace ViewModelTests
[TestMethod]
public void AppLastZoneMoveWindowsShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -343,7 +344,7 @@ namespace ViewModelTests
[TestMethod]
public void OpenWindowOnActiveMonitorShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -361,7 +362,7 @@ namespace ViewModelTests
[TestMethod]
public void RestoreSizeShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -379,7 +380,7 @@ namespace ViewModelTests
[TestMethod]
public void UseCursorPosEditorStartupScreenShouldSetValue2FalseWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -397,7 +398,7 @@ namespace ViewModelTests
[TestMethod]
public void ShowOnAllMonitorsShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -415,7 +416,7 @@ namespace ViewModelTests
[TestMethod]
public void SpanZonesAcrossMonitorsShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -433,7 +434,7 @@ namespace ViewModelTests
[TestMethod]
public void OverlappingZonesAlgorithmIndexShouldSetValue2AnotherWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -451,7 +452,7 @@ namespace ViewModelTests
[TestMethod]
public void AllowChildWindowsToSnapShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -469,7 +470,7 @@ namespace ViewModelTests
[TestMethod]
public void DisableRoundCornersOnSnapShouldSetValue2TrueWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -487,7 +488,7 @@ namespace ViewModelTests
[TestMethod]
public void ZoneHighlightColorShouldSetColorValue2WhiteWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -505,7 +506,7 @@ namespace ViewModelTests
[TestMethod]
public void ZoneBorderColorShouldSetColorValue2WhiteWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -523,7 +524,7 @@ namespace ViewModelTests
[TestMethod]
public void ZoneInActiveColorShouldSetColorValue2WhiteWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -541,7 +542,7 @@ namespace ViewModelTests
[TestMethod]
public void ExcludedAppsShouldSetColorValue2WhiteWhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
@@ -559,7 +560,7 @@ namespace ViewModelTests
[TestMethod]
public void HighlightOpacityShouldSetOpacityValueTo60WhenSuccessful()
{
- Mock mockSettingsUtils = new Mock();
+ Mock mockSettingsUtils = new Mock(new FileSystem(), null);
// arrange
FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName);
diff --git a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/ShortcutGuide.cs b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/ShortcutGuide.cs
index 3613d0cfa3..897fc2bec6 100644
--- a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/ShortcutGuide.cs
+++ b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/ShortcutGuide.cs
@@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System;
+using System.IO.Abstractions;
using System.Text.Json;
using Microsoft.PowerToys.Settings.UI.Library;
@@ -69,7 +70,7 @@ namespace ViewModelTests
[TestMethod]
public void IsEnabledShouldEnableModuleWhenSuccessful()
{
- var settingsUtilsMock = new Mock();
+ var settingsUtilsMock = new Mock(new FileSystem(), null);
// Assert
// Initialize mock function of sending IPC message.
diff --git a/src/settings-ui/Settings.UI/Helpers/HotkeyConflictIgnoreHelper.cs b/src/settings-ui/Settings.UI/Helpers/HotkeyConflictIgnoreHelper.cs
index d2e737180a..1397fca0b7 100644
--- a/src/settings-ui/Settings.UI/Helpers/HotkeyConflictIgnoreHelper.cs
+++ b/src/settings-ui/Settings.UI/Helpers/HotkeyConflictIgnoreHelper.cs
@@ -22,7 +22,7 @@ namespace Microsoft.PowerToys.Settings.UI.Helpers
static HotkeyConflictIgnoreHelper()
{
- _settingsUtils = new SettingsUtils();
+ _settingsUtils = SettingsUtils.Default;
_generalSettingsRepository = SettingsRepository.GetInstance(_settingsUtils);
}
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs
index 19cd75b022..3189f15b31 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs
@@ -133,7 +133,7 @@ namespace Microsoft.PowerToys.Settings.UI
var settingValue = cmdArgs[3];
try
{
- SetSettingCommandLineCommand.Execute(settingName, settingValue, new SettingsUtils());
+ SetSettingCommandLineCommand.Execute(settingName, settingValue, SettingsUtils.Default);
}
catch (Exception ex)
{
@@ -151,7 +151,7 @@ namespace Microsoft.PowerToys.Settings.UI
{
using (var settings = JsonDocument.Parse(File.ReadAllText(ipcFileName)))
{
- SetAdditionalSettingsCommandLineCommand.Execute(moduleName, settings, new SettingsUtils());
+ SetAdditionalSettingsCommandLineCommand.Execute(moduleName, settings, SettingsUtils.Default);
}
}
catch (Exception ex)
@@ -357,7 +357,7 @@ namespace Microsoft.PowerToys.Settings.UI
return 0;
}
- private static ISettingsUtils settingsUtils = new SettingsUtils();
+ private static ISettingsUtils settingsUtils = SettingsUtils.Default;
private static ThemeService themeService = new ThemeService(SettingsRepository.GetInstance(settingsUtils));
public static ThemeService ThemeService => themeService;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Controls/Dashboard/ShortcutConflictWindow.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Controls/Dashboard/ShortcutConflictWindow.xaml.cs
index b9bee4ff08..19a6cb06ad 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Controls/Dashboard/ShortcutConflictWindow.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Controls/Dashboard/ShortcutConflictWindow.xaml.cs
@@ -26,7 +26,7 @@ namespace Microsoft.PowerToys.Settings.UI.SettingsXAML.Controls.Dashboard
public ShortcutConflictWindow()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new ShortcutConflictViewModel(
settingsUtils,
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Flyout/AppsListPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Flyout/AppsListPage.xaml.cs
index b58636f41b..fd034239e1 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Flyout/AppsListPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Flyout/AppsListPage.xaml.cs
@@ -24,7 +24,7 @@ namespace Microsoft.PowerToys.Settings.UI.Flyout
{
this.InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new AllAppsViewModel(SettingsRepository.GetInstance(settingsUtils), Views.ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
}
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs
index 51219309e0..f82da1466c 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs
@@ -27,7 +27,7 @@ namespace Microsoft.PowerToys.Settings.UI.Flyout
public LaunchPage()
{
this.InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new LauncherViewModel(SettingsRepository.GetInstance(settingsUtils), Views.ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
}
@@ -51,7 +51,7 @@ namespace Microsoft.PowerToys.Settings.UI.Flyout
break;
case ModuleType.EnvironmentVariables: // Launch Environment Variables
{
- bool launchAdmin = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.LaunchAdministrator;
+ bool launchAdmin = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.LaunchAdministrator;
string eventName = !App.IsElevated && launchAdmin
? Constants.ShowEnvironmentVariablesAdminSharedEvent()
: Constants.ShowEnvironmentVariablesSharedEvent();
@@ -74,7 +74,7 @@ namespace Microsoft.PowerToys.Settings.UI.Flyout
case ModuleType.Hosts: // Launch Hosts
{
- bool launchAdmin = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.LaunchAdministrator;
+ bool launchAdmin = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.LaunchAdministrator;
string eventName = !App.IsElevated && launchAdmin
? Constants.ShowHostsAdminSharedEvent()
: Constants.ShowHostsSharedEvent();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/MainWindow.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/MainWindow.xaml.cs
index 90b2577268..27d5456418 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/MainWindow.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/MainWindow.xaml.cs
@@ -81,7 +81,7 @@ namespace Microsoft.PowerToys.Settings.UI
// open main window
ShellPage.SetUpdatingGeneralSettingsCallback((ModuleType moduleType, bool isEnabled) =>
{
- SettingsRepository repository = SettingsRepository.GetInstance(new SettingsUtils());
+ SettingsRepository repository = SettingsRepository.GetInstance(SettingsUtils.Default);
GeneralSettings generalSettingsConfig = repository.SettingsConfig;
bool needToUpdate = ModuleHelper.GetIsModuleEnabled(generalSettingsConfig, moduleType) != isEnabled;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeAdvancedPaste.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeAdvancedPaste.xaml.cs
index 52cbc6cef2..73e25ed856 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeAdvancedPaste.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeAdvancedPaste.xaml.cs
@@ -35,9 +35,9 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- AdvancedPasteUIHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.AdvancedPasteUIShortcut.GetKeysList();
- PasteAsPlainTextHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.PasteAsPlainTextShortcut.GetKeysList();
- PasteAsMarkdownHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.PasteAsMarkdownShortcut.GetKeysList();
+ AdvancedPasteUIHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.AdvancedPasteUIShortcut.GetKeysList();
+ PasteAsPlainTextHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.PasteAsPlainTextShortcut.GetKeysList();
+ PasteAsMarkdownHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.PasteAsMarkdownShortcut.GetKeysList();
// TODO(stefan): Check how to remove additional space if item is set to Collapsed.
if (PasteAsMarkdownHotkeyControl.Keys.Count > 0)
@@ -45,7 +45,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
PasteAsMarkdownHotkeyControl.Visibility = Microsoft.UI.Xaml.Visibility.Visible;
}
- PasteAsJsonHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.PasteAsJsonShortcut.GetKeysList();
+ PasteAsJsonHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.PasteAsJsonShortcut.GetKeysList();
if (PasteAsJsonHotkeyControl.Keys.Count > 0)
{
PasteAsJsonHotkeyControl.Visibility = Microsoft.UI.Xaml.Visibility.Visible;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeAlwaysOnTop.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeAlwaysOnTop.xaml.cs
index d22392e717..08fb0f8a80 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeAlwaysOnTop.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeAlwaysOnTop.xaml.cs
@@ -35,7 +35,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- HotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.Hotkey.Value.GetKeysList();
+ HotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.Hotkey.Value.GetKeysList();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeColorPicker.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeColorPicker.xaml.cs
index 444b2d7295..8fd2bfb28d 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeColorPicker.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeColorPicker.xaml.cs
@@ -50,7 +50,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- ColorPickerSettings settings = new SettingsUtils().GetSettingsOrDefault(ColorPickerSettings.ModuleName, settingsUpgrader: ColorPickerSettings.UpgradeSettings);
+ ColorPickerSettings settings = SettingsUtils.Default.GetSettingsOrDefault(ColorPickerSettings.ModuleName, settingsUpgrader: ColorPickerSettings.UpgradeSettings);
HotkeyControl.Keys = settings.Properties.ActivationShortcut.GetKeysList();
}
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeCropAndLock.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeCropAndLock.xaml.cs
index be05925ec3..914dd647f6 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeCropAndLock.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeCropAndLock.xaml.cs
@@ -35,8 +35,8 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- ReparentHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.ReparentHotkey.Value.GetKeysList();
- ThumbnailHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.ThumbnailHotkey.Value.GetKeysList();
+ ReparentHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ReparentHotkey.Value.GetKeysList();
+ ThumbnailHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ThumbnailHotkey.Value.GetKeysList();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeEnvironmentVariables.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeEnvironmentVariables.xaml.cs
index af20978b42..3e2b66b9d6 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeEnvironmentVariables.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeEnvironmentVariables.xaml.cs
@@ -37,7 +37,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
private void Launch_EnvironmentVariables_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
- bool launchAdmin = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.LaunchAdministrator;
+ bool launchAdmin = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.LaunchAdministrator;
string eventName = !App.IsElevated && launchAdmin
? Constants.ShowEnvironmentVariablesAdminSharedEvent()
: Constants.ShowEnvironmentVariablesSharedEvent();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeFancyZones.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeFancyZones.xaml.cs
index ccbc5c8cc7..5308336e16 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeFancyZones.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeFancyZones.xaml.cs
@@ -35,7 +35,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- HotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.FancyzonesEditorHotkey.Value.GetKeysList();
+ HotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.FancyzonesEditorHotkey.Value.GetKeysList();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeHosts.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeHosts.xaml.cs
index d47af96c7f..0a98df472e 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeHosts.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeHosts.xaml.cs
@@ -37,7 +37,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
private void Launch_Hosts_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
- bool launchAdmin = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.LaunchAdministrator;
+ bool launchAdmin = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.LaunchAdministrator;
string eventName = !App.IsElevated && launchAdmin
? Constants.ShowHostsAdminSharedEvent()
: Constants.ShowHostsSharedEvent();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeMeasureTool.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeMeasureTool.xaml.cs
index 7ca7739883..e8a24b9fc5 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeMeasureTool.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeMeasureTool.xaml.cs
@@ -38,7 +38,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- HotkeyActivation.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.ActivationShortcut.GetKeysList();
+ HotkeyActivation.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ActivationShortcut.GetKeysList();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeOverviewAlternate.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeOverviewAlternate.xaml.cs
index d0ae488347..cbd05fc7ed 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeOverviewAlternate.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeOverviewAlternate.xaml.cs
@@ -21,10 +21,10 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
ViewModel = new OobePowerToysModule(OobeShellPage.OobeShellHandler.Modules[(int)PowerToysModules.Overview]);
DataContext = ViewModel;
- FancyZonesHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.FancyzonesEditorHotkey.Value.GetKeysList();
- RunHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.OpenPowerLauncher.GetKeysList();
- ColorPickerHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.ActivationShortcut.GetKeysList();
- AlwaysOnTopHotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.Hotkey.Value.GetKeysList();
+ FancyZonesHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.FancyzonesEditorHotkey.Value.GetKeysList();
+ RunHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.OpenPowerLauncher.GetKeysList();
+ ColorPickerHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ActivationShortcut.GetKeysList();
+ AlwaysOnTopHotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.Hotkey.Value.GetKeysList();
}
private void SettingsLaunchButton_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobePeek.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobePeek.xaml.cs
index 7817b13ca4..6782f4adc7 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobePeek.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobePeek.xaml.cs
@@ -38,7 +38,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- HotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.ActivationShortcut.GetKeysList();
+ HotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ActivationShortcut.GetKeysList();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobePowerOCR.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobePowerOCR.xaml.cs
index 7fef84d2b9..cf607d370e 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobePowerOCR.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobePowerOCR.xaml.cs
@@ -35,7 +35,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- HotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.ActivationShortcut.GetKeysList();
+ HotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ActivationShortcut.GetKeysList();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeRun.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeRun.xaml.cs
index 3cb8593922..796e05bdea 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeRun.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeRun.xaml.cs
@@ -54,7 +54,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
{
ViewModel.LogOpeningModuleEvent();
- HotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.OpenPowerLauncher.GetKeysList();
+ HotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.OpenPowerLauncher.GetKeysList();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShellPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShellPage.xaml.cs
index 8b01ab0bd0..7f8531286c 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShellPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShellPage.xaml.cs
@@ -51,7 +51,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
public ObservableCollection Modules { get; }
- private static ISettingsUtils settingsUtils = new SettingsUtils();
+ private static ISettingsUtils settingsUtils = SettingsUtils.Default;
/* NOTE: Experimentation for OOBE is currently turned off on server side. Keeping this code in a comment to allow future experiments.
private bool ExperimentationToggleSwitchEnabled { get; set; } = true;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShortcutGuide.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShortcutGuide.xaml.cs
index 5702ddcb9f..e721deefd6 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShortcutGuide.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShortcutGuide.xaml.cs
@@ -56,7 +56,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- var settingsProperties = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties;
+ var settingsProperties = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties;
if ((bool)settingsProperties.UseLegacyPressWinKeyBehavior.Value)
{
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeWorkspaces.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeWorkspaces.xaml.cs
index 772807f735..98a8bccb84 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeWorkspaces.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeWorkspaces.xaml.cs
@@ -38,7 +38,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Views
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.LogOpeningModuleEvent();
- HotkeyControl.Keys = SettingsRepository.GetInstance(new SettingsUtils()).SettingsConfig.Properties.Hotkey.Value.GetKeysList();
+ HotkeyControl.Keys = SettingsRepository.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.Hotkey.Value.GetKeysList();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/AdvancedPastePage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/AdvancedPastePage.xaml.cs
index 7b267107ee..faf31b0d4d 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/AdvancedPastePage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/AdvancedPastePage.xaml.cs
@@ -44,7 +44,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public AdvancedPastePage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new AdvancedPasteViewModel(
settingsUtils,
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/AlwaysOnTopPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/AlwaysOnTopPage.xaml.cs
index c5d99e8e98..95ba8b595f 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/AlwaysOnTopPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/AlwaysOnTopPage.xaml.cs
@@ -15,7 +15,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public AlwaysOnTopPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new AlwaysOnTopViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
InitializeComponent();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/AwakePage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/AwakePage.xaml.cs
index 91b2b0b781..f52e96fb8f 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/AwakePage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/AwakePage.xaml.cs
@@ -36,7 +36,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
{
_dispatcherQueue = DispatcherQueue.GetForCurrentThread();
_fileSystem = new FileSystem();
- _settingsUtils = new SettingsUtils();
+ _settingsUtils = SettingsUtils.Default;
_sendConfigMsg = ShellPage.SendDefaultIPCMessage;
ViewModel = new AwakeViewModel();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/CmdPalPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/CmdPalPage.xaml.cs
index ea318100f0..90dec43398 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/CmdPalPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/CmdPalPage.xaml.cs
@@ -19,7 +19,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public CmdPalPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new CmdPalViewModel(
settingsUtils,
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ColorPickerPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/ColorPickerPage.xaml.cs
index 9e0ba6be07..652db49f4b 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ColorPickerPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ColorPickerPage.xaml.cs
@@ -27,7 +27,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public ColorPickerPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new ColorPickerViewModel(
settingsUtils,
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/CropAndLockPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/CropAndLockPage.xaml.cs
index 67ef238645..5c174b1f98 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/CropAndLockPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/CropAndLockPage.xaml.cs
@@ -15,7 +15,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public CropAndLockPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new CropAndLockViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
InitializeComponent();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/DashboardPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/DashboardPage.xaml.cs
index 0d7273f924..522f8fbaf4 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/DashboardPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/DashboardPage.xaml.cs
@@ -34,7 +34,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public DashboardPage()
{
InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new DashboardViewModel(
SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/EnvironmentVariablesPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/EnvironmentVariablesPage.xaml.cs
index 0772869249..a3e17ac491 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/EnvironmentVariablesPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/EnvironmentVariablesPage.xaml.cs
@@ -16,7 +16,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public EnvironmentVariablesPage()
{
InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new EnvironmentVariablesViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage, App.IsElevated);
}
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml.cs
index e1d7f7ea4b..ddf7c1e8ee 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/FancyZonesPage.xaml.cs
@@ -16,7 +16,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public FancyZonesPage()
{
InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new FancyZonesViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
Loaded += (s, e) => ViewModel.OnPageLoaded();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/FileLocksmithPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/FileLocksmithPage.xaml.cs
index 6020917b69..8f78ce2c8c 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/FileLocksmithPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/FileLocksmithPage.xaml.cs
@@ -15,7 +15,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public FileLocksmithPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new FileLocksmithViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
InitializeComponent();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/GeneralPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/GeneralPage.xaml.cs
index 56eb73c6ef..5e84711b86 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/GeneralPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/GeneralPage.xaml.cs
@@ -38,7 +38,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
// Load string resources
var loader = Helpers.ResourceLoaderInstance.ResourceLoader;
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
Action stateUpdatingAction = () =>
{
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/HostsPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/HostsPage.xaml.cs
index 19375d90f7..b65f32d520 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/HostsPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/HostsPage.xaml.cs
@@ -16,7 +16,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public HostsPage()
{
InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new HostsViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage, App.IsElevated);
BackupsCountInputSettingsCard.Header = ResourceLoaderInstance.ResourceLoader.GetString("Hosts_Backup_CountInput_Header");
BackupsCountInputSettingsCard.Description = ResourceLoaderInstance.ResourceLoader.GetString("Hosts_Backup_CountInput_Description");
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ImageResizerPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/ImageResizerPage.xaml.cs
index 18e1aacc15..6a2068d5a8 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ImageResizerPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ImageResizerPage.xaml.cs
@@ -21,7 +21,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public ImageResizerPage()
{
InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
var resourceLoader = ResourceLoaderInstance.ResourceLoader;
Func loader = resourceLoader.GetString;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/KeyboardManagerPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/KeyboardManagerPage.xaml.cs
index e32f5aa9cb..fce4dfc718 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/KeyboardManagerPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/KeyboardManagerPage.xaml.cs
@@ -28,7 +28,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public KeyboardManagerPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new KeyboardManagerViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage, FilterRemapKeysList);
watcher = Helper.GetFileWatcher(
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs
index 974447a20e..dcd40fdbc7 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs
@@ -40,7 +40,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public LightSwitchPage()
{
- this.settingsUtils = new SettingsUtils();
+ this.settingsUtils = SettingsUtils.Default;
this.sendConfigMsg = ShellPage.SendDefaultIPCMessage;
this.generalSettingsRepository = SettingsRepository.GetInstance(this.settingsUtils);
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/MeasureToolPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/MeasureToolPage.xaml.cs
index bf516b557b..8f80f1c13b 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/MeasureToolPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/MeasureToolPage.xaml.cs
@@ -17,7 +17,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public MeasureToolPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new MeasureToolViewModel(
settingsUtils,
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseUtilsPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseUtilsPage.xaml.cs
index ac4c7cc71d..fa34ca5293 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseUtilsPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseUtilsPage.xaml.cs
@@ -22,7 +22,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
{
// By mistake, the first release of Find My Mouse was saving settings in two places at the same time.
// Delete the wrong path for Find My Mouse settings.
- var tempSettingsUtils = new SettingsUtils();
+ var tempSettingsUtils = SettingsUtils.Default;
if (tempSettingsUtils.SettingsExists("Find My Mouse"))
{
var settingsFilePath = tempSettingsUtils.GetSettingsFilePath("Find My Mouse");
@@ -34,7 +34,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
{
}
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new MouseUtilsViewModel(
settingsUtils,
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseWithoutBordersPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseWithoutBordersPage.xaml.cs
index 296a9a3deb..2db0d7a5d6 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseWithoutBordersPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseWithoutBordersPage.xaml.cs
@@ -33,7 +33,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public MouseWithoutBordersPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new MouseWithoutBordersViewModel(
settingsUtils,
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/NewPlusPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/NewPlusPage.xaml.cs
index daa4dca2b5..997f6c7771 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/NewPlusPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/NewPlusPage.xaml.cs
@@ -16,7 +16,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public NewPlusPage()
{
InitializeComponent();
- var settings_utils = new SettingsUtils();
+ var settings_utils = SettingsUtils.Default;
ViewModel = new NewPlusViewModel(settings_utils, SettingsRepository.GetInstance(settings_utils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
}
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PeekPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/PeekPage.xaml.cs
index 1a845e25ec..b848ae86dd 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PeekPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PeekPage.xaml.cs
@@ -15,7 +15,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public PeekPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new PeekViewModel(
settingsUtils,
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerAccentPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerAccentPage.xaml.cs
index fa666dd242..0f60a8dcd3 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerAccentPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerAccentPage.xaml.cs
@@ -17,7 +17,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public PowerAccentPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new PowerAccentViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
this.InitializeComponent();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml.cs
index c734535d49..19973a69bc 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml.cs
@@ -34,7 +34,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public PowerLauncherPage()
{
InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
_lastIPCMessageSentTick = Environment.TickCount;
PowerLauncherSettings settings = SettingsRepository.GetInstance(settingsUtils)?.SettingsConfig;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerOcrPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerOcrPage.xaml.cs
index 27769b92ce..9198d338ef 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerOcrPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerOcrPage.xaml.cs
@@ -15,7 +15,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public PowerOcrPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new PowerOcrViewModel(
settingsUtils,
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml.cs
index 9d56c686e3..ecc960651b 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml.cs
@@ -19,7 +19,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public PowerPreviewPage()
{
InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new PowerPreviewViewModel(SettingsRepository.GetInstance(settingsUtils), SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
}
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerRenamePage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerRenamePage.xaml.cs
index d97b83c499..10013b84a3 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerRenamePage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerRenamePage.xaml.cs
@@ -16,7 +16,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public PowerRenamePage()
{
InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new PowerRenameViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/RegistryPreviewPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/RegistryPreviewPage.xaml.cs
index 8c1ed319a3..41d814e48b 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/RegistryPreviewPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/RegistryPreviewPage.xaml.cs
@@ -14,7 +14,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public RegistryPreviewPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new RegistryPreviewViewModel(
SettingsRepository.GetInstance(settingsUtils),
SettingsRepository.GetInstance(settingsUtils),
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs
index 06f7e222ce..853b66f164 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs
@@ -151,7 +151,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
{
InitializeComponent();
SetWindowTitle();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new ShellViewModel(SettingsRepository.GetInstance(settingsUtils));
DataContext = ViewModel;
ShellHandler = this;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShortcutGuidePage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShortcutGuidePage.xaml.cs
index ffca0184c7..feb0e4837d 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShortcutGuidePage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShortcutGuidePage.xaml.cs
@@ -17,7 +17,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
{
InitializeComponent();
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new ShortcutGuideViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/WorkspacesPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/WorkspacesPage.xaml.cs
index 0b0ca571c4..3028b46ea1 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/WorkspacesPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/WorkspacesPage.xaml.cs
@@ -15,7 +15,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public WorkspacesPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new WorkspacesViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
InitializeComponent();
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ZoomItPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/ZoomItPage.xaml.cs
index 9018eb64e8..043ca7df8c 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ZoomItPage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ZoomItPage.xaml.cs
@@ -104,7 +104,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
public ZoomItPage()
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
ViewModel = new ZoomItViewModel(settingsUtils, SettingsRepository.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage, PickFileDialog, PickFontDialog);
DataContext = ViewModel;
InitializeComponent();
diff --git a/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs
index b0520dd38d..1afe76897e 100644
--- a/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs
+++ b/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs
@@ -251,7 +251,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
if (dashboardListItem.Tag == ModuleType.NewPlus && dashboardListItem.IsEnabled == true)
{
- var settingsUtils = new SettingsUtils();
+ var settingsUtils = SettingsUtils.Default;
var settings = NewPlusViewModel.LoadSettings(settingsUtils);
NewPlusViewModel.CopyTemplateExamples(settings.Properties.TemplateLocation.Value);
}
@@ -390,7 +390,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
private ObservableCollection