From 964286ab99401c36202cb1610dda918713e7e569 Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Tue, 9 Mar 2021 18:31:30 +0200 Subject: [PATCH 01/82] Makes AllPlugins single tone thread safe (#10121) --- .../launcher/PowerLauncher/Plugin/PluginManager.cs | 9 ++++++++- .../launcher/PowerLauncher/Plugin/PluginsLoader.cs | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs b/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs index 8280527abc..12e2a3cfd7 100644 --- a/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs +++ b/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs @@ -24,6 +24,7 @@ namespace PowerLauncher.Plugin { private static readonly IFileSystem FileSystem = new FileSystem(); private static readonly IDirectory Directory = FileSystem.Directory; + private static readonly object AllPluginsLock = new object(); private static IEnumerable _contextMenuPlugins = new List(); @@ -44,7 +45,13 @@ namespace PowerLauncher.Plugin { if (_allPlugins == null) { - _allPlugins = PluginsLoader.Plugins(PluginConfig.Parse(Directories)); + lock (AllPluginsLock) + { + if (_allPlugins == null) + { + _allPlugins = PluginsLoader.Plugins(PluginConfig.Parse(Directories)); + } + } } return _allPlugins; diff --git a/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs b/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs index 44434135ad..2b51e114e0 100644 --- a/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs +++ b/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs @@ -27,7 +27,9 @@ namespace PowerLauncher.Plugin public static IEnumerable CSharpPlugins(List source) { var plugins = new List(); - var metadatas = source.Where(o => o.Language.ToUpperInvariant() == AllowedLanguage.CSharp); + var metadatas = source + .Where(o => o.Language.ToUpperInvariant() == AllowedLanguage.CSharp) + .ToList(); foreach (var metadata in metadatas) { From 5c45f2c7b86b11009f2d0640db6b42f63aa529b4 Mon Sep 17 00:00:00 2001 From: Adam Short Date: Tue, 9 Mar 2021 17:20:49 +0000 Subject: [PATCH 02/82] [PT Run] Run dialog now has monitor positioning options (#9492) * Run dialog now has monitor positioning options * add monitor index validation in window position calculation * correct path in page * change how radio buttons are declared to resolve them not being set based on setting * Change "follow mouse" wording Co-authored-by: htcfreek <61519853+htcfreek@users.noreply.github.com> * PowerLauncher -> PowerToysRun for new variables/resources * correct header label id and update wording to PowerToys Run * only enable custom index if BOTH custom position radio checked and Run is enabled * retrieve list count of detected monitors to limit selection of MonitorToDisplayOn * add a link to Windows Display settings * fix display settings link * change how we get the number of connected monitors so we're not relying on presentation core, windowsbase etc which seem to fail the build * combine position and appearance headers * change references for custom position to "focus" * restore accidentally removed files * remove unused directives * hook up "active window" position with the launcher window * remove left overs * remove uneeded itemgroup * make resource prefixes consistent; using "Run_" * add etcoreapp to spell check * undo change to file not modified in the end * remove unused checkbox post rebase * remove change to reduce diff size * changes according to review * revert whitespace changes post rebase * revert resources * add changes back * Update src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw Add comment Co-authored-by: Enrico Giordani * remove unneeded resource string Co-authored-by: htcfreek <61519853+htcfreek@users.noreply.github.com> Co-authored-by: Enrico Giordani --- .github/actions/spell-check/expect.txt | 1 + src/common/ManagedCommon/StartupPosition.cs | 13 ++++ .../launcher/PowerLauncher/MainWindow.xaml.cs | 21 ++++- .../launcher/PowerLauncher/SettingsWatcher.cs | 5 ++ .../UserSettings/PowerToysRunSettings.cs | 2 + .../PowerLauncherProperties.cs | 4 + .../ViewModels/PowerLauncherViewModel.cs | 77 +++++++++++++++++++ .../Strings/en-us/Resources.resw | 18 ++++- .../Views/PowerLauncherPage.xaml | 23 +++++- 9 files changed, 160 insertions(+), 4 deletions(-) create mode 100644 src/common/ManagedCommon/StartupPosition.cs diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index 0ad432ffe9..e25f3a342f 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -663,6 +663,7 @@ ERRORTITLE esize estdir etcore +etcoreapp etl etw EUQ diff --git a/src/common/ManagedCommon/StartupPosition.cs b/src/common/ManagedCommon/StartupPosition.cs new file mode 100644 index 0000000000..ae316eee36 --- /dev/null +++ b/src/common/ManagedCommon/StartupPosition.cs @@ -0,0 +1,13 @@ +// 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 ManagedCommon +{ + public enum StartupPosition + { + Cursor, + PrimaryMonitor, + Focus, + } +} diff --git a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs index 2345cb2069..98b8a45921 100644 --- a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs +++ b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs @@ -207,7 +207,7 @@ namespace PowerLauncher /// X co-ordinate of main window top left corner private double WindowLeft() { - var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); + var screen = GetScreen(); var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X, 0); var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0); var left = ((dip2.X - ActualWidth) / 2) + dip1.X; @@ -216,13 +216,30 @@ namespace PowerLauncher private double WindowTop() { - var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); + var screen = GetScreen(); var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y); var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height); var top = ((dip2.Y - SearchBox.ActualHeight) / 4) + dip1.Y; return top; } + private Screen GetScreen() + { + ManagedCommon.StartupPosition position = _settings.StartupPosition; + switch (position) + { + case ManagedCommon.StartupPosition.PrimaryMonitor: + return Screen.PrimaryScreen; + case ManagedCommon.StartupPosition.Focus: + IntPtr foregroundWindowHandle = NativeMethods.GetForegroundWindow(); + Screen activeScreen = Screen.FromHandle(foregroundWindowHandle); + return activeScreen; + case ManagedCommon.StartupPosition.Cursor: + default: + return Screen.FromPoint(System.Windows.Forms.Cursor.Position); + } + } + private void Launcher_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Tab && Keyboard.IsKeyDown(Key.LeftShift)) diff --git a/src/modules/launcher/PowerLauncher/SettingsWatcher.cs b/src/modules/launcher/PowerLauncher/SettingsWatcher.cs index 68641213cc..31bcaaf4d8 100644 --- a/src/modules/launcher/PowerLauncher/SettingsWatcher.cs +++ b/src/modules/launcher/PowerLauncher/SettingsWatcher.cs @@ -126,6 +126,11 @@ namespace PowerLauncher _themeManager.ChangeTheme(_settings.Theme, true); } + if (_settings.StartupPosition != overloadSettings.Properties.Position) + { + _settings.StartupPosition = overloadSettings.Properties.Position; + } + retry = false; } diff --git a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs index e01121be19..c30f98ff53 100644 --- a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs +++ b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs @@ -47,6 +47,8 @@ namespace Wox.Infrastructure.UserSettings public Theme Theme { get; set; } = Theme.System; + public StartupPosition StartupPosition { get; set; } = StartupPosition.Cursor; + public string QueryBoxFont { get; set; } = FontFamily.GenericSansSerif.Name; public string QueryBoxFontStyle { get; set; } diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/PowerLauncherProperties.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/PowerLauncherProperties.cs index 6723300b24..d4191871aa 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/PowerLauncherProperties.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/PowerLauncherProperties.cs @@ -45,6 +45,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonPropertyName("theme")] public Theme Theme { get; set; } + [JsonPropertyName("startupPosition")] + public StartupPosition Position { get; set; } + public PowerLauncherProperties() { OpenPowerLauncher = new HotkeySettings(false, false, true, false, 32); @@ -57,6 +60,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library ClearInputOnLaunch = false; MaximumNumberOfResults = 4; Theme = Theme.System; + Position = StartupPosition.Cursor; } } } diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs index 668fe902ea..9abe73f2d4 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs @@ -22,6 +22,10 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels private bool _isLightThemeRadioButtonChecked; private bool _isSystemThemeRadioButtonChecked; + private bool _isCursorPositionRadioButtonChecked; + private bool _isPrimaryMonitorPositionRadioButtonChecked; + private bool _isFocusPositionRadioButtonChecked; + private GeneralSettings GeneralSettingsConfig { get; set; } private readonly ISettingsUtils _settingsUtils; @@ -89,6 +93,19 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels break; } + switch (settings.Properties.Position) + { + case StartupPosition.Cursor: + _isCursorPositionRadioButtonChecked = true; + break; + case StartupPosition.PrimaryMonitor: + _isPrimaryMonitorPositionRadioButtonChecked = true; + break; + case StartupPosition.Focus: + _isFocusPositionRadioButtonChecked = true; + break; + } + foreach (var plugin in Plugins) { plugin.PropertyChanged += OnPluginInfoChange; @@ -243,6 +260,66 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels } } + public bool IsCursorPositionRadioButtonChecked + { + get + { + return _isCursorPositionRadioButtonChecked; + } + + set + { + if (value == true) + { + settings.Properties.Position = StartupPosition.Cursor; + } + + _isCursorPositionRadioButtonChecked = value; + + UpdateSettings(); + } + } + + public bool IsPrimaryMonitorPositionRadioButtonChecked + { + get + { + return _isPrimaryMonitorPositionRadioButtonChecked; + } + + set + { + if (value == true) + { + settings.Properties.Position = StartupPosition.PrimaryMonitor; + } + + _isPrimaryMonitorPositionRadioButtonChecked = value; + + UpdateSettings(); + } + } + + public bool IsFocusPositionRadioButtonChecked + { + get + { + return _isFocusPositionRadioButtonChecked; + } + + set + { + if (value == true) + { + settings.Properties.Position = StartupPosition.Focus; + } + + _isFocusPositionRadioButtonChecked = value; + + UpdateSettings(); + } + } + public HotkeySettings OpenPowerLauncher { get diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw index 10af378234..250ed62400 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw @@ -1151,4 +1151,20 @@ Win + Shift + O to toggle your video PowerToys Settings - \ No newline at end of file + + Position & appearance + + + Show PowerToys Run on + as in Show PowerToys Run on primary monitor + + + Monitor with mouse cursor + + + Monitor with focused window + + + Primary monitor + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/PowerLauncherPage.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/PowerLauncherPage.xaml index 72a99ee7d2..00fea94b85 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/PowerLauncherPage.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/PowerLauncherPage.xaml @@ -148,9 +148,30 @@ IsEnabled="{x:Bind Mode=OneWay, Path=ViewModel.EnablePowerLauncher}" /> - + + + + + + + + + From 2e3473bbfd11c3517790ba36833602e8f32ba667 Mon Sep 17 00:00:00 2001 From: Enrico Giordani Date: Tue, 9 Mar 2021 19:39:01 +0100 Subject: [PATCH 03/82] [FZ Editor] Light & Dark colors adjustments (#10115) * [FZ Editor] Light & Dark colors adjustments * Reduce dark theme background transparency --- .../editor/FancyZonesEditor/CanvasZone.xaml | 32 +++++++++++-------- .../editor/FancyZonesEditor/GridZone.xaml | 3 +- .../Styles/LayoutPreviewStyles.xaml | 10 +++--- .../editor/FancyZonesEditor/Themes/Dark.xaml | 14 +++++--- .../editor/FancyZonesEditor/Themes/Light.xaml | 16 +++++++--- 5 files changed, 45 insertions(+), 30 deletions(-) diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasZone.xaml b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasZone.xaml index 89733659b1..7865cec136 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasZone.xaml +++ b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasZone.xaml @@ -16,7 +16,12 @@ - + @@ -64,7 +69,9 @@ - + @@ -79,10 +86,9 @@ - @@ -129,15 +135,15 @@ - - - - + + + + - - - - + + + + @@ -202,71 +207,73 @@ - + - - - - + + + + - - - + + + - + VerticalAlignment="Center" /> + + VerticalAlignment="Center" /> - + + VerticalAlignment="Center" /> - + + VerticalAlignment="Center" /> + TextWrapping="Wrap" /> 255) - { - return; - } - if (!_ignoreRGBChanges) { - var r = byte.Parse(RTextBox.Text, CultureInfo.InvariantCulture); - var g = byte.Parse(GTextBox.Text, CultureInfo.InvariantCulture); - var b = byte.Parse(BTextBox.Text, CultureInfo.InvariantCulture); + var r = byte.Parse(RNumberBox.Text, CultureInfo.InvariantCulture); + var g = byte.Parse(GNumberBox.Text, CultureInfo.InvariantCulture); + var b = byte.Parse(BNumberBox.Text, CultureInfo.InvariantCulture); _ignoreRGBChanges = true; SetColorFromTextBoxes(System.Drawing.Color.FromArgb(r, g, b)); _ignoreRGBChanges = false; @@ -397,5 +398,10 @@ namespace ColorPicker.Controls { return "#" + BitConverter.ToString(new byte[] { color.R, color.G, color.B }).Replace("-", string.Empty, StringComparison.InvariantCulture); } + + private void HexCode_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) + { + (sender as TextBox).SelectAll(); + } } } diff --git a/src/modules/colorPicker/ColorPickerUI/Properties/Resources.Designer.cs b/src/modules/colorPicker/ColorPickerUI/Properties/Resources.Designer.cs index 31a6a07565..43312c8674 100644 --- a/src/modules/colorPicker/ColorPickerUI/Properties/Resources.Designer.cs +++ b/src/modules/colorPicker/ColorPickerUI/Properties/Resources.Designer.cs @@ -195,6 +195,15 @@ namespace ColorPicker.Properties { } } + /// + /// Looks up a localized string similar to Select color. + /// + public static string Select_color { + get { + return ResourceManager.GetString("Select_color", resourceCulture); + } + } + /// /// Looks up a localized string similar to Selected color. /// diff --git a/src/modules/colorPicker/ColorPickerUI/Properties/Resources.resx b/src/modules/colorPicker/ColorPickerUI/Properties/Resources.resx index a0c1b6b156..1fcefffaa4 100644 --- a/src/modules/colorPicker/ColorPickerUI/Properties/Resources.resx +++ b/src/modules/colorPicker/ColorPickerUI/Properties/Resources.resx @@ -361,4 +361,7 @@ Plum Plum color + + Select color + \ No newline at end of file diff --git a/src/modules/colorPicker/ColorPickerUI/Resources/Styles.xaml b/src/modules/colorPicker/ColorPickerUI/Resources/Styles.xaml index a5945dcb0f..f38968d618 100644 --- a/src/modules/colorPicker/ColorPickerUI/Resources/Styles.xaml +++ b/src/modules/colorPicker/ColorPickerUI/Resources/Styles.xaml @@ -105,6 +105,7 @@ HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Focusable="False" + Opacity="0" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> @@ -113,12 +114,12 @@ - + - + From 79eafee59a09032cbc56c25870b0e7bbffa823fe Mon Sep 17 00:00:00 2001 From: Niels Laute Date: Tue, 16 Mar 2021 15:18:27 +0100 Subject: [PATCH 15/82] [Docs] Remove unused images (#10251) * Removed images * Added aka.ms redirect * Revert "Added aka.ms redirect" This reverts commit f176d6ffa53cb9aa1072fb50e97552fa9519338c. * Added image and updated readme Co-authored-by: Niels Laute --- doc/images/FZTutorial.jpg | Bin 200201 -> 0 bytes doc/images/MTNDWidget.jpg | Bin 4843 -> 0 bytes doc/images/WindowsKeyShortcutGuide.jpg | Bin 279729 -> 0 bytes doc/images/preview_pane/general-settings.png | Bin 59705 -> 0 bytes doc/images/preview_pane/settings-ui.png | Bin 42736 -> 0 bytes doc/images/runner/tray.png | Bin 2580 -> 37161 bytes doc/images/settingsv2/file-explorer.png | Bin 0 -> 102475 bytes src/modules/previewpane/README.md | 8 ++------ 8 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 doc/images/FZTutorial.jpg delete mode 100644 doc/images/MTNDWidget.jpg delete mode 100644 doc/images/WindowsKeyShortcutGuide.jpg delete mode 100644 doc/images/preview_pane/general-settings.png delete mode 100644 doc/images/preview_pane/settings-ui.png create mode 100644 doc/images/settingsv2/file-explorer.png diff --git a/doc/images/FZTutorial.jpg b/doc/images/FZTutorial.jpg deleted file mode 100644 index 0b4f830b82266c46c2dd5330c21c0b1d2816ab68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200201 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

orvWpats_ZJezbcBIVUR5DZD!2(yP$_bFfl9_K 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 diff --git a/doc/images/MTNDWidget.jpg b/doc/images/MTNDWidget.jpg deleted file mode 100644 index 85fb6e334639a459586d1f83c42942a508aa6459..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4843 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°g%Rp$6D}6zutt``J!Qy>wB(C(gYZ%_k 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

BEr`D5c+%!1ZchIEu1 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 diff --git a/doc/images/preview_pane/general-settings.png b/doc/images/preview_pane/general-settings.png deleted file mode 100644 index 2700015fd56562cd051ae2cde4bb4897d3891ca6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59705 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

f)=q2S12jKqy70!R70a+4c(PBf{AX$KGtKsAN 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

yBj0GKD^4IgfkDSlcju;mlF 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 diff --git a/doc/images/settingsv2/file-explorer.png b/doc/images/settingsv2/file-explorer.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5bc1090e51988f2d7ec8abe08b9dc9eac25a0e GIT binary patch literal 102475 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

Yd{4H~?_A`s9A<2ju8|SpOo5 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 literal 0 HcmV?d00001 diff --git a/src/modules/previewpane/README.md b/src/modules/previewpane/README.md index b787fd9c5c..89928f513b 100644 --- a/src/modules/previewpane/README.md +++ b/src/modules/previewpane/README.md @@ -157,10 +157,6 @@ Since in-process preview handlers run under a surrogate hosting process (prevhos ## Managing Preview Handlers -After successful integration, your preview handler should appear in the PowerToys settings UI under the `File Explorer Preview` Tab. In here you should be able to enable and disable your preview handler. +After successful integration, your preview handler should appear in the PowerToys settings UI under the `File Explorer Preview` Tab. In here you should be able to enable and disable all the preview handles. -Settings UI - File Explorer Preview Tab - -In the general settings of the Settings UI, you should be able to disable and enable all the preview handlers all at once. - -Settings UI - General Settings Tab +Settings UI - File Explorer Preview Tab From 0413fe944ff4d81a84cb49b0f656bb765d98ed22 Mon Sep 17 00:00:00 2001 From: Niels Laute Date: Tue, 16 Mar 2021 15:32:43 +0100 Subject: [PATCH 16/82] Updated accent color (#10257) Co-authored-by: Niels Laute --- .../editor/FancyZonesEditor/GridZone.xaml.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/GridZone.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/GridZone.xaml.cs index c8eca9dbd8..09901e9dc3 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/GridZone.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/GridZone.xaml.cs @@ -21,6 +21,7 @@ namespace FancyZonesEditor private const string ObjectDependencyID = "IsSelected"; private const string GridZoneBackgroundBrushID = "GridZoneBackgroundBrush"; private const string SecondaryForegroundBrushID = "SecondaryForegroundBrush"; + private const string AccentColorBrushID = "SystemControlBackgroundAccentBrush"; public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register(ObjectDependencyID, typeof(bool), typeof(GridZone), new PropertyMetadata(false, OnSelectionChanged)); @@ -50,7 +51,7 @@ namespace FancyZonesEditor private void OnSelectionChanged() { - Background = IsSelected ? SystemParameters.WindowGlassBrush : App.Current.Resources[GridZoneBackgroundBrushID] as SolidColorBrush; + Background = IsSelected ? Application.Current.Resources[AccentColorBrushID] as SolidColorBrush : Application.Current.Resources[GridZoneBackgroundBrushID] as SolidColorBrush; } public bool IsSelected @@ -65,7 +66,7 @@ namespace FancyZonesEditor OnSelectionChanged(); _splitter = new Rectangle { - Fill = SystemParameters.WindowGlassBrush, + Fill = Application.Current.Resources[AccentColorBrushID] as SolidColorBrush, }; Body.Children.Add(_splitter); @@ -139,8 +140,8 @@ namespace FancyZonesEditor enabled = _canSplit(Orientation.Horizontal, _snappedPositionY); } - Brush disabledBrush = App.Current.Resources[SecondaryForegroundBrushID] as SolidColorBrush; - Brush enabledBrush = SystemParameters.WindowGlassBrush; // Active Accent color + Brush disabledBrush = Application.Current.Resources[SecondaryForegroundBrushID] as SolidColorBrush; + Brush enabledBrush = Application.Current.Resources[AccentColorBrushID] as SolidColorBrush; _splitter.Fill = enabled ? enabledBrush : disabledBrush; } @@ -148,7 +149,7 @@ namespace FancyZonesEditor { _hovering = true; UpdateSplitter(); - _splitter.Fill = SystemParameters.WindowGlassBrush; + _splitter.Fill = Application.Current.Resources[AccentColorBrushID] as SolidColorBrush; } protected override void OnMouseLeave(MouseEventArgs e) From 1d2aeaf14709bc653137d010226435c2b36bbc58 Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Tue, 16 Mar 2021 17:29:20 +0200 Subject: [PATCH 17/82] Tests on pipeline (#10244) --- .../ci/templates/build-powertoys-steps.yml | 53 ++++++++++++------- .../Microsoft.Interop.Tests.csproj | 4 +- .../UnitTest-ColorPickerUI.csproj | 4 +- ...rToys.Run.Plugin.Registry.UnitTests.csproj | 4 +- .../ImageTests.cs | 1 + .../UnitTests-MarkdownPreviewHandler.csproj | 4 +- .../UnitTests-PreviewHandlerCommon.csproj | 4 +- .../SvgPreviewControlTests.cs | 2 +- .../UnitTests-SvgPreviewHandler.csproj | 4 +- .../UnitTests-SvgThumbnailProvider.csproj | 4 +- ...oft.PowerToys.Settings.UI.UnitTests.csproj | 4 +- 11 files changed, 51 insertions(+), 37 deletions(-) diff --git a/.pipelines/ci/templates/build-powertoys-steps.yml b/.pipelines/ci/templates/build-powertoys-steps.yml index 3abec3b0a0..fe149c755f 100644 --- a/.pipelines/ci/templates/build-powertoys-steps.yml +++ b/.pipelines/ci/templates/build-powertoys-steps.yml @@ -93,40 +93,52 @@ steps: msbuildArgs: ${{ parameters.additionalBuildArguments }} maximumCpuCount: true - # directly not doing WinAppDriver testing - task: VSTest@2 - displayName: 'Run .Net Core Tests 1' + displayName: 'MS Tests' inputs: platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)' testSelector: 'testAssemblies' testAssemblyVer2: | - **\Microsoft.Plugin.Folder.UnitTest.dll + **\UnitTests-SvgThumbnailProvider.dll + **\Microsoft.PowerToys.Settings.UI.UnitTests.dll + **\UnitTests-SvgPreviewHandler.dll + **\UnitTests-PreviewHandlerCommon.dll + **\PreviewPaneUnitTests.dll + **\Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.dll + **\UnitTest-ColorPickerUI.dll + **\Microsoft.Interop.Tests.dll + !**\obj\** + +- task: VSTest@2 + displayName: 'XUnit Tests' + inputs: + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + testSelector: 'testAssemblies' + testAssemblyVer2: | + **\ImageResizer.Test.dll + !**\obj\** + +- task: VSTest@2 + displayName: 'NUnit Tests' + inputs: + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + testSelector: 'testAssemblies' + testAssemblyVer2: | + **\Microsoft.Plugin.Folder.UnitTests.dll **\Microsoft.Plugin.Program.UnitTests.dll **\Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest.dll **\Microsoft.Plugin.Uri.UnitTests.dll **\Wox.Test.dll - **\Microsoft.PowerToys.Settings.UI.UnitTests.dll - **\UnitTest-ColorPickerUI.dll - **\Microsoft.Interop.Tests.dll - !**\obj\** -- task: VSTest@2 - displayName: 'Run .Net Core Tests 2' - inputs: - platform: '$(BuildPlatform)' - configuration: '$(BuildConfiguration)' - testSelector: 'testAssemblies' - testAssemblyVer2: | - **\PreviewPaneUnitTests.dll #this is the markdown tests - **\UnitTests-PreviewHandlerCommon.dll - **\UnitTests-SvgPreviewHandler.dll - **\ImageResizer.Test.dll - **\powerpreviewTest.dll + **\Microsoft.PowerToys.Run.Plugin.System.UnitTests.dll !**\obj\** + # Native dlls - task: VSTest@2 - displayName: 'Run Native Tests' + displayName: 'Native Tests' inputs: platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)' @@ -135,4 +147,5 @@ steps: **\KeyboardManagerTest.dll **\UnitTests-CommonLib.dll **\PowerRenameUnitTests.dll + **\powerpreviewTest.dll !**\obj\** diff --git a/src/common/interop/interop-tests/Microsoft.Interop.Tests.csproj b/src/common/interop/interop-tests/Microsoft.Interop.Tests.csproj index 3dba484afe..2f07116d1d 100644 --- a/src/common/interop/interop-tests/Microsoft.Interop.Tests.csproj +++ b/src/common/interop/interop-tests/Microsoft.Interop.Tests.csproj @@ -53,8 +53,8 @@ - - + + diff --git a/src/modules/colorPicker/UnitTest-ColorPickerUI/UnitTest-ColorPickerUI.csproj b/src/modules/colorPicker/UnitTest-ColorPickerUI/UnitTest-ColorPickerUI.csproj index 598453a504..c03dd465a8 100644 --- a/src/modules/colorPicker/UnitTest-ColorPickerUI/UnitTest-ColorPickerUI.csproj +++ b/src/modules/colorPicker/UnitTest-ColorPickerUI/UnitTest-ColorPickerUI.csproj @@ -33,8 +33,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry.UnitTest/Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.csproj b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry.UnitTest/Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.csproj index c93b86dcc8..190eb9baf4 100644 --- a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry.UnitTest/Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.csproj +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry.UnitTest/Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.csproj @@ -34,8 +34,8 @@ - - + + diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System.UnitTests/ImageTests.cs b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System.UnitTests/ImageTests.cs index 33464e2809..24fd1037ec 100644 --- a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System.UnitTests/ImageTests.cs +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System.UnitTests/ImageTests.cs @@ -12,6 +12,7 @@ using Wox.Plugin; namespace Microsoft.PowerToys.Run.Plugin.System.UnitTests { + [TestFixture] public class ImageTests { [SetUp] diff --git a/src/modules/previewpane/PreviewPaneUnitTests/UnitTests-MarkdownPreviewHandler.csproj b/src/modules/previewpane/PreviewPaneUnitTests/UnitTests-MarkdownPreviewHandler.csproj index d9f77334fc..44d54fcd24 100644 --- a/src/modules/previewpane/PreviewPaneUnitTests/UnitTests-MarkdownPreviewHandler.csproj +++ b/src/modules/previewpane/PreviewPaneUnitTests/UnitTests-MarkdownPreviewHandler.csproj @@ -35,8 +35,8 @@ all - - + + diff --git a/src/modules/previewpane/UnitTests-PreviewHandlerCommon/UnitTests-PreviewHandlerCommon.csproj b/src/modules/previewpane/UnitTests-PreviewHandlerCommon/UnitTests-PreviewHandlerCommon.csproj index 105efe31a9..9177869175 100644 --- a/src/modules/previewpane/UnitTests-PreviewHandlerCommon/UnitTests-PreviewHandlerCommon.csproj +++ b/src/modules/previewpane/UnitTests-PreviewHandlerCommon/UnitTests-PreviewHandlerCommon.csproj @@ -29,8 +29,8 @@ - - + + diff --git a/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewControlTests.cs b/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewControlTests.cs index f81cc1f132..c9e0eef9aa 100644 --- a/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewControlTests.cs +++ b/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewControlTests.cs @@ -90,7 +90,7 @@ namespace SvgPreviewHandlerUnitTests } } - [TestMethod] + // ToDo: fix unit test public void SvgPreviewControlShouldSetScrollBarsEnabledPropertyWhenDoPreviewCalled() { // Arrange diff --git a/src/modules/previewpane/UnitTests-SvgPreviewHandler/UnitTests-SvgPreviewHandler.csproj b/src/modules/previewpane/UnitTests-SvgPreviewHandler/UnitTests-SvgPreviewHandler.csproj index c42fa64396..ceb7c48469 100644 --- a/src/modules/previewpane/UnitTests-SvgPreviewHandler/UnitTests-SvgPreviewHandler.csproj +++ b/src/modules/previewpane/UnitTests-SvgPreviewHandler/UnitTests-SvgPreviewHandler.csproj @@ -32,8 +32,8 @@ all - - + + diff --git a/src/modules/previewpane/UnitTests-SvgThumbnailProvider/UnitTests-SvgThumbnailProvider.csproj b/src/modules/previewpane/UnitTests-SvgThumbnailProvider/UnitTests-SvgThumbnailProvider.csproj index 802cbe32b8..ed72c5af1c 100644 --- a/src/modules/previewpane/UnitTests-SvgThumbnailProvider/UnitTests-SvgThumbnailProvider.csproj +++ b/src/modules/previewpane/UnitTests-SvgThumbnailProvider/UnitTests-SvgThumbnailProvider.csproj @@ -45,8 +45,8 @@ all - - + + all diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.UnitTests/Microsoft.PowerToys.Settings.UI.UnitTests.csproj b/src/settings-ui/Microsoft.PowerToys.Settings.UI.UnitTests/Microsoft.PowerToys.Settings.UI.UnitTests.csproj index a9b57204f2..875e95a3f6 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.UnitTests/Microsoft.PowerToys.Settings.UI.UnitTests.csproj +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.UnitTests/Microsoft.PowerToys.Settings.UI.UnitTests.csproj @@ -26,8 +26,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 81c19b4749a75222cabb22455523e40d70336a9e Mon Sep 17 00:00:00 2001 From: Andrey Nekrasov Date: Tue, 16 Mar 2021 19:40:57 +0300 Subject: [PATCH 18/82] [MSI] Do not use advertised icon (#10246) --- installer/PowerToysSetup/Product.wxs | 47 +++++++++++++++------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/installer/PowerToysSetup/Product.wxs b/installer/PowerToysSetup/Product.wxs index 066deba780..7c99a1d756 100644 --- a/installer/PowerToysSetup/Product.wxs +++ b/installer/PowerToysSetup/Product.wxs @@ -287,8 +287,10 @@ - - + + + + @@ -302,20 +304,7 @@ - - - - - - - - + @@ -326,11 +315,7 @@ - - - - @@ -356,6 +341,24 @@ + + + + + + + + + + + + @@ -757,6 +760,7 @@ INSTALLDESKTOPSHORTCUT + + @@ -921,7 +926,7 @@ - + From 013be4bbb8745dfc7cde51401e6a5b0b95deb521 Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Tue, 16 Mar 2021 14:28:55 -0700 Subject: [PATCH 19/82] adding vsconfig to main solution (#10169) * adding vsconfig * Update readme.md Tweaking instructions to remove script * docs tweak docs tweak * Update .vsconfig My machine was in a weird state because of this Co-authored-by: Deondre Davis --- .vsconfig | 15 ++++++++++++ doc/devdocs/readme.md | 55 ++++++++++++++++++------------------------- 2 files changed, 38 insertions(+), 32 deletions(-) create mode 100644 .vsconfig diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000000..1d21113eb1 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,15 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Component.CoreEditor", + "Microsoft.VisualStudio.Workload.CoreEditor", + "Microsoft.VisualStudio.Workload.NativeDesktop", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Workload.Universal", + "Microsoft.VisualStudio.Component.Windows10SDK.17134", + "Microsoft.VisualStudio.Component.Windows10SDK.18362", + "Microsoft.VisualStudio.ComponentGroup.UWP.VC", + "Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre", + "Microsoft.VisualStudio.Component.VC.ATL.Spectre" + ] +} \ No newline at end of file diff --git a/doc/devdocs/readme.md b/doc/devdocs/readme.md index 2734e8efd0..74419d2ae4 100644 --- a/doc/devdocs/readme.md +++ b/doc/devdocs/readme.md @@ -64,28 +64,7 @@ Various tools used by PowerToys. Includes the Visual Studio 2019 project templat 1. Windows 10 April 2018 Update (version 1803) or newer 2. Visual Studio Community/Professional/Enterprise 2019 -3. Run the command below in cmd/terminal to install all the workloads and components for VS. - -```shell -cd "%ProgramFiles(x86)%\Microsoft Visual Studio\2019" -SET targetFolder="\" -IF EXIST Preview\NUL (SET targetFolder=Preview) -IF EXIST Enterprise\NUL (SET targetFolder=Enterprise) -IF EXIST Professional\NUL (SET targetFolder=Professional) -IF EXIST Community\NUL (SET targetFolder=Community) - -ECHO %targetFolder% - -"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vs_installer.exe" ^ -modify --installpath "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\%targetFolder%" ^ ---add Microsoft.VisualStudio.Workload.NativeDesktop ^ ---add Microsoft.VisualStudio.Workload.ManagedDesktop ^ ---add Microsoft.VisualStudio.Workload.Universal ^ ---add Microsoft.VisualStudio.Component.Windows10SDK.17134 ^ ---add Microsoft.VisualStudio.ComponentGroup.UWP.VC ^ ---add Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre ^ ---add Microsoft.VisualStudio.Component.VC.ATL.Spectre -``` +3. Once you've cloned and started the `PowerToys.sln`, in the solution explorer, if you see a dialog that says `install extra components`, click `install` ### Compile source code @@ -101,25 +80,37 @@ Our installer is two parts, an EXE and an MSI. The EXE (Bootstrapper) contains The installer can only be compiled in `Release` mode, step 1 and 2 must be done before the MSI will be able to be compiled. -1. Compile PowerToys.sln. Instructions are listed above. -2. Compile Bug reporting tool. Path from root: `tools\BugReportTool\BugReportTool.sln` (details listed below) -3. Compile PowerToysSetup.sln Path from root: `installer\PowerToysSetup.sln` (details listed below) +1. Compile `PowerToys.sln`. Instructions are listed above. +2. Compile `BugReportTool.sln` tool. Path from root: `tools\BugReportTool\BugReportTool.sln` (details listed below) +3. Compile `PowerToysSetup.sln` Path from root: `installer\PowerToysSetup.sln` (details listed below) +4. Compile `PowerToysBootstrapper.sln` Path from root: `installer\PowerToysBootstrapper\PowerToysBootstrapper.sln` (details listed below) ### Prerequisites for building the MSI installer -1. Build `tools\BugReportTool\BugReportTool.sln`: in Visual Studio, in the `Solutions Configuration` drop-down menu select `Release`, from the `Build` menu choose `Build Solution`. -2. Install the [WiX Toolset Visual Studio 2019 Extension](https://marketplace.visualstudio.com/items?itemName=RobMensching.WiXToolset). -3. Install the [WiX Toolset build tools](https://wixtoolset.org/releases/). +1. Install the [WiX Toolset Visual Studio 2019 Extension](https://marketplace.visualstudio.com/items?itemName=RobMensching.WiXToolset). +2. Install the [WiX Toolset build tools](https://wixtoolset.org/releases/). + +### Locally compiling the Bug reporting tool + +1. Open `tools\BugReportTool\BugReportTool.sln` +1. In Visual Studio, in the `Solutions Configuration` drop-down menu select `Release` +2. From the `Build` menu, choose `Build Solution`. ### Locally compiling the .MSI installer -- Open `installer\PowerToysSetup.sln`: in Visual Studio, in the `Solutions Configuration` drop-down menu select `Release`, from the `Build` menu choose `Build Solution`. -- The resulting `PowerToysSetup.msi` installer will be available in the `installer\PowerToysSetup\x64\Release\` folder. +1. Open `installer\PowerToysSetup.sln` +2. In Visual Studio, in the `Solutions Configuration` drop-down menu select `Release` +3. From the `Build` menu choose `Build Solution`. + +The resulting `PowerToysSetup.msi` installer will be available in the `installer\PowerToysSetup\x64\Release\` folder. ### Locally compiling the .EXE Bootstrapper installer -- Open `installer\PowerToysBootstrapper\PowerToysBootstrapper.sln`: in Visual Studio, in the `Solutions Configuration` drop-down menu select `Release`, from the `Build` menu choose `Build Solution`. -- The `PowerToysSetup-0.0.1-x64.exe` binary is created in the `installer\PowerToysBootstrapper\x64\Release\` folder. +1. Open `installer\PowerToysBootstrapper\PowerToysBootstrapper.sln` +2. In Visual Studio, in the `Solutions Configuration` drop-down menu select `Release` +3. From the `Build` menu choose `Build Solution`. + +The `PowerToysSetup-0.0.1-x64.exe` binary is created in the `installer\PowerToysBootstrapper\x64\Release\` folder. #### Supported arguments for the .EXE Bootstrapper installer From 7c8ed9e2bbb11855d298b4c3eb94b95b5b9aacfa Mon Sep 17 00:00:00 2001 From: Andrey Nekrasov Date: Wed, 17 Mar 2021 12:16:47 +0300 Subject: [PATCH 20/82] [MSI installer] fix WIX build warnings (#10241) --- installer/PowerToysSetup/Product.wxs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/installer/PowerToysSetup/Product.wxs b/installer/PowerToysSetup/Product.wxs index 7c99a1d756..400d845ca0 100644 --- a/installer/PowerToysSetup/Product.wxs +++ b/installer/PowerToysSetup/Product.wxs @@ -103,7 +103,6 @@ @@ -922,15 +921,15 @@ - - - + + + From 535cd1f9ac80b9f9631dbe9dc9c5aa348e0b711b Mon Sep 17 00:00:00 2001 From: Andrey Nekrasov Date: Wed, 17 Mar 2021 16:49:07 +0300 Subject: [PATCH 21/82] [Auto-update] Turn off on Windows < 1903 (#10240) --- .../bootstrapper/Resources.resx | 3 +++ .../bootstrapper/bootstrapper.cpp | 14 +++++++++++--- src/common/updating/installer.cpp | 5 +++++ src/common/updating/installer.h | 2 ++ src/common/updating/updating.cpp | 15 +++++++++++++-- src/common/utils/os-detect.h | 2 +- src/common/version/helper.cpp | 11 +++++++++++ src/common/version/helper.h | 1 + 8 files changed, 47 insertions(+), 6 deletions(-) diff --git a/installer/PowerToysBootstrapper/bootstrapper/Resources.resx b/installer/PowerToysBootstrapper/bootstrapper/Resources.resx index 20df365c0f..0687da7399 100644 --- a/installer/PowerToysBootstrapper/bootstrapper/Resources.resx +++ b/installer/PowerToysBootstrapper/bootstrapper/Resources.resx @@ -158,4 +158,7 @@ A newer version is already installed. + + PowerToys requires Windows 10 version 1903 (May 2019 Update) or newer to run. + diff --git a/installer/PowerToysBootstrapper/bootstrapper/bootstrapper.cpp b/installer/PowerToysBootstrapper/bootstrapper/bootstrapper.cpp index 0cb98bd879..48aa8da473 100644 --- a/installer/PowerToysBootstrapper/bootstrapper/bootstrapper.cpp +++ b/installer/PowerToysBootstrapper/bootstrapper/bootstrapper.cpp @@ -152,8 +152,6 @@ int Bootstrapper(HINSTANCE hInstance) const auto installDirArg = cmdArgs["install_dir"].as(); const bool extract_msi_only = cmdArgs["extract_msi"].as(); - spdlog::level::level_enum severity = spdlog::level::off; - std::wstring installFolderProp; if (!installDirArg.empty()) { @@ -185,6 +183,7 @@ int Bootstrapper(HINSTANCE hInstance) { } + spdlog::level::level_enum severity = spdlog::level::off; if (logLevel == "debug") { severity = spdlog::level::debug; @@ -197,6 +196,16 @@ int Bootstrapper(HINSTANCE hInstance) SetupLogger(logDir, severity); spdlog::debug("PowerToys Bootstrapper is launched\nnoFullUI: {}\nsilent: {}\nno_start_pt: {}\nskip_dotnet_install: {}\nlog_level: {}\ninstall_dir: {}\nextract_msi: {}\n", noFullUI, g_Silent, noStartPT, skipDotnetInstall, logLevel, installDirArg, extract_msi_only); + const VersionHelper myVersion(VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION); + + // Do not support installing on Windows < 1903 + if (myVersion >= VersionHelper{0, 36, 0} && updating::is_old_windows_version()) + { + ShowMessageBoxError(IDS_OLD_WINDOWS_ERROR); + spdlog::error("PowerToys {} requires at least Windows 1903 to run.", myVersion.toString()); + return 1; + } + // If a user requested an MSI -> extract it and exit if (extract_msi_only) { @@ -212,7 +221,6 @@ int Bootstrapper(HINSTANCE hInstance) } // Check if there's a newer version installed - const VersionHelper myVersion(VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION); const auto installedVersion = updating::get_installed_powertoys_version(); if (installedVersion && *installedVersion >= myVersion) { diff --git a/src/common/updating/installer.cpp b/src/common/updating/installer.cpp index 8ca50d1ece..fd5c7574c1 100644 --- a/src/common/updating/installer.cpp +++ b/src/common/updating/installer.cpp @@ -3,6 +3,7 @@ #include "installer.h" #include #include +#include #include "utils/winapi_error.h" namespace // Strings in this namespace should not be localized @@ -192,4 +193,8 @@ namespace updating co_return false; } + bool is_old_windows_version() + { + return !Is19H1OrHigher(); + } } \ No newline at end of file diff --git a/src/common/updating/installer.h b/src/common/updating/installer.h index 27d886243c..5263fe4e3e 100644 --- a/src/common/updating/installer.h +++ b/src/common/updating/installer.h @@ -16,4 +16,6 @@ namespace updating std::optional get_installed_powertoys_version(); std::future uninstall_previous_msix_version_async(); + + bool is_old_windows_version(); } \ No newline at end of file diff --git a/src/common/updating/updating.cpp b/src/common/updating/updating.cpp index 601ea0d0e9..50fc765896 100644 --- a/src/common/updating/updating.cpp +++ b/src/common/updating/updating.cpp @@ -7,9 +7,10 @@ #include "notifications.h" #include "updating.h" -#include -#include #include +#include +#include +#include namespace // Strings in this namespace should not be localized { @@ -68,12 +69,17 @@ namespace updating { co_return nonstd::make_unexpected(strings.GITHUB_NEW_VERSION_USING_LOCAL_BUILD_ERROR); } + try { http::HttpClient client; json::JsonObject release_object; const VersionHelper current_version(VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION); VersionHelper github_version = current_version; + + // On a <1903 system, block updates to 0.36+ + const bool blockNonPatchReleases = current_version.major == 0 && current_version.minor == 35 && !Is19H1OrHigher(); + if (prerelease) { const auto body = co_await client.request(Uri{ ALL_RELEASES_ENDPOINT }); @@ -102,6 +108,11 @@ namespace updating } } + if (blockNonPatchReleases && github_version >= VersionHelper{ 0, 36, 0 }) + { + co_return version_up_to_date{}; + } + if (github_version <= current_version) { co_return version_up_to_date{}; diff --git a/src/common/utils/os-detect.h b/src/common/utils/os-detect.h index 6fad87a9b3..888c5a37ac 100644 --- a/src/common/utils/os-detect.h +++ b/src/common/utils/os-detect.h @@ -2,7 +2,7 @@ #include -// The following three helper functions determine if the user has a build version higher than or equal to 19h1, as that is a requirement for xaml islands +// The following three helper functions determine if the user has a build version higher than or equal to 19h1 (aka 1903), as that is a requirement for xaml islands // Source : Microsoft-ui-xaml github // Link: https://github.com/microsoft/microsoft-ui-xaml/blob/c045cde57c5c754683d674634a0baccda34d58c4/dev/dll/SharedHelpers.cpp template diff --git a/src/common/version/helper.cpp b/src/common/version/helper.cpp index 12ca48f8d5..0e1b477126 100644 --- a/src/common/version/helper.cpp +++ b/src/common/version/helper.cpp @@ -39,3 +39,14 @@ std::wstring VersionHelper::toWstring() const result += std::to_wstring(revision); return result; } + +std::string VersionHelper::toString() const +{ + std::string result{ "v" }; + result += std::to_string(major); + result += '.'; + result += std::to_string(minor); + result += '.'; + result += std::to_string(revision); + return result; +} diff --git a/src/common/version/helper.h b/src/common/version/helper.h index 9d3a24c571..1f91958b6f 100644 --- a/src/common/version/helper.h +++ b/src/common/version/helper.h @@ -15,4 +15,5 @@ struct VersionHelper size_t revision; std::wstring toWstring() const; + std::string toString() const; }; From 72d92413a2d7c88e3b63e3fcc5963f70eb1c3d3a Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Wed, 17 Mar 2021 14:27:30 -0400 Subject: [PATCH 22/82] Upgrade check-spelling to 0.0.17-alpha (#10173) * spelling: snapped Signed-off-by: Josh Soref * spelling: split Signed-off-by: Josh Soref * ci: update to Spell check to 0.0.17a In the past, plurals `foo`+`s` and past tenses `foo`+`ed` were automatically tolerated. This turned out to be a bad design choice on my part. The basic example is that `potatos` would sometimes be treated as a mistake and sometimes not (depending on the presence of `potato`). You can see in this PR, that this logic resulted in `SNAPED` being accepted as a word along with `actioned` -- there's nothing intrinsically wrong w/ the latter, but unfortunately in order to screen out the former, my shortcut just couldn't stick around. This means that the `expect` files will grow perhaps by a tiny bit, but as you can see, not really by much. When GitHub initially introduced GitHub Actions, the event for `pull_request` was created without enough permission for a tool like this to work properly. I worked around that by using the `schedule` event. In 2020, they introduced a replacement event `pull_request_target` which has enough permission. This means that I can stop relying on the `schedule` event. --- .github/actions/spell-check/excludes.txt | 18 ++- .github/actions/spell-check/expect.txt | 126 ++++-------------- .github/actions/spell-check/patterns.txt | 20 ++- .github/workflows/spelling.yml | 22 +-- src/modules/launcher/Wox.Plugin/Query.cs | 4 +- src/modules/shortcut_guide/overlay_window.cpp | 36 ++--- 6 files changed, 88 insertions(+), 138 deletions(-) diff --git a/.github/actions/spell-check/excludes.txt b/.github/actions/spell-check/excludes.txt index 22c9a4820c..f67ef73b90 100644 --- a/.github/actions/spell-check/excludes.txt +++ b/.github/actions/spell-check/excludes.txt @@ -1,3 +1,13 @@ +# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes +(?:^|/)(?i)COPYRIGHT +(?:^|/)(?i)LICEN[CS]E +(?:^|/)package(?:-lock)\.json$ +(?:^|/)vendor/ +/package(?:-lock|)\.json$ +/pinyindb/ +/settings-html/ +ignore$ +[/.][a-z]{2}(?:-[a-zA-Z]{2}|)\. \.ai$ \.bmp$ \.dat$ @@ -7,13 +17,13 @@ \.ico$ \.jpg$ \.lcl$ +\.lock$ +\.min\. +\.mod$ \.pdf$ \.png$ \.PNG$ \.woff$ \.zip$ +^\.github/ ^\.github/actions/spell-check/ -/package(?:-lock|)\.json$ -/pinyindb/ -/settings-html/ -[/.][a-z]{2}(?:-[a-zA-Z]{2}|)\. diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index 7d0d417e86..436038accd 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -3,13 +3,10 @@ AAD abcd abcdef abcdefgh -ABCDEFGHIJKLMNOPQRSTUVWXYZ abgr ABlocked Abug -acb accctrl -accd Acceleratorkeys ACCEPTFILES accessibile @@ -20,13 +17,14 @@ AColumn acos acrt Actioncenter +actioned activatable ACTIVATEAPP -activationaction Addavirtualdesktop Addins ADDUNDORECORD ADifferent +ADMINS adopsinsider advapi advfirewall @@ -53,7 +51,6 @@ AMirror AModifier anges ansicolor -ansicpg antialiased ANull AOC @@ -121,7 +118,6 @@ aumid AUTHN AUTOAPPEND autocomplete -autogenerated autogenerates AUTOHIDE AUTOMATIONPROPERTIES @@ -131,18 +127,14 @@ autoupdate AValid azurecr azurewebsites -baae -baccda backend backtracer bak -bbe bbwe bc bcc bck Bcl -bddac BEGINLABELEDIT betadele betsegaw @@ -172,6 +164,7 @@ bms BNumber Bokm BOKMAL +Bools bootstrapper BOTTOMALIGN BPBF @@ -181,7 +174,6 @@ bricelam BRIGHTGREEN Browsable bsd -BSODs bstr BText bti @@ -203,7 +195,6 @@ Captureascreenshot CAPTURECHANGED CASESENSITIVE CAtl -cbfbad CCDDEE ccf cch @@ -211,15 +202,12 @@ CCom CContext CDATA CDBECF -cde cdecl CDeclaration cdpx cdpxwin CENTERALIGN cfg -changecursor -Changemove charconv charset chdir @@ -238,7 +226,6 @@ chrono chrzan CHT CImage -cimv cinttypes cla clangformat @@ -262,12 +249,12 @@ CMDARG cmder Cmdlet cmdline +Cmds CMIC CMINVOKECOMMANDINFO CMINVOKECOMMANDINFOEX CMock CMONITORS -cmpr cmyk cn cnt @@ -275,13 +262,10 @@ coclass codebase codecvt codeofconduct -codeql codereview Codespaces COINIT colorconv -colorhistory -colorhistorylimit colorpicker colorpickerref COLORREF @@ -318,7 +302,6 @@ CONTROLL CONTROLPARENT Controlz coords -copiedcolorrepresentation COPYDATASTRUCT corehr cortana @@ -348,7 +331,6 @@ critsec crlf CRM crmcustomerinsightsapp -cron CRSEL crutkas CSearch @@ -371,12 +353,12 @@ ctime CTLCOLORSTATIC ctor CTRLALTDEL +Ctrls Ctx CUI currentculture CURSORINFO cursorpos -customaction CUSTOMACTIONTEST cvd cw @@ -428,8 +410,6 @@ DEFAULTTONEAREST DEFAULTTONULL DEFAULTTOPRIMARY DEFERERASE -deff -deflang DEFPUSHBUTTON deinitialization DELA @@ -454,7 +434,6 @@ DEU Devagya devblogs devdocs -devenv df DFactory Dialpad @@ -555,7 +534,7 @@ EBE EBEC EBEE EBEF -ebf +EBF EBFC ECAA ECAB @@ -568,6 +547,7 @@ ECDC ECDE ECDF ECEB +ECED ECEE ecef ECFE @@ -628,7 +608,7 @@ EFBA EFC EFDA EFDE -efe +EFE EFEB EFFC EFFE @@ -647,6 +627,7 @@ endregion Enque ENTERSIZEMOVE Entireitemname +Entitlements entrypoint ENU enum @@ -664,7 +645,6 @@ ERRORTITLE esize estdir etcore -etcoreapp etl etw EUQ @@ -711,12 +691,9 @@ FANCYZONESEDITOR Farbraum FARPROC Favicon -fcharset fd -fda feimage ffcd -ffd FFDDDDDD fff figcaption @@ -741,13 +718,11 @@ Fle fluentui flyout fmtlib -fnil fody FOF FOFX FOLDERID folderpath -fonttbl FORCEOFFLINE foreach formatetc @@ -776,8 +751,6 @@ gdi gdiplus GDISCALED generatesqlfromuserquery -getancestor -getasynckeystate GETDISPINFO GETDLGCODE GETEMPTYMARKUP @@ -806,7 +779,6 @@ GUITHREADINFO GValue gwl GWLP -gwmi HACCEL hangeul hanja @@ -921,7 +893,6 @@ IComparer ICONERROR ICONINFORMATION ICONQUESTION -Iconsempty Iconset IContext ICONWARNING @@ -971,7 +942,6 @@ Iindex IInitialize IInput IInspectable -IIO IItem IJson IList @@ -979,7 +949,6 @@ ILogon IMAGEHLP imageresizer IMAGERESIZEREXT -imageresizersettings IMain IMarkdown ime @@ -1010,7 +979,6 @@ inout INPC inprivate inproc -inputdev INPUTHARDWARE INPUTKEYBOARD INPUTLANGCHANGED @@ -1054,7 +1022,6 @@ IPlugin IPower ipp IPreview -ipreviewhandler ipreviewhandlertranslateaccelerator ipreviewhandlervisualssetfont IPrincipal @@ -1079,7 +1046,6 @@ IShell ISingle ismethod isocpp -issuecomment IStorage IStream istreambuf @@ -1095,7 +1061,6 @@ ith IThrottled IThumbnail ITrigger -itsme IUI IUnknown IUri @@ -1112,7 +1077,6 @@ IZoom JArray jarro Jarryd -javascript jfif jgeosdfsdsgmkedfgdfgdfgbkmhcgcflmi jjw @@ -1123,7 +1087,6 @@ jpeg jpg JPN json -JSONOf jsonval jsx junja @@ -1268,6 +1231,7 @@ LVHT LVIF LVIS LVN +LVS LVSIL LWA lwin @@ -1309,7 +1273,6 @@ Mensching menuitem MENUITEMINFO MENUITEMINFOW -menurc messagebox messageboxes METACHARSET @@ -1363,7 +1326,7 @@ msclr mscoree mscorlib msdata -msdn +MSDN msedge mshtmdid msi @@ -1415,7 +1378,7 @@ NCMBUTTONDOWN NCMBUTTONUP NCMOUSELEAVE NCMOUSEMOVE -ncol +NCol NCPAINT NCRBUTTONDBLCLK NCRBUTTONDOWN @@ -1427,7 +1390,6 @@ NESW netcore netcoreapp netframework -NETFX netsh netstandard Neue @@ -1435,8 +1397,7 @@ newcolor newitem newpath newrow -newtonsoft -nf +Newtonsoft niels nielslaute NIF @@ -1497,7 +1458,6 @@ npmjs npos NResize ntdll -NTFS NTSTATUS nuget nullopt @@ -1528,9 +1488,7 @@ oldpath oldtheme oleaut OLECHAR -oledb -oledbcommand -oledbconnection +OLEDB OLIVEGREEN OLogo Onboarding @@ -1555,15 +1513,12 @@ ostringstream OSVERSIONINFOEXW osx otating -ouicompat OUTOFCONTEXT OUTOFMEMORY Outptr outro -outsettings OVERLAPPEDWINDOW overlaywindow -owidctlpar OWNDC PACL PAINTSTRUCT @@ -1580,7 +1535,6 @@ PARENTRELATIVEPARSING parray PARTIALCONFIRMATIONDIALOGTITLE pathcch -pavelzw pb pbc Pbgra @@ -1671,7 +1625,7 @@ PREMULTIPLIED prevhost previewer PREVIEWGROUP -previewhandlerframeinfo +PREVIEWHANDLERFRAMEINFO previewpane PREVIOUSVERSIONSINSTALLED prevpane @@ -1681,7 +1635,6 @@ PRINTCLIENT printf Printfax prm -proactively PROCESSKEY PRODUCTVERSION Progman @@ -1728,10 +1681,8 @@ qianlifeng qit QITAB QITABENT -qryidx Queryable QUERYENDSESSION -queryfocus QUERYOPEN QUEUESYNC qwertyuiopasdfghjklzxcvbnm @@ -1759,6 +1710,7 @@ READWRITE RECTDESTINATION RECTL rectp +rects recyclebin redirectedfrom refactor @@ -1794,16 +1746,15 @@ rescap resgen resheader Resizable +resizers resmimetype RESOURCEID -resourcemanager RESTORESIZE RESTORETOMAXIMIZED restrictedcapabilities resultlist resw resx -returnvalue retval rexit rfind @@ -1815,7 +1766,6 @@ Rgn rgs rhs ricardosantos -Riched Richtext RIGHTSCROLLBAR riid @@ -1864,7 +1814,6 @@ SAMESHORTCUTPREVIOUSLYMAPPED SAVEFAILED scancode scanled -Schd Scn SCOPEID screenshot @@ -1876,15 +1825,12 @@ sdk SDKDDK searchbox SEARCHFOR -searchqueryhelper SEARCHREPLACEGROUP searchterm Secur -securityoverview -segoe +Segoe Sekan SENDCHANGE -sendinput sendvirtualinput serializationexception serializer @@ -1896,7 +1842,6 @@ SETFOCUS SETFOREGROUND SETICON setlocal -setnt SETRANGE Setrect SETREDRAW @@ -1905,10 +1850,8 @@ SETTEXT SETTINGCHANGE settingsheader settingshotkeycontrol -settingsui settingsv Setttings -setwindowpos SETWORKAREA sfgao SFGAOF @@ -1941,18 +1884,15 @@ SHORTCUTSTARTWITHMODIFIER Shortcuttool shortdate SHORTPATH -showcolorname SHOWDEFAULT SHOWELEVATIONPROMPT SHOWMAXIMIZED SHOWMINIMIZED SHOWNA SHOWNORMAL -showwindow +SHOWWINDOW shtypes sid -sideload -sideloading sidepanel siex SIGABRT @@ -1983,7 +1923,7 @@ sln SLogo SMALLICON SMTO -snd +Snd somil SORTDOWN SOURCECLIENTAREAONLY @@ -1994,7 +1934,6 @@ spdth spec'ing spesi spinbuttonref -splitee splitwstring spoprod spsi @@ -2028,7 +1967,7 @@ STARTUPINFOEX STARTUPINFOW startupscreen STATEIMAGEMASK -statflag +STATFLAG STATICEDGE STATSTG stdafx @@ -2095,10 +2034,9 @@ SYSCOLORCHANGE SYSCOMMAND SYSDEADCHAR SYSICONINDEX -sysinfo SYSKEY syskeydown -syskeyup +SYSKEYUP syslog SYSMENU systemd @@ -2130,7 +2068,6 @@ tcscpy TCustom td TDevice -technet Telemarketer Templated templatenamespace @@ -2145,7 +2082,6 @@ textblock textbox TEXTINCLUDE textref -tf TFVC tga thead @@ -2171,7 +2107,6 @@ toggleref toggleright toggleswitch toolbar -Toolchain toolset tooltip toolwindow @@ -2184,7 +2119,6 @@ towupper tracelogging traies TRAYMOUSEMESSAGE -TRCA TRK trl truetype @@ -2210,10 +2144,8 @@ Tz UAC UAL uap -ubuntu udit UIA -uiauto Uid uifabric uifabricicons @@ -2261,7 +2193,6 @@ unremapped unsubscribe Unsync Untag -upd Updatelayout UPDOWNKEYDROPSLIST UPGRADINGPRODUCTCODE @@ -2311,17 +2242,14 @@ VFT vh vid viewbox -viewkind viewmodel virtualization -visiblecolorformats Visibletrue Visio visualbrush visualstudio vk VKey -VKTAB vm vmax vmin @@ -2359,7 +2287,6 @@ wcslen wcsncmp wcsnicmp wdp -wds wdupenv weakme webapp @@ -2383,7 +2310,6 @@ wikipedia wil wildcards winapi -winauto wincolor windef windevbuildagents @@ -2408,7 +2334,6 @@ Winhook winkey WINL winmd -winmsg winnt winres winrt @@ -2417,8 +2342,6 @@ winsdkver winspool winstore winui -winuser -winver winxamlmanager withinrafael Withscript @@ -2454,7 +2377,6 @@ wprintf wprp wregex WResize -wrl wsf wsh wsl @@ -2465,7 +2387,6 @@ wstringstream wsz WTS WTSAT -wtypes wu Wwan www @@ -2476,7 +2397,6 @@ xaml XAngle XAttribute xbf -XBind XBUTTON XBUTTONDBLCLK XBUTTONDOWN @@ -2502,7 +2422,7 @@ XStr XToolset xunit XY -yaml +Yaml YAngle YDiff YESNO diff --git a/.github/actions/spell-check/patterns.txt b/.github/actions/spell-check/patterns.txt index feea6756e0..385cda1c05 100644 --- a/.github/actions/spell-check/patterns.txt +++ b/.github/actions/spell-check/patterns.txt @@ -1,11 +1,25 @@ +# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns https?://(?:(?:www\.|)youtube\.com|youtu.be)/[-a-zA-Z0-9?&=]* +# GitHub SHAs +\bapi.github\.com/repos/[^/]+/[^/]+/[^/]+/[0-9a-f]+\b ://github\.(?:com|blog)/[^\w")]+ +(?:\[[0-9a-f]+\]\(https:/|)/github\.com/[^/]+/[^/]+/[^/]+/[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b +# githubusercontent ://githubusercontent\.com/[^\w")]+ +# gist github +/gist\.github\.com/[^/]+/[0-9a-f]+ + +# msdn +\b(?:download\.visualstudio|docs|msdn)\.microsoft\.com/[-_a-zA-Z0-9()=./]* + data:[a-zA-Z=;,/0-9+-]+ 0x[0-9a-fA-F](?:\.[0-9a-fA-F]*|)[pP] (?:0[Xx]|U\+|#)[a-f0-9A-FGgRr]{2,}[Uu]?[Ll]{0,2}\b -[{"][0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}"] -\b([A-Za-z])\1{3,}\b +# uuid: +[-<({"'>][0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[<'"})>] + +# ignore long runs of a single character: +\b([A-Za-z])\g{-1}{3,}\b (?:L"[abAB]+", ){3}L"[abAB]+" "Lorem[^"]+?\." TestCase\("[^"]+" @@ -45,3 +59,5 @@ TestCase\("[^"]+" # marker for ignoring a comment to the end of the line ^.*/\* #no-spell-check-line \*/.*$ // #no-spell-check.*$ + +http://tes/ diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml index 3174c7c1dd..e1a4335cbb 100644 --- a/.github/workflows/spelling.yml +++ b/.github/workflows/spelling.yml @@ -1,20 +1,24 @@ name: Spell checking on: + pull_request_target: push: - schedule: - # * is a special character in YAML so you have to quote this string - - cron: '15 * * * *' jobs: build: name: Spell checking runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2.0.0 + - name: checkout-merge + if: "contains(github.event_name, 'pull_request')" + uses: actions/checkout@v2.0.0 + with: + ref: refs/pull/${{github.event.pull_request.number}}/merge + fetch-depth: 5 + - name: checkout + if: "!contains(github.event_name, 'pull_request')" + uses: actions/checkout@v2.0.0 with: fetch-depth: 5 - - uses: check-spelling/check-spelling@0.0.16-alpha - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - bucket: .github/actions - project: spell-check + - uses: check-spelling/check-spelling@0.0.17-alpha + with: + config: .github/actions/spell-check diff --git a/src/modules/launcher/Wox.Plugin/Query.cs b/src/modules/launcher/Wox.Plugin/Query.cs index 99d850ebaa..99c2965ae4 100644 --- a/src/modules/launcher/Wox.Plugin/Query.cs +++ b/src/modules/launcher/Wox.Plugin/Query.cs @@ -68,7 +68,7 @@ namespace Wox.Plugin private ReadOnlyCollection _terms; ///

- /// Gets the raw query splited into a string array. + /// Gets the raw query split into a string array. /// public ReadOnlyCollection Terms { @@ -89,7 +89,7 @@ namespace Wox.Plugin } /// - /// Query can be splited into multiple terms by whitespace + /// Query can be split into multiple terms by whitespace /// public const string TermSeparator = " "; diff --git a/src/modules/shortcut_guide/overlay_window.cpp b/src/modules/shortcut_guide/overlay_window.cpp index 4e04af5459..0d07c4c191 100644 --- a/src/modules/shortcut_guide/overlay_window.cpp +++ b/src/modules/shortcut_guide/overlay_window.cpp @@ -32,12 +32,12 @@ namespace UNKNOWN, MINIMIZED, MAXIMIZED, - SNAPED_TOP_LEFT, - SNAPED_LEFT, - SNAPED_BOTTOM_LEFT, - SNAPED_TOP_RIGHT, - SNAPED_RIGHT, - SNAPED_BOTTOM_RIGHT, + SNAPPED_TOP_LEFT, + SNAPPED_LEFT, + SNAPPED_BOTTOM_LEFT, + SNAPPED_TOP_RIGHT, + SNAPPED_RIGHT, + SNAPPED_BOTTOM_RIGHT, RESTORED }; @@ -78,17 +78,17 @@ namespace bool bottom_right = monitor.rcWork.bottom == rect.bottom && monitor.rcWork.right == rect.right; if (top_left && bottom_left) - return SNAPED_LEFT; + return SNAPPED_LEFT; if (top_left) - return SNAPED_TOP_LEFT; + return SNAPPED_TOP_LEFT; if (bottom_left) - return SNAPED_BOTTOM_LEFT; + return SNAPPED_BOTTOM_LEFT; if (top_right && bottom_right) - return SNAPED_RIGHT; + return SNAPPED_RIGHT; if (top_right) - return SNAPED_TOP_RIGHT; + return SNAPPED_TOP_RIGHT; if (bottom_right) - return SNAPED_BOTTOM_RIGHT; + return SNAPPED_BOTTOM_RIGHT; return RESTORED; } @@ -900,37 +900,37 @@ void D2DOverlayWindow::render(ID2D1DeviceContext5* d2d_dc) up_disabled = true; down = GET_RESOURCE_STRING(IDS_RESTORE); break; - case SNAPED_TOP_LEFT: + case SNAPPED_TOP_LEFT: left = GET_RESOURCE_STRING(IDS_SNAP_UPPER_RIGHT); right = GET_RESOURCE_STRING(IDS_SNAP_UPPER_RIGHT); up = GET_RESOURCE_STRING(IDS_MAXIMIZE); down = GET_RESOURCE_STRING(IDS_SNAP_LEFT); break; - case SNAPED_LEFT: + case SNAPPED_LEFT: left = GET_RESOURCE_STRING(IDS_SNAP_RIGHT); right = GET_RESOURCE_STRING(IDS_RESTORE); up = GET_RESOURCE_STRING(IDS_SNAP_UPPER_LEFT); down = GET_RESOURCE_STRING(IDS_SNAP_LOWER_LEFT); break; - case SNAPED_BOTTOM_LEFT: + case SNAPPED_BOTTOM_LEFT: left = GET_RESOURCE_STRING(IDS_SNAP_LOWER_RIGHT); right = GET_RESOURCE_STRING(IDS_SNAP_LOWER_RIGHT); up = GET_RESOURCE_STRING(IDS_SNAP_LEFT); down = GET_RESOURCE_STRING(IDS_MINIMIZE); break; - case SNAPED_TOP_RIGHT: + case SNAPPED_TOP_RIGHT: left = GET_RESOURCE_STRING(IDS_SNAP_UPPER_LEFT); right = GET_RESOURCE_STRING(IDS_SNAP_UPPER_LEFT); up = GET_RESOURCE_STRING(IDS_MAXIMIZE); down = GET_RESOURCE_STRING(IDS_SNAP_RIGHT); break; - case SNAPED_RIGHT: + case SNAPPED_RIGHT: left = GET_RESOURCE_STRING(IDS_RESTORE); right = GET_RESOURCE_STRING(IDS_SNAP_LEFT); up = GET_RESOURCE_STRING(IDS_SNAP_UPPER_RIGHT); down = GET_RESOURCE_STRING(IDS_SNAP_LOWER_RIGHT); break; - case SNAPED_BOTTOM_RIGHT: + case SNAPPED_BOTTOM_RIGHT: left = GET_RESOURCE_STRING(IDS_SNAP_LOWER_LEFT); right = GET_RESOURCE_STRING(IDS_SNAP_LOWER_LEFT); up = GET_RESOURCE_STRING(IDS_SNAP_RIGHT); From cc38d42bf9cf510c93f08e3e6f1a0f966c32e25d Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Wed, 17 Mar 2021 15:45:12 -0700 Subject: [PATCH 23/82] Adjustments for editor to make langauge more clear for how to interact with editor. (#10298) --- .../FancyZonesEditor/GridEditorWindow.xaml | 23 +++++++--- .../Properties/Resources.Designer.cs | 46 +++++++++++++++---- .../Properties/Resources.resx | 20 ++++++-- 3 files changed, 69 insertions(+), 20 deletions(-) diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/GridEditorWindow.xaml b/src/modules/fancyzones/editor/FancyZonesEditor/GridEditorWindow.xaml index eba84aadcc..b816c73d6b 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/GridEditorWindow.xaml +++ b/src/modules/fancyzones/editor/FancyZonesEditor/GridEditorWindow.xaml @@ -35,12 +35,23 @@ Margin="0,4,0,0" /> - - + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs index 7e6b14a20e..4c2b446366 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs @@ -501,6 +501,24 @@ namespace FancyZonesEditor.Properties { } } + /// + /// Looks up a localized string similar to Click and drag across zones.. + /// + public static string MergeDescription { + get { + return ResourceManager.GetString("MergeDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Merge/Delete:. + /// + public static string MergeName { + get { + return ResourceManager.GetString("MergeName", resourceCulture); + } + } + /// /// Looks up a localized string similar to Monitor. /// @@ -528,16 +546,6 @@ namespace FancyZonesEditor.Properties { } } - /// - /// Looks up a localized string similar to Hold down Shift key to change orientation of splitter. - ///To merge zones, select the zones and click "merge".. - /// - public static string Note_Custom_Table { - get { - return ResourceManager.GetString("Note_Custom_Table", resourceCulture); - } - } - /// /// Looks up a localized string similar to Number of zones. /// @@ -601,6 +609,24 @@ namespace FancyZonesEditor.Properties { } } + /// + /// Looks up a localized string similar to Hold Shift key for vertical split.. + /// + public static string SplitterDescription { + get { + return ResourceManager.GetString("SplitterDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Splitter:. + /// + public static string SplitterName { + get { + return ResourceManager.GetString("SplitterName", resourceCulture); + } + } + /// /// Looks up a localized string similar to No layout. /// diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx index 46f43279ab..9a08373776 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx @@ -159,10 +159,6 @@ Name - - Hold down Shift key to change orientation of splitter. -To merge zones, hold down the left mouse button, drag the mouse to the zone to merge, release the mouse button and click "Merge zones". - Save & apply @@ -334,4 +330,20 @@ To merge zones, hold down the left mouse button, drag the mouse to the zone to m Custom layout + + Click and drag across zones. + Click mouse, hold button down and drag across multiple zones in tool + + + Merge/Delete: + Title for concept behind Merging two zones together or removing an zone + + + Hold Shift key for vertical split. + A segmenter visual for splitting one item into two. This would be the vertical line. Shift key is referring to key on keyboard + + + Splitter: + Title for concept: A segmenter visual for splitting one item into two. This would be the vertical line + \ No newline at end of file From fa5ce634e12c5d337ed6a6d379321376fa5a4e63 Mon Sep 17 00:00:00 2001 From: Enrico Giordani Date: Thu, 18 Mar 2021 14:24:48 +0100 Subject: [PATCH 24/82] [msi] enable telemetry on build farm (#10309) --- .../PowerToysSetupCustomActions.vcxproj | 1 + .../Telemetry/ProjectTelemetry.h | 6 ------ .../Telemetry/TraceLoggingDefines.h | 6 ------ 3 files changed, 1 insertion(+), 12 deletions(-) delete mode 100644 installer/PowerToysSetupCustomActions/Telemetry/ProjectTelemetry.h delete mode 100644 installer/PowerToysSetupCustomActions/Telemetry/TraceLoggingDefines.h diff --git a/installer/PowerToysSetupCustomActions/PowerToysSetupCustomActions.vcxproj b/installer/PowerToysSetupCustomActions/PowerToysSetupCustomActions.vcxproj index 60bc4d22b8..dde59dc0f8 100644 --- a/installer/PowerToysSetupCustomActions/PowerToysSetupCustomActions.vcxproj +++ b/installer/PowerToysSetupCustomActions/PowerToysSetupCustomActions.vcxproj @@ -48,6 +48,7 @@ false $(Platform)\$(Configuration)\ $(SolutionDir)$(ProjectName)\$(Platform)\$(Configuration)\obj\ + ..\..\src\common\Telemetry;$(IncludePath) diff --git a/installer/PowerToysSetupCustomActions/Telemetry/ProjectTelemetry.h b/installer/PowerToysSetupCustomActions/Telemetry/ProjectTelemetry.h deleted file mode 100644 index 1289d69201..0000000000 --- a/installer/PowerToysSetupCustomActions/Telemetry/ProjectTelemetry.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -#include -#include - -TRACELOGGING_DECLARE_PROVIDER(g_hProvider); diff --git a/installer/PowerToysSetupCustomActions/Telemetry/TraceLoggingDefines.h b/installer/PowerToysSetupCustomActions/Telemetry/TraceLoggingDefines.h deleted file mode 100644 index 2543208f02..0000000000 --- a/installer/PowerToysSetupCustomActions/Telemetry/TraceLoggingDefines.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -#define TraceLoggingOptionProjectTelemetry() TraceLoggingOptionGroup(0x42749043, 0x438c, 0x46a2, 0x82, 0xbe, 0xc6, 0xcb, 0xeb, 0x19, 0x2f, 0xf2) -#define ProjectTelemetryPrivacyDataTag(tag) TraceLoggingUInt64((tag), "Ignore") -#define ProjectTelemetryTag_ProductAndServicePerformance 0x0u -#define PROJECT_KEYWORD_MEASURE 0x0 From 7c28459673b0733e49cc7c44f519e59e65477e5e Mon Sep 17 00:00:00 2001 From: Andrey Nekrasov Date: Thu, 18 Mar 2021 17:14:37 +0300 Subject: [PATCH 25/82] [Settings] Fix HTML settings build (#10307) --- installer/PowerToysSetup/Product.wxs | 4 + src/settings-web/index-dark.html | 1 + src/settings-web/index.html | 1 + src/settings-web/package-lock.json | 850 +++++++++++++++++- src/settings-web/package.json | 7 +- src/settings-web/src/components/App.tsx | 1 - src/settings-web/webpack.config.js | 4 +- src/settings/settings-html/dist/bundle.js | 33 +- .../settings-html/dist/bundle.js.LICENSE.txt | 32 + src/settings/settings-html/dist/layout.css | 63 ++ src/settings/settings-html/index-dark.html | 4 +- src/settings/settings-html/index.html | 4 +- 12 files changed, 939 insertions(+), 65 deletions(-) create mode 100644 src/settings/settings-html/dist/bundle.js.LICENSE.txt create mode 100644 src/settings/settings-html/dist/layout.css diff --git a/installer/PowerToysSetup/Product.wxs b/installer/PowerToysSetup/Product.wxs index 400d845ca0..a2ef49be5a 100644 --- a/installer/PowerToysSetup/Product.wxs +++ b/installer/PowerToysSetup/Product.wxs @@ -754,6 +754,9 @@ + + + @@ -814,6 +817,7 @@ + diff --git a/src/settings-web/index-dark.html b/src/settings-web/index-dark.html index b3aab7880c..1ce7403c7d 100644 --- a/src/settings-web/index-dark.html +++ b/src/settings-web/index-dark.html @@ -1,6 +1,7 @@ + PowerToys Settings
PowerToys General Settings
\ No newline at end of file + window.start_with_dark_theme = true;PowerToys Settings
PowerToys General Settings
\ No newline at end of file diff --git a/src/settings/settings-html/index.html b/src/settings/settings-html/index.html index b99d2e30e4..4dc946c8a5 100644 --- a/src/settings/settings-html/index.html +++ b/src/settings/settings-html/index.html @@ -1,4 +1,4 @@ -PowerToys Settings
PowerToys General Settings
\ No newline at end of file + }PowerToys Settings
PowerToys General Settings
\ No newline at end of file From 69d293790a4c6f800b155bcc3ba764c9d94608ff Mon Sep 17 00:00:00 2001 From: Enrico Giordani Date: Thu, 18 Mar 2021 16:55:01 +0100 Subject: [PATCH 26/82] [msi] add version number in telemetry events (#10312) --- installer/PowerToysSetupCustomActions/CustomAction.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/installer/PowerToysSetupCustomActions/CustomAction.cpp b/installer/PowerToysSetupCustomActions/CustomAction.cpp index 34a87709d7..d7d82d2122 100644 --- a/installer/PowerToysSetupCustomActions/CustomAction.cpp +++ b/installer/PowerToysSetupCustomActions/CustomAction.cpp @@ -3,6 +3,7 @@ #include #include "../../src/common/updating/installer.h" +#include "../../src/common/version/version.h" using namespace std; @@ -416,6 +417,7 @@ UINT __stdcall TelemetryLogInstallSuccessCA(MSIHANDLE hInstall) TraceLoggingWrite( g_hProvider, "Install_Success", + TraceLoggingWideString(get_product_version().c_str(), "Version"), ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); @@ -436,6 +438,7 @@ UINT __stdcall TelemetryLogInstallCancelCA(MSIHANDLE hInstall) TraceLoggingWrite( g_hProvider, "Install_Cancel", + TraceLoggingWideString(get_product_version().c_str(), "Version"), ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); @@ -456,6 +459,7 @@ UINT __stdcall TelemetryLogInstallFailCA(MSIHANDLE hInstall) TraceLoggingWrite( g_hProvider, "Install_Fail", + TraceLoggingWideString(get_product_version().c_str(), "Version"), ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); @@ -476,6 +480,7 @@ UINT __stdcall TelemetryLogUninstallSuccessCA(MSIHANDLE hInstall) TraceLoggingWrite( g_hProvider, "UnInstall_Success", + TraceLoggingWideString(get_product_version().c_str(), "Version"), ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); @@ -496,6 +501,7 @@ UINT __stdcall TelemetryLogUninstallCancelCA(MSIHANDLE hInstall) TraceLoggingWrite( g_hProvider, "UnInstall_Cancel", + TraceLoggingWideString(get_product_version().c_str(), "Version"), ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); @@ -516,6 +522,7 @@ UINT __stdcall TelemetryLogUninstallFailCA(MSIHANDLE hInstall) TraceLoggingWrite( g_hProvider, "UnInstall_Fail", + TraceLoggingWideString(get_product_version().c_str(), "Version"), ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); @@ -536,6 +543,7 @@ UINT __stdcall TelemetryLogRepairCancelCA(MSIHANDLE hInstall) TraceLoggingWrite( g_hProvider, "Repair_Cancel", + TraceLoggingWideString(get_product_version().c_str(), "Version"), ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); @@ -556,6 +564,7 @@ UINT __stdcall TelemetryLogRepairFailCA(MSIHANDLE hInstall) TraceLoggingWrite( g_hProvider, "Repair_Fail", + TraceLoggingWideString(get_product_version().c_str(), "Version"), ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); From 5e9a31eaa7c964bc81e6970e57b521063c44241e Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Thu, 18 Mar 2021 18:19:09 +0200 Subject: [PATCH 27/82] fix versions for registry and vscode workspaces plugins (#10314) --- .../Community.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj | 1 + .../Microsoft.PowerToys.Run.Plugin.Registry.csproj | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Community.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Community.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj index 5421079a25..6e5dcd8384 100644 --- a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Community.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj +++ b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Community.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj @@ -7,6 +7,7 @@ Properties Community.PowerToys.Run.Plugin.VSCodeWorkspaces Community.PowerToys.Run.Plugin.VSCodeWorkspaces + $(Version).0 true false false diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry/Microsoft.PowerToys.Run.Plugin.Registry.csproj b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry/Microsoft.PowerToys.Run.Plugin.Registry.csproj index cddfe836c6..12a5ec6470 100644 --- a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry/Microsoft.PowerToys.Run.Plugin.Registry.csproj +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry/Microsoft.PowerToys.Run.Plugin.Registry.csproj @@ -1,9 +1,10 @@  - + netcoreapp3.1 Microsoft.PowerToys.Run.Plugin.Registry Microsoft.PowerToys.Run.Plugin.Registry + $(Version).0 false false x64 From 3a15276668289e77b264bf89e8b12264de89b108 Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Thu, 18 Mar 2021 20:04:04 +0200 Subject: [PATCH 28/82] "Clear the previous query on launch" has a flicker (#10291) --- .../launcher/PowerLauncher/MainWindow.xaml | 1 - .../launcher/PowerLauncher/MainWindow.xaml.cs | 10 +----- .../PowerLauncher/ViewModel/MainViewModel.cs | 32 ++++++++++++++++--- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/modules/launcher/PowerLauncher/MainWindow.xaml b/src/modules/launcher/PowerLauncher/MainWindow.xaml index f0c5cb7feb..fda097c54e 100644 --- a/src/modules/launcher/PowerLauncher/MainWindow.xaml +++ b/src/modules/launcher/PowerLauncher/MainWindow.xaml @@ -22,7 +22,6 @@ Closing="OnClosing" Background="Transparent" LocationChanged="OnLocationChanged" - Activated="OnActivated" Deactivated="OnDeactivated" IsVisibleChanged="OnVisibilityChanged" Visibility="{Binding MainWindowVisibility, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" diff --git a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs index 98b8a45921..d1a45bf20c 100644 --- a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs +++ b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs @@ -161,20 +161,12 @@ namespace PowerLauncher _settings.WindowLeft = Left; } - private void OnActivated(object sender, EventArgs e) - { - if (_settings.ClearInputOnLaunch) - { - _viewModel.ClearQueryCommand.Execute(null); - } - } - private void OnDeactivated(object sender, EventArgs e) { if (_settings.HideWhenDeactivated) { // (this.FindResource("OutroStoryboard") as Storyboard).Begin(); - Hide(); + _viewModel.Hide(); } } diff --git a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs index ee5ca761d4..9a9cad394a 100644 --- a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs +++ b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs @@ -12,6 +12,7 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using System.Windows.Media; +using System.Windows.Threading; using interop; using Microsoft.PowerLauncher.Telemetry; using Microsoft.PowerToys.Telemetry; @@ -154,7 +155,7 @@ namespace PowerLauncher.ViewModel // SelectedItem returns null if selection is empty. if (result != null && result.Action != null) { - MainWindowVisibility = Visibility.Collapsed; + Hide(); Application.Current.Dispatcher.Invoke(() => { @@ -193,7 +194,7 @@ namespace PowerLauncher.ViewModel } else { - MainWindowVisibility = Visibility.Collapsed; + Hide(); } }); @@ -805,7 +806,7 @@ namespace PowerLauncher.ViewModel }); } - private void ToggleWox() + public void ToggleWox() { if (MainWindowVisibility != Visibility.Visible) { @@ -813,7 +814,30 @@ namespace PowerLauncher.ViewModel } else { - MainWindowVisibility = Visibility.Collapsed; + if (_settings.ClearInputOnLaunch && Results.Visibility == Visibility.Visible) + { + ClearQueryCommand.Execute(null); + Task.Run(() => + { + Thread.Sleep(100); + Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + MainWindowVisibility = Visibility.Collapsed; + })); + }); + } + else + { + MainWindowVisibility = Visibility.Collapsed; + } + } + } + + public void Hide() + { + if (MainWindowVisibility != Visibility.Collapsed) + { + ToggleWox(); } } From 057e92afb818f3c77a8a2ae202cc0e864cf65afe Mon Sep 17 00:00:00 2001 From: Andrey Nekrasov Date: Fri, 19 Mar 2021 12:39:18 +0300 Subject: [PATCH 29/82] [Old Settings] Warn the user on Windows < 1903 that next version won't be supported (#10313) --- src/settings-web/src/components/GeneralSettings.tsx | 6 ++++++ src/settings/settings-html/dist/bundle.js | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/settings-web/src/components/GeneralSettings.tsx b/src/settings-web/src/components/GeneralSettings.tsx index ad4e50a2ec..a334c013ac 100644 --- a/src/settings-web/src/components/GeneralSettings.tsx +++ b/src/settings-web/src/components/GeneralSettings.tsx @@ -58,6 +58,9 @@ export class GeneralSettings extends React.Component { return ( Available PowerToys + { + + } { Object.keys(power_toys_enabled).map( (key) => { let enabled_value=power_toys_enabled[key]; @@ -259,6 +262,9 @@ export class GeneralSettings extends React.Component { About PowerToys (Preview) + { + + } {"use strict";var e={418:e=>{var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function r(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach((function(e){o[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(e){return!1}}()?Object.assign:function(e,i){for(var a,s,l=r(e),u=1;u{var o=n(294),r=n(418),i=n(840);function a(e,t,n,o,r,i,a,s){if(!e){if(e=void 0,void 0===t)e=Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,o,r,i,a,s],u=0;(e=Error(t.replace(/%s/g,(function(){return l[u++]})))).name="Invariant Violation"}throw e.framesToPop=1,e}}function s(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=0;othis.eventPool.length&&this.eventPool.push(e)}function he(e){e.eventPool=[],e.getPooled=de,e.release=pe}r(ce.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=le)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=le)},persist:function(){this.isPersistent=le},isPersistent:ue,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=ue,this._dispatchInstances=this._dispatchListeners=null}}),ce.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},ce.extend=function(e){function t(){}function n(){return o.apply(this,arguments)}var o=this;t.prototype=o.prototype;var i=new t;return r(i,n.prototype),n.prototype=i,n.prototype.constructor=n,n.Interface=r({},o.Interface,e),n.extend=o.extend,he(n),n},he(ce);var fe=ce.extend({data:null}),me=ce.extend({data:null}),ge=[9,13,27,32],ve=q&&"CompositionEvent"in window,ye=null;q&&"documentMode"in document&&(ye=document.documentMode);var be=q&&"TextEvent"in window&&!ye,_e=q&&(!ve||ye&&8=ye),ke=String.fromCharCode(32),xe={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},Ce=!1;function we(e,t){switch(e){case"keyup":return-1!==ge.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function Se(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Ee=!1,Te={eventTypes:xe,extractEvents:function(e,t,n,o){var r=void 0,i=void 0;if(ve)e:{switch(e){case"compositionstart":r=xe.compositionStart;break e;case"compositionend":r=xe.compositionEnd;break e;case"compositionupdate":r=xe.compositionUpdate;break e}r=void 0}else Ee?we(e,n)&&(r=xe.compositionEnd):"keydown"===e&&229===n.keyCode&&(r=xe.compositionStart);return r?(_e&&"ko"!==n.locale&&(Ee||r!==xe.compositionStart?r===xe.compositionEnd&&Ee&&(i=se()):(ie="value"in(re=o)?re.value:re.textContent,Ee=!0)),r=fe.getPooled(r,t,n,o),(i||null!==(i=Se(n)))&&(r.data=i),G(r),i=r):i=null,(e=be?function(e,t){switch(e){case"compositionend":return Se(t);case"keypress":return 32!==t.which?null:(Ce=!0,ke);case"textInput":return(e=t.data)===ke&&Ce?null:e;default:return null}}(e,n):function(e,t){if(Ee)return"compositionend"===e||!ve&&we(e,t)?(e=se(),ae=ie=re=null,Ee=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1
+ + + + @@ -495,6 +498,18 @@ SpinButtonPlacementMode="Compact" HorizontalAlignment="Left" AutomationProperties.LabeledBy="{Binding ElementName=sensitivityRadiusValue}" /> + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutModel.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutModel.cs index 11981ee22c..5fcba57db3 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutModel.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutModel.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; @@ -16,6 +17,8 @@ namespace FancyZonesEditor.Models { _guid = Guid.NewGuid(); Type = LayoutType.Custom; + + MainWindowSettingsModel.QuickKeys.PropertyChanged += QuickSwitchKeys_PropertyChanged; } protected LayoutModel(string name) @@ -48,6 +51,9 @@ namespace FancyZonesEditor.Models _isApplied = other._isApplied; _sensitivityRadius = other._sensitivityRadius; _zoneCount = other._zoneCount; + _quickKey = other._quickKey; + + MainWindowSettingsModel.QuickKeys.PropertyChanged += QuickSwitchKeys_PropertyChanged; } // Name - the display name for this layout model - is also used as the key in the registry @@ -158,6 +164,55 @@ namespace FancyZonesEditor.Models private int _sensitivityRadius = LayoutSettings.DefaultSensitivityRadius; + public List QuickKeysAvailable + { + get + { + List result = new List(); + foreach (var pair in MainWindowSettingsModel.QuickKeys.SelectedKeys) + { + if (pair.Value == string.Empty || pair.Value == Uuid) + { + result.Add(pair.Key); + } + } + + return result; + } + } + + public string QuickKey + { + get + { + return _quickKey == -1 ? Properties.Resources.Quick_Key_None : _quickKey.ToString(); + } + + set + { + string none = Properties.Resources.Quick_Key_None; + var intValue = value == none ? -1 : int.Parse(value); + if (intValue != _quickKey) + { + string prev = _quickKey == -1 ? none : _quickKey.ToString(); + _quickKey = intValue; + + if (intValue != -1) + { + MainWindowSettingsModel.QuickKeys.SelectKey(value, Uuid); + } + else + { + MainWindowSettingsModel.QuickKeys.FreeKey(prev); + } + + FirePropertyChanged(nameof(QuickKey)); + } + } + } + + private int _quickKey = -1; + // TemplateZoneCount - number of zones selected in the picker window for template layouts public int TemplateZoneCount { @@ -200,6 +255,11 @@ namespace FancyZonesEditor.Models // Removes this Layout from the registry and the loaded CustomModels list public void Delete() { + if (_quickKey != -1) + { + MainWindowSettingsModel.QuickKeys.FreeKey(QuickKey); + } + var customModels = MainWindowSettingsModel.CustomModels; int i = customModels.IndexOf(this); if (i != -1) @@ -241,5 +301,17 @@ namespace FancyZonesEditor.Models { PersistData(); } + + private void QuickSwitchKeys_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + foreach (var pair in MainWindowSettingsModel.QuickKeys.SelectedKeys) + { + if (pair.Value == Uuid) + { + QuickKey = pair.Key.ToString(); + break; + } + } + } } } diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutType.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutType.cs index d9a51bc0f6..2d514449ec 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutType.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutType.cs @@ -6,7 +6,7 @@ namespace FancyZonesEditor.Models { public enum LayoutType { - Blank = -1, + Blank = 0, Focus, Columns, Rows, diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Models/MainWindowSettingsModel.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Models/MainWindowSettingsModel.cs index a23e1d8fd8..794575d7f6 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Models/MainWindowSettingsModel.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Models/MainWindowSettingsModel.cs @@ -23,13 +23,6 @@ namespace FancyZonesEditor VirtualDesktopId, } - private readonly CanvasLayoutModel _blankModel; - private readonly CanvasLayoutModel _focusModel; - private readonly GridLayoutModel _rowsModel; - private readonly GridLayoutModel _columnsModel; - private readonly GridLayoutModel _gridModel; - private readonly GridLayoutModel _priorityGridModel; - // Non-localizable strings public static readonly string RegistryPath = "SOFTWARE\\SuperFancyZones"; public static readonly string FullRegistryPath = "HKEY_CURRENT_USER\\" + RegistryPath; @@ -53,40 +46,40 @@ namespace FancyZonesEditor public MainWindowSettingsModel() { // Initialize default layout models: Blank, Focus, Columns, Rows, Grid, and PriorityGrid - _blankModel = new CanvasLayoutModel(Properties.Resources.Template_Layout_Blank, LayoutType.Blank) + var blankModel = new CanvasLayoutModel(Properties.Resources.Template_Layout_Blank, LayoutType.Blank) { TemplateZoneCount = 0, SensitivityRadius = 0, }; - DefaultModels.Add(_blankModel); + DefaultModels.Insert((int)LayoutType.Blank, blankModel); - _focusModel = new CanvasLayoutModel(Properties.Resources.Template_Layout_Focus, LayoutType.Focus); - _focusModel.InitTemplateZones(); - DefaultModels.Add(_focusModel); + var focusModel = new CanvasLayoutModel(Properties.Resources.Template_Layout_Focus, LayoutType.Focus); + focusModel.InitTemplateZones(); + DefaultModels.Insert((int)LayoutType.Focus, focusModel); - _columnsModel = new GridLayoutModel(Properties.Resources.Template_Layout_Columns, LayoutType.Columns) + var columnsModel = new GridLayoutModel(Properties.Resources.Template_Layout_Columns, LayoutType.Columns) { Rows = 1, RowPercents = new List(1) { GridLayoutModel.GridMultiplier }, }; - _columnsModel.InitTemplateZones(); - DefaultModels.Add(_columnsModel); + columnsModel.InitTemplateZones(); + DefaultModels.Insert((int)LayoutType.Columns, columnsModel); - _rowsModel = new GridLayoutModel(Properties.Resources.Template_Layout_Rows, LayoutType.Rows) + var rowsModel = new GridLayoutModel(Properties.Resources.Template_Layout_Rows, LayoutType.Rows) { Columns = 1, ColumnPercents = new List(1) { GridLayoutModel.GridMultiplier }, }; - _rowsModel.InitTemplateZones(); - DefaultModels.Add(_rowsModel); + rowsModel.InitTemplateZones(); + DefaultModels.Insert((int)LayoutType.Rows, rowsModel); - _gridModel = new GridLayoutModel(Properties.Resources.Template_Layout_Grid, LayoutType.Grid); - _gridModel.InitTemplateZones(); - DefaultModels.Add(_gridModel); + var gridModel = new GridLayoutModel(Properties.Resources.Template_Layout_Grid, LayoutType.Grid); + gridModel.InitTemplateZones(); + DefaultModels.Insert((int)LayoutType.Grid, gridModel); - _priorityGridModel = new GridLayoutModel(Properties.Resources.Template_Layout_Priority_Grid, LayoutType.PriorityGrid); - _priorityGridModel.InitTemplateZones(); - DefaultModels.Add(_priorityGridModel); + var priorityGridModel = new GridLayoutModel(Properties.Resources.Template_Layout_Priority_Grid, LayoutType.PriorityGrid); + priorityGridModel.InitTemplateZones(); + DefaultModels.Insert((int)LayoutType.PriorityGrid, priorityGridModel); } // IsShiftKeyPressed - is the shift key currently being held down @@ -133,7 +126,7 @@ namespace FancyZonesEditor { get { - return _blankModel; + return DefaultModels[(int)LayoutType.Blank]; } } @@ -149,6 +142,8 @@ namespace FancyZonesEditor private static ObservableCollection _customModels = new ObservableCollection(); + public static QuickKeysModel QuickKeys { get; } = new QuickKeysModel(); + public LayoutModel SelectedModel { get @@ -202,7 +197,7 @@ namespace FancyZonesEditor { foreach (LayoutModel model in CustomModels) { - if ("{" + model.Guid.ToString().ToUpperInvariant() + "}" == currentApplied.ZonesetUuid.ToUpperInvariant()) + if (model.Uuid == currentApplied.ZonesetUuid.ToUpperInvariant()) { // found match foundModel = model; @@ -234,7 +229,7 @@ namespace FancyZonesEditor if (foundModel == null) { - foundModel = _priorityGridModel; + foundModel = DefaultModels[(int)LayoutType.PriorityGrid]; } SetSelectedModel(foundModel); @@ -255,6 +250,7 @@ namespace FancyZonesEditor SelectedModel.IsSelected = model.IsSelected; SelectedModel.IsApplied = model.IsApplied; SelectedModel.Name = model.Name; + SelectedModel.QuickKey = model.QuickKey; if (model is GridLayoutModel grid) { diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Models/QuickKeysModel.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Models/QuickKeysModel.cs new file mode 100644 index 0000000000..e1fc706b19 --- /dev/null +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Models/QuickKeysModel.cs @@ -0,0 +1,87 @@ +// 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.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; + +namespace FancyZonesEditor.Models +{ + public class QuickKeysModel : INotifyPropertyChanged + { + public SortedDictionary SelectedKeys { get; } = new SortedDictionary() + { + { Properties.Resources.Quick_Key_None, string.Empty }, + { "0", string.Empty }, + { "1", string.Empty }, + { "2", string.Empty }, + { "3", string.Empty }, + { "4", string.Empty }, + { "5", string.Empty }, + { "6", string.Empty }, + { "7", string.Empty }, + { "8", string.Empty }, + { "9", string.Empty }, + }; + + public QuickKeysModel() + { + } + + public event PropertyChangedEventHandler PropertyChanged; + + public void FreeKey(string key) + { + if (SelectedKeys.ContainsKey(key)) + { + SelectedKeys[key] = string.Empty; + FirePropertyChanged(); + } + } + + public bool SelectKey(string key, string uuid) + { + if (!SelectedKeys.ContainsKey(key)) + { + return false; + } + + if (SelectedKeys[key] == uuid) + { + return true; + } + + // clean previous value + foreach (var pair in SelectedKeys) + { + if (pair.Value == uuid) + { + SelectedKeys[pair.Key] = string.Empty; + break; + } + } + + SelectedKeys[key] = uuid; + FirePropertyChanged(); + return true; + } + + public void CleanUp() + { + var keys = SelectedKeys.Keys.ToList(); + foreach (var key in keys) + { + SelectedKeys[key] = string.Empty; + } + + FirePropertyChanged(); + } + + protected virtual void FirePropertyChanged([CallerMemberName] string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs index 4c2b446366..65f423c184 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs @@ -555,6 +555,24 @@ namespace FancyZonesEditor.Properties { } } + /// + /// Looks up a localized string similar to None. + /// + public static string Quick_Key_None { + get { + return ResourceManager.GetString("Quick_Key_None", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Select a key to quickly apply the layout (Win + Ctrl + Alt + key). + /// + public static string QuickKey_Select { + get { + return ResourceManager.GetString("QuickKey_Select", resourceCulture); + } + } + /// /// Looks up a localized string similar to Reset layout. /// diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx index 9a08373776..122af40493 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx @@ -346,4 +346,10 @@ Splitter: Title for concept: A segmenter visual for splitting one item into two. This would be the vertical line + + Select a key to quickly apply the layout (Win + Ctrl + Alt + key) + + + None + \ No newline at end of file diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs index 816308b365..439577e0f1 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs @@ -57,6 +57,7 @@ namespace FancyZonesEditor.Utils MonitorTop, } + // parsing cmd args private struct NativeMonitorData { public string MonitorId { get; set; } @@ -87,6 +88,7 @@ namespace FancyZonesEditor.Utils } } + // zones-settings: devices private struct DeviceWrapper { public struct ActiveZoneSetWrapper @@ -109,6 +111,7 @@ namespace FancyZonesEditor.Utils public int EditorSensitivityRadius { get; set; } } + // zones-settings: custom-zone-sets private class CanvasInfoWrapper { public struct CanvasZoneWrapper @@ -131,6 +134,7 @@ namespace FancyZonesEditor.Utils public int SensitivityRadius { get; set; } = LayoutSettings.DefaultSensitivityRadius; } + // zones-settings: custom-zone-sets private class GridInfoWrapper { public int Rows { get; set; } @@ -150,6 +154,7 @@ namespace FancyZonesEditor.Utils public int SensitivityRadius { get; set; } = LayoutSettings.DefaultSensitivityRadius; } + // zones-settings: custom-zone-sets private struct CustomLayoutWrapper { public string Uuid { get; set; } @@ -161,6 +166,7 @@ namespace FancyZonesEditor.Utils public JsonElement Info { get; set; } // CanvasInfoWrapper or GridInfoWrapper } + // zones-settings: templates private struct TemplateLayoutWrapper { public string Type { get; set; } @@ -174,6 +180,15 @@ namespace FancyZonesEditor.Utils public int SensitivityRadius { get; set; } } + // zones-settings: quick-layout-keys-wrapper + private struct QuickLayoutKeysWrapper + { + public int Key { get; set; } + + public string Uuid { get; set; } + } + + // zones-settings private struct ZoneSettingsWrapper { public List Devices { get; set; } @@ -181,6 +196,8 @@ namespace FancyZonesEditor.Utils public List CustomZoneSets { get; set; } public List Templates { get; set; } + + public List QuickLayoutKeys { get; set; } } private struct EditorParams @@ -528,6 +545,7 @@ namespace FancyZonesEditor.Utils bool devicesParsingResult = SetDevices(zoneSettings.Devices); bool customZonesParsingResult = SetCustomLayouts(zoneSettings.CustomZoneSets); bool templatesParsingResult = SetTemplateLayouts(zoneSettings.Templates); + bool quickLayoutSwitchKeysParsingResult = SetQuickLayoutSwitchKeys(zoneSettings.QuickLayoutKeys); if (!devicesParsingResult || !customZonesParsingResult) { @@ -549,6 +567,7 @@ namespace FancyZonesEditor.Utils zoneSettings.Devices = new List(); zoneSettings.CustomZoneSets = new List(); zoneSettings.Templates = new List(); + zoneSettings.QuickLayoutKeys = new List(); // Serialize used devices foreach (var monitor in App.Overlay.Monitors) @@ -685,6 +704,27 @@ namespace FancyZonesEditor.Utils zoneSettings.Templates.Add(wrapper); } + // Serialize quick layout switch keys + foreach (var pair in MainWindowSettingsModel.QuickKeys.SelectedKeys) + { + if (pair.Value != string.Empty) + { + try + { + QuickLayoutKeysWrapper wrapper = new QuickLayoutKeysWrapper + { + Key = int.Parse(pair.Key), + Uuid = pair.Value, + }; + + zoneSettings.QuickLayoutKeys.Add(wrapper); + } + catch (Exception) + { + } + } + } + try { string jsonString = JsonSerializer.Serialize(zoneSettings, _options); @@ -781,7 +821,15 @@ namespace FancyZonesEditor.Utils zones.Add(new Int32Rect { X = (int)zone.X, Y = (int)zone.Y, Width = (int)zone.Width, Height = (int)zone.Height }); } - layout = new CanvasLayoutModel(zoneSet.Uuid, zoneSet.Name, LayoutType.Custom, zones, info.RefWidth, info.RefHeight); + try + { + layout = new CanvasLayoutModel(zoneSet.Uuid, zoneSet.Name, LayoutType.Custom, zones, info.RefWidth, info.RefHeight); + } + catch (Exception) + { + continue; + } + layout.SensitivityRadius = info.SensitivityRadius; } else if (zoneSet.Type == GridLayoutModel.ModelTypeID) @@ -797,7 +845,15 @@ namespace FancyZonesEditor.Utils } } - layout = new GridLayoutModel(zoneSet.Uuid, zoneSet.Name, LayoutType.Custom, info.Rows, info.Columns, info.RowsPercentage, info.ColumnsPercentage, cells); + try + { + layout = new GridLayoutModel(zoneSet.Uuid, zoneSet.Name, LayoutType.Custom, info.Rows, info.Columns, info.RowsPercentage, info.ColumnsPercentage, cells); + } + catch (Exception) + { + continue; + } + layout.SensitivityRadius = info.SensitivityRadius; (layout as GridLayoutModel).ShowSpacing = info.ShowSpacing; (layout as GridLayoutModel).Spacing = info.Spacing; @@ -823,24 +879,35 @@ namespace FancyZonesEditor.Utils foreach (var wrapper in templateLayouts) { - var type = JsonTagToLayoutType(wrapper.Type); + LayoutType type = JsonTagToLayoutType(wrapper.Type); + LayoutModel layout = MainWindowSettingsModel.DefaultModels[(int)type]; - foreach (var layout in MainWindowSettingsModel.DefaultModels) + layout.SensitivityRadius = wrapper.SensitivityRadius; + layout.TemplateZoneCount = wrapper.ZoneCount; + + if (layout is GridLayoutModel grid) { - if (layout.Type == type) - { - layout.SensitivityRadius = wrapper.SensitivityRadius; - layout.TemplateZoneCount = wrapper.ZoneCount; - - if (layout is GridLayoutModel grid) - { - grid.ShowSpacing = wrapper.ShowSpacing; - grid.Spacing = wrapper.Spacing; - } - - layout.InitTemplateZones(); - } + grid.ShowSpacing = wrapper.ShowSpacing; + grid.Spacing = wrapper.Spacing; } + + layout.InitTemplateZones(); + } + + return true; + } + + private bool SetQuickLayoutSwitchKeys(List quickSwitchKeys) + { + if (quickSwitchKeys == null) + { + return false; + } + + MainWindowSettingsModel.QuickKeys.CleanUp(); + foreach (var wrapper in quickSwitchKeys) + { + MainWindowSettingsModel.QuickKeys.SelectKey(wrapper.Key.ToString(), wrapper.Uuid); } return true; diff --git a/src/modules/fancyzones/lib/FancyZones.cpp b/src/modules/fancyzones/lib/FancyZones.cpp index 7655823698..8d8880805e 100644 --- a/src/modules/fancyzones/lib/FancyZones.cpp +++ b/src/modules/fancyzones/lib/FancyZones.cpp @@ -34,6 +34,30 @@ enum class DisplayChangeType namespace { constexpr int CUSTOM_POSITIONING_LEFT_TOP_PADDING = 16; + + struct require_read_lock + { + template + require_read_lock(const std::shared_lock& lock) + { + lock; + } + + template + require_read_lock(const std::unique_lock& lock) + { + lock; + } + }; + + struct require_write_lock + { + template + require_write_lock(const std::unique_lock& lock) + { + lock; + } + }; } // Non-localizable strings @@ -184,40 +208,16 @@ public: } LRESULT WndProc(HWND, UINT, WPARAM, LPARAM) noexcept; - void OnDisplayChange(DisplayChangeType changeType) noexcept; - void AddZoneWindow(HMONITOR monitor, const std::wstring& deviceId) noexcept; + void OnDisplayChange(DisplayChangeType changeType, require_write_lock) noexcept; + void AddZoneWindow(HMONITOR monitor, const std::wstring& deviceId, require_write_lock) noexcept; protected: static LRESULT CALLBACK s_WndProc(HWND, UINT, WPARAM, LPARAM) noexcept; private: - struct require_read_lock - { - template - require_read_lock(const std::shared_lock& lock) - { - lock; - } - template - require_read_lock(const std::unique_lock& lock) - { - lock; - } - }; - - struct require_write_lock - { - template - require_write_lock(const std::unique_lock& lock) - { - lock; - } - }; - - void UpdateZoneWindows() noexcept; - void UpdateWindowsPositions() noexcept; - void CycleActiveZoneSet(DWORD vkCode) noexcept; + void UpdateZoneWindows(require_write_lock) noexcept; + void UpdateWindowsPositions(require_write_lock) noexcept; bool OnSnapHotkeyBasedOnZoneNumber(HWND window, DWORD vkCode) noexcept; bool OnSnapHotkeyBasedOnPosition(HWND window, DWORD vkCode) noexcept; bool OnSnapHotkey(DWORD vkCode) noexcept; @@ -232,12 +232,15 @@ private: std::pair, std::vector> GetAppZoneHistoryInfo(HWND window, HMONITOR monitor, bool isPrimaryMonitor) noexcept; void MoveWindowIntoZone(HWND window, winrt::com_ptr zoneWindow, const std::vector& zoneIndexSet) noexcept; - void OnEditorExitEvent() noexcept; - void UpdateZoneSets() noexcept; + void OnEditorExitEvent(require_write_lock) noexcept; + void UpdateZoneSets(require_write_lock) noexcept; bool ShouldProcessSnapHotkey(DWORD vkCode) noexcept; + void ApplyQuickLayout(int key) noexcept; + void FlashZones(require_write_lock) noexcept; std::vector> GetRawMonitorData() noexcept; std::vector GetMonitorsSorted() noexcept; + HMONITOR WorkAreaKeyFromWindow(HWND window) noexcept; const HINSTANCE m_hinstance{}; @@ -266,6 +269,7 @@ private: static UINT WM_PRIV_FILE_UPDATE; // Scheduled when the a watched file is updated static UINT WM_PRIV_SNAP_HOTKEY; // Scheduled when we receive a snap hotkey key down press + static UINT WM_PRIV_QUICK_LAYOUT_KEY; // Scheduled when we receive a key down press to quickly apply a layout // Did we terminate the editor or was it closed cleanly? enum class EditorExitKind : byte @@ -283,6 +287,7 @@ UINT FancyZones::WM_PRIV_VD_UPDATE = RegisterWindowMessage(L"{b8b72b46-f42f-4c26 UINT FancyZones::WM_PRIV_EDITOR = RegisterWindowMessage(L"{87543824-7080-4e91-9d9c-0404642fc7b6}"); UINT FancyZones::WM_PRIV_FILE_UPDATE = RegisterWindowMessage(L"{632f17a9-55a7-45f1-a4db-162e39271d92}"); UINT FancyZones::WM_PRIV_SNAP_HOTKEY = RegisterWindowMessage(L"{763c03a3-03d9-4cde-8d71-f0358b0b4b52}"); +UINT FancyZones::WM_PRIV_QUICK_LAYOUT_KEY = RegisterWindowMessage(L"{72f4fd8e-23f1-43ab-bbbc-029363df9a84}"); // IFancyZones IFACEMETHODIMP_(void) @@ -553,18 +558,6 @@ FancyZones::OnKeyDown(PKBDLLHOOKSTRUCT info) noexcept bool const ctrl = GetAsyncKeyState(VK_CONTROL) & 0x8000; if ((win && !shift && !ctrl) || (win && ctrl && alt)) { - // Temporarily disable Win+Ctrl+Number functionality - // if (ctrl) - // { - // if ((info->vkCode >= '0') && (info->vkCode <= '9')) - // { - // // Win+Ctrl+Number will cycle through ZoneSets - // Trace::FancyZones::OnKeyDown(info->vkCode, win, ctrl, false /*inMoveSize*/); - // CycleActiveZoneSet(info->vkCode); - // return true; - // } - // } - // else if ((info->vkCode == VK_RIGHT) || (info->vkCode == VK_LEFT) || (info->vkCode == VK_UP) || (info->vkCode == VK_DOWN)) { if (ShouldProcessSnapHotkey(info->vkCode)) @@ -576,14 +569,34 @@ FancyZones::OnKeyDown(PKBDLLHOOKSTRUCT info) noexcept } } } - // Temporarily disable Win+Ctrl+Number functionality - //else if (m_inMoveSize && (info->vkCode >= '0') && (info->vkCode <= '9')) - //{ - // // This allows you to cycle through ZoneSets while dragging a window - // Trace::FancyZones::OnKeyDown(info->vkCode, win, false /*control*/, true /*inMoveSize*/); - // CycleActiveZoneSet(info->vkCode); - // return false; - //} + + if (m_settings->GetSettings()->quickLayoutSwitch) + { + int digitPressed = -1; + if ('0' <= info->vkCode && info->vkCode <= '9') + { + digitPressed = info->vkCode - '0'; + } + else if (VK_NUMPAD0 <= info->vkCode && info->vkCode <= VK_NUMPAD9) + { + digitPressed = info->vkCode - VK_NUMPAD0; + } + + bool dragging = m_windowMoveHandler.InMoveSize(); + bool changeLayoutWhileNotDragging = !dragging && !shift && win && ctrl && alt && digitPressed != -1; + bool changeLayoutWhileDragging = dragging && digitPressed != -1; + + if (changeLayoutWhileNotDragging || changeLayoutWhileDragging) + { + auto quickKeysMap = FancyZonesDataInstance().GetLayoutQuickKeys(); + if (std::any_of(quickKeysMap.begin(), quickKeysMap.end(), [=](auto item) { return item.second == digitPressed; })) + { + PostMessageW(m_window, WM_PRIV_QUICK_LAYOUT_KEY, 0, static_cast(digitPressed)); + Trace::FancyZones::QuickLayoutSwitched(changeLayoutWhileNotDragging); + return true; + } + } + } if (m_windowMoveHandler.IsDragEnabled() && shift) { @@ -755,13 +768,16 @@ void FancyZones::ToggleEditor() noexcept void FancyZones::SettingsChanged() noexcept { + _TRACER_; + std::unique_lock writeLock(m_lock); + // Update the hotkey UnregisterHotKey(m_window, 1); RegisterHotKey(m_window, 1, m_settings->GetSettings()->editorHotkey.get_modifiers(), m_settings->GetSettings()->editorHotkey.get_code()); // Needed if we toggled spanZonesAcrossMonitors m_workAreaHandler.Clear(); - OnDisplayChange(DisplayChangeType::Initialization); + OnDisplayChange(DisplayChangeType::Initialization, writeLock); } // IZoneWindowHost @@ -770,7 +786,8 @@ FancyZones::MoveWindowsOnActiveZoneSetChange() noexcept { if (m_settings->GetSettings()->zoneSetChange_moveWindows) { - UpdateWindowsPositions(); + std::unique_lock writeLock(m_lock); + UpdateWindowsPositions(writeLock); } } @@ -793,8 +810,9 @@ LRESULT FancyZones::WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lpa { // Changes in taskbar position resulted in different size of work area. // Invalidate cached work-areas so they can be recreated with latest information. + std::unique_lock writeLock(m_lock); m_workAreaHandler.Clear(); - OnDisplayChange(DisplayChangeType::WorkArea); + OnDisplayChange(DisplayChangeType::WorkArea, writeLock); } } break; @@ -802,8 +820,9 @@ LRESULT FancyZones::WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lpa case WM_DISPLAYCHANGE: { // Display resolution changed. Invalidate cached work-areas so they can be recreated with latest information. + std::unique_lock writeLock(m_lock); m_workAreaHandler.Clear(); - OnDisplayChange(DisplayChangeType::DisplayChange); + OnDisplayChange(DisplayChangeType::DisplayChange, writeLock); } break; @@ -818,11 +837,13 @@ LRESULT FancyZones::WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lpa } else if (message == WM_PRIV_VD_INIT) { - OnDisplayChange(DisplayChangeType::Initialization); + std::unique_lock writeLock(m_lock); + OnDisplayChange(DisplayChangeType::Initialization, writeLock); } else if (message == WM_PRIV_VD_SWITCH) { - OnDisplayChange(DisplayChangeType::VirtualDesktop); + std::unique_lock writeLock(m_lock); + OnDisplayChange(DisplayChangeType::VirtualDesktop, writeLock); } else if (message == WM_PRIV_VD_UPDATE) { @@ -836,7 +857,8 @@ LRESULT FancyZones::WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lpa { if (lparam == static_cast(EditorExitKind::Exit)) { - OnEditorExitEvent(); + std::unique_lock writeLock(m_lock); + OnEditorExitEvent(writeLock); } { @@ -873,7 +895,12 @@ LRESULT FancyZones::WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lpa else if (message == WM_PRIV_FILE_UPDATE) { FancyZonesDataInstance().LoadFancyZonesData(); - UpdateZoneSets(); + std::unique_lock writeLock(m_lock); + UpdateZoneSets(writeLock); + } + else if (message == WM_PRIV_QUICK_LAYOUT_KEY) + { + ApplyQuickLayout(static_cast(lparam)); } else { @@ -885,7 +912,7 @@ LRESULT FancyZones::WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lpa return 0; } -void FancyZones::OnDisplayChange(DisplayChangeType changeType) noexcept +void FancyZones::OnDisplayChange(DisplayChangeType changeType, require_write_lock lock) noexcept { _TRACER_; if (changeType == DisplayChangeType::VirtualDesktop || @@ -912,22 +939,20 @@ void FancyZones::OnDisplayChange(DisplayChangeType changeType) noexcept } } - UpdateZoneWindows(); + UpdateZoneWindows(lock); if ((changeType == DisplayChangeType::WorkArea) || (changeType == DisplayChangeType::DisplayChange)) { if (m_settings->GetSettings()->displayChange_moveWindows) { - UpdateWindowsPositions(); + UpdateWindowsPositions(lock); } } } -void FancyZones::AddZoneWindow(HMONITOR monitor, const std::wstring& deviceId) noexcept +void FancyZones::AddZoneWindow(HMONITOR monitor, const std::wstring& deviceId, require_write_lock) noexcept { _TRACER_; - std::unique_lock writeLock(m_lock); - if (m_workAreaHandler.IsNewWorkArea(m_currentDesktopId, monitor)) { wil::unique_cotaskmem_string virtualDesktopId; @@ -974,7 +999,7 @@ LRESULT CALLBACK FancyZones::s_WndProc(HWND window, UINT message, WPARAM wparam, DefWindowProc(window, message, wparam, lparam); } -void FancyZones::UpdateZoneWindows() noexcept +void FancyZones::UpdateZoneWindows(require_write_lock lock) noexcept { // Mapping between display device name and device index (operating system identifies each display device with an index value). std::unordered_map displayDeviceIdxMap; @@ -982,6 +1007,7 @@ void FancyZones::UpdateZoneWindows() noexcept { FancyZones* fancyZones; std::unordered_map* displayDeviceIdx; + require_write_lock lock; }; auto callback = [](HMONITOR monitor, HDC, RECT*, LPARAM data) -> BOOL { @@ -993,27 +1019,25 @@ void FancyZones::UpdateZoneWindows() noexcept FancyZones* fancyZones = params->fancyZones; std::wstring deviceId = FancyZonesUtils::GetDisplayDeviceId(mi.szDevice, displayDeviceIdxMap); - fancyZones->AddZoneWindow(monitor, deviceId); + fancyZones->AddZoneWindow(monitor, deviceId, params->lock); } return TRUE; }; if (m_settings->GetSettings()->spanZonesAcrossMonitors) { - AddZoneWindow(nullptr, {}); + AddZoneWindow(nullptr, {}, lock); } else { - capture capture{ this, &displayDeviceIdxMap }; + capture capture{ this, &displayDeviceIdxMap, lock }; EnumDisplayMonitors(nullptr, nullptr, callback, reinterpret_cast(&capture)); } } -void FancyZones::UpdateWindowsPositions() noexcept +void FancyZones::UpdateWindowsPositions(require_write_lock) noexcept { - _TRACER_; auto callback = [](HWND window, LPARAM data) -> BOOL { - _TRACER_; size_t bitmask = reinterpret_cast(::GetProp(window, ZonedWindowProperties::PropertyMultipleZoneID)); if (bitmask != 0) @@ -1028,7 +1052,6 @@ void FancyZones::UpdateWindowsPositions() noexcept } auto strongThis = reinterpret_cast(data); - std::unique_lock writeLock(strongThis->m_lock); auto zoneWindow = strongThis->m_workAreaHandler.GetWorkArea(window); if (zoneWindow) { @@ -1040,39 +1063,10 @@ void FancyZones::UpdateWindowsPositions() noexcept EnumWindows(callback, reinterpret_cast(this)); } -void FancyZones::CycleActiveZoneSet(DWORD vkCode) noexcept -{ - _TRACER_; - auto window = GetForegroundWindow(); - if (FancyZonesUtils::IsCandidateForZoning(window, m_settings->GetSettings()->excludedAppsArray)) - { - const HMONITOR monitor = MonitorFromWindow(window, MONITOR_DEFAULTTONULL); - if (monitor) - { - std::shared_lock readLock(m_lock); - - auto zoneWindow = m_workAreaHandler.GetWorkArea(m_currentDesktopId, monitor); - if (zoneWindow) - { - zoneWindow->CycleActiveZoneSet(vkCode); - } - } - } -} - bool FancyZones::OnSnapHotkeyBasedOnZoneNumber(HWND window, DWORD vkCode) noexcept { _TRACER_; - HMONITOR current; - - if (m_settings->GetSettings()->spanZonesAcrossMonitors) - { - current = NULL; - } - else - { - current = MonitorFromWindow(window, MONITOR_DEFAULTTONULL); - } + HMONITOR current = WorkAreaKeyFromWindow(window); std::vector monitorInfo = GetMonitorsSorted(); if (current && monitorInfo.size() > 1 && m_settings->GetSettings()->moveWindowAcrossMonitors) @@ -1130,16 +1124,7 @@ bool FancyZones::OnSnapHotkeyBasedOnZoneNumber(HWND window, DWORD vkCode) noexce bool FancyZones::OnSnapHotkeyBasedOnPosition(HWND window, DWORD vkCode) noexcept { - HMONITOR current; - - if (m_settings->GetSettings()->spanZonesAcrossMonitors) - { - current = NULL; - } - else - { - current = MonitorFromWindow(window, MONITOR_DEFAULTTONULL); - } + HMONITOR current = WorkAreaKeyFromWindow(window); auto allMonitors = FancyZonesUtils::GetAllMonitorRects<&MONITORINFOEX::rcWork>(); @@ -1316,14 +1301,14 @@ bool FancyZones::IsSplashScreen(HWND window) return wcscmp(NonLocalizable::SplashClassName, className) == 0; } -void FancyZones::OnEditorExitEvent() noexcept +void FancyZones::OnEditorExitEvent(require_write_lock lock) noexcept { // Collect information about changes in zone layout after editor exited. FancyZonesDataInstance().LoadFancyZonesData(); - UpdateZoneSets(); + UpdateZoneSets(lock); } -void FancyZones::UpdateZoneSets() noexcept +void FancyZones::UpdateZoneSets(require_write_lock lock) noexcept { for (auto workArea : m_workAreaHandler.GetAllWorkAreas()) { @@ -1331,7 +1316,7 @@ void FancyZones::UpdateZoneSets() noexcept } if (m_settings->GetSettings()->zoneSetChange_moveWindows) { - UpdateWindowsPositions(); + UpdateWindowsPositions(lock); } } @@ -1340,15 +1325,7 @@ bool FancyZones::ShouldProcessSnapHotkey(DWORD vkCode) noexcept auto window = GetForegroundWindow(); if (m_settings->GetSettings()->overrideSnapHotkeys && FancyZonesUtils::IsCandidateForZoning(window, m_settings->GetSettings()->excludedAppsArray)) { - HMONITOR monitor; - if (m_settings->GetSettings()->spanZonesAcrossMonitors) - { - monitor = NULL; - } - else - { - monitor = MonitorFromWindow(window, MONITOR_DEFAULTTONULL); - } + HMONITOR monitor = WorkAreaKeyFromWindow(window); auto zoneWindow = m_workAreaHandler.GetWorkArea(m_currentDesktopId, monitor); if (zoneWindow && zoneWindow->ActiveZoneSet() && zoneWindow->ActiveZoneSet()->LayoutType() != FancyZonesDataTypes::ZoneSetLayoutType::Blank) @@ -1366,6 +1343,47 @@ bool FancyZones::ShouldProcessSnapHotkey(DWORD vkCode) noexcept return false; } +void FancyZones::ApplyQuickLayout(int key) noexcept +{ + std::unique_lock writeLock(m_lock); + + std::wstring uuid; + for (auto [zoneUuid, hotkey] : FancyZonesDataInstance().GetLayoutQuickKeys()) + { + if (hotkey == key) + { + uuid = zoneUuid; + } + } + + auto workArea = m_workAreaHandler.GetWorkAreaFromCursor(m_currentDesktopId); + + // Find a custom zone set with this uuid and apply it + auto customZoneSets = FancyZonesDataInstance().GetCustomZoneSetsMap(); + + if (!customZoneSets.contains(uuid)) + { + return; + } + + FancyZonesDataTypes::ZoneSetData data{ .uuid = uuid, .type = FancyZonesDataTypes::ZoneSetLayoutType::Custom }; + FancyZonesDataInstance().SetActiveZoneSet(workArea->UniqueId(), data); + FancyZonesDataInstance().SaveZoneSettings(); + UpdateZoneSets(writeLock); + FlashZones(writeLock); +} + +void FancyZones::FlashZones(require_write_lock) noexcept +{ + if (m_settings->GetSettings()->flashZonesOnQuickSwitch && !m_windowMoveHandler.IsDragEnabled()) + { + for (auto [monitor, workArea] : m_workAreaHandler.GetWorkAreasByDesktopId(m_currentDesktopId)) + { + workArea->FlashZones(); + } + } +} + std::vector FancyZones::GetMonitorsSorted() noexcept { std::shared_lock readLock(m_lock); @@ -1397,6 +1415,18 @@ std::vector> FancyZones::GetRawMonitorData() noexcept return monitorInfo; } +HMONITOR FancyZones::WorkAreaKeyFromWindow(HWND window) noexcept +{ + if (m_settings->GetSettings()->spanZonesAcrossMonitors) + { + return NULL; + } + else + { + return MonitorFromWindow(window, MONITOR_DEFAULTTONULL); + } +} + winrt::com_ptr MakeFancyZones(HINSTANCE hinstance, const winrt::com_ptr& settings, std::function disableCallback) noexcept diff --git a/src/modules/fancyzones/lib/FancyZonesData.cpp b/src/modules/fancyzones/lib/FancyZonesData.cpp index 487b8b862f..c72524ace0 100644 --- a/src/modules/fancyzones/lib/FancyZonesData.cpp +++ b/src/modules/fancyzones/lib/FancyZonesData.cpp @@ -511,10 +511,33 @@ bool FancyZonesData::SetAppLastZones(HWND window, const std::wstring& deviceId, void FancyZonesData::SetActiveZoneSet(const std::wstring& deviceId, const FancyZonesDataTypes::ZoneSetData& data) { std::scoped_lock lock{ dataLock }; - auto it = deviceInfoMap.find(deviceId); - if (it != deviceInfoMap.end()) + + auto deviceIt = deviceInfoMap.find(deviceId); + if (deviceIt == deviceInfoMap.end()) { - it->second.activeZoneSet = data; + return; + } + + deviceIt->second.activeZoneSet = data; + + // If the zone set is custom, we need to copy its properties to the device + auto zonesetIt = customZoneSetsMap.find(data.uuid); + if (zonesetIt != customZoneSetsMap.end()) + { + if (zonesetIt->second.type == FancyZonesDataTypes::CustomLayoutType::Grid) + { + auto layoutInfo = std::get(zonesetIt->second.info); + deviceIt->second.sensitivityRadius = layoutInfo.sensitivityRadius(); + deviceIt->second.showSpacing = layoutInfo.showSpacing(); + deviceIt->second.spacing = layoutInfo.spacing(); + deviceIt->second.zoneCount = layoutInfo.zoneCount(); + } + else if (zonesetIt->second.type == FancyZonesDataTypes::CustomLayoutType::Canvas) + { + auto layoutInfo = std::get(zonesetIt->second.info); + deviceIt->second.sensitivityRadius = layoutInfo.sensitivityRadius; + deviceIt->second.zoneCount = (int)layoutInfo.zones.size(); + } } } @@ -536,6 +559,7 @@ void FancyZonesData::LoadFancyZonesData() appZoneHistoryMap = JSONHelpers::ParseAppZoneHistory(fancyZonesDataJSON); deviceInfoMap = JSONHelpers::ParseDeviceInfos(fancyZonesDataJSON); customZoneSetsMap = JSONHelpers::ParseCustomZoneSets(fancyZonesDataJSON); + quickKeysMap = JSONHelpers::ParseQuickKeys(fancyZonesDataJSON); } } @@ -549,7 +573,7 @@ void FancyZonesData::SaveZoneSettings() const { _TRACER_; std::scoped_lock lock{ dataLock }; - JSONHelpers::SaveZoneSettings(zonesSettingsFileName, deviceInfoMap, customZoneSetsMap); + JSONHelpers::SaveZoneSettings(zonesSettingsFileName, deviceInfoMap, customZoneSetsMap, quickKeysMap); } void FancyZonesData::SaveAppZoneHistory() const diff --git a/src/modules/fancyzones/lib/FancyZonesData.h b/src/modules/fancyzones/lib/FancyZonesData.h index aea46093a9..34dc72b6fd 100644 --- a/src/modules/fancyzones/lib/FancyZonesData.h +++ b/src/modules/fancyzones/lib/FancyZonesData.h @@ -48,6 +48,12 @@ public: const std::unordered_map>& GetAppZoneHistoryMap() const; + inline const JSONHelpers::TLayoutQuickKeysMap& GetLayoutQuickKeys() const + { + std::scoped_lock lock{ dataLock }; + return quickKeysMap; + } + inline const std::wstring& GetZonesSettingsFileName() const { return zonesSettingsFileName; @@ -121,6 +127,8 @@ private: JSONHelpers::TDeviceInfoMap deviceInfoMap{}; // Maps custom zoneset UUID to it's data JSONHelpers::TCustomZoneSetsMap customZoneSetsMap{}; + // Maps zoneset UUID with quick access keys + JSONHelpers::TLayoutQuickKeysMap quickKeysMap{}; std::wstring zonesSettingsFileName; std::wstring appZoneHistoryFileName; diff --git a/src/modules/fancyzones/lib/FancyZonesDataTypes.cpp b/src/modules/fancyzones/lib/FancyZonesDataTypes.cpp index eece88e7d3..7c017d3319 100644 --- a/src/modules/fancyzones/lib/FancyZonesDataTypes.cpp +++ b/src/modules/fancyzones/lib/FancyZonesDataTypes.cpp @@ -112,4 +112,18 @@ namespace FancyZonesDataTypes cellRow.resize(m_columns, 0); } } + + int GridLayoutInfo::zoneCount() const + { + int high = 0; + for (const auto& row : m_cellChildMap) + { + for (int val : row) + { + high = max(high, val); + } + } + + return high + 1; + } } diff --git a/src/modules/fancyzones/lib/FancyZonesDataTypes.h b/src/modules/fancyzones/lib/FancyZonesDataTypes.h index fd262af15a..6ab782f9c9 100644 --- a/src/modules/fancyzones/lib/FancyZonesDataTypes.h +++ b/src/modules/fancyzones/lib/FancyZonesDataTypes.h @@ -86,6 +86,8 @@ namespace FancyZonesDataTypes inline int spacing() const { return m_spacing; } inline int sensitivityRadius() const { return m_sensitivityRadius; } + int zoneCount() const; + int m_rows; int m_columns; std::vector m_rowsPercents; diff --git a/src/modules/fancyzones/lib/JsonHelpers.cpp b/src/modules/fancyzones/lib/JsonHelpers.cpp index 3cd0499103..d6b8570e33 100644 --- a/src/modules/fancyzones/lib/JsonHelpers.cpp +++ b/src/modules/fancyzones/lib/JsonHelpers.cpp @@ -35,6 +35,9 @@ namespace NonLocalizable const wchar_t HistoryStr[] = L"history"; const wchar_t InfoStr[] = L"info"; const wchar_t NameStr[] = L"name"; + const wchar_t QuickAccessKey[] = L"key"; + const wchar_t QuickAccessUuid[] = L"uuid"; + const wchar_t QuickLayoutKeys[] = L"quick-layout-keys"; const wchar_t RefHeightStr[] = L"ref-height"; const wchar_t RefWidthStr[] = L"ref-width"; const wchar_t RowsPercentageStr[] = L"rows-percentage"; @@ -471,6 +474,38 @@ namespace JSONHelpers } } + json::JsonObject LayoutQuickKeyJSON::ToJson(const LayoutQuickKeyJSON& layoutQuickKey) + { + json::JsonObject result{}; + + result.SetNamedValue(NonLocalizable::QuickAccessUuid, json::value(layoutQuickKey.layoutUuid)); + result.SetNamedValue(NonLocalizable::QuickAccessKey, json::value(layoutQuickKey.key)); + + return result; + } + + std::optional LayoutQuickKeyJSON::FromJson(const json::JsonObject& layoutQuickKey) + { + try + { + LayoutQuickKeyJSON result; + + result.layoutUuid = layoutQuickKey.GetNamedString(NonLocalizable::QuickAccessUuid); + if (!FancyZonesUtils::IsValidGuid(result.layoutUuid)) + { + return std::nullopt; + } + + result.key = static_cast(layoutQuickKey.GetNamedNumber(NonLocalizable::QuickAccessKey)); + + return result; + } + catch (const winrt::hresult_error&) + { + return std::nullopt; + } + } + json::JsonObject MonitorInfo::ToJson(const MonitorInfo& monitor) { json::JsonObject result{}; @@ -527,7 +562,7 @@ namespace JSONHelpers } } - void SaveZoneSettings(const std::wstring& zonesSettingsFileName, const TDeviceInfoMap& deviceInfoMap, const TCustomZoneSetsMap& customZoneSetsMap) + void SaveZoneSettings(const std::wstring& zonesSettingsFileName, const TDeviceInfoMap& deviceInfoMap, const TCustomZoneSetsMap& customZoneSetsMap, const TLayoutQuickKeysMap& quickKeysMap) { auto before = json::from_file(zonesSettingsFileName); @@ -549,6 +584,7 @@ namespace JSONHelpers root.SetNamedValue(NonLocalizable::DevicesStr, JSONHelpers::SerializeDeviceInfos(deviceInfoMap)); root.SetNamedValue(NonLocalizable::CustomZoneSetsStr, JSONHelpers::SerializeCustomZoneSets(customZoneSetsMap)); root.SetNamedValue(NonLocalizable::Templates, templates); + root.SetNamedValue(NonLocalizable::QuickLayoutKeys, JSONHelpers::SerializeQuickKeys(quickKeysMap)); if (!before.has_value() || before.value().Stringify() != root.Stringify()) { @@ -675,4 +711,40 @@ namespace JSONHelpers return customZoneSetsJSON; } + + TLayoutQuickKeysMap ParseQuickKeys(const json::JsonObject& fancyZonesDataJSON) + { + try + { + TLayoutQuickKeysMap quickKeysMap{}; + auto quickKeys = fancyZonesDataJSON.GetNamedArray(NonLocalizable::QuickLayoutKeys); + + for (uint32_t i = 0; i < quickKeys.Size(); ++i) + { + if (auto quickKey = LayoutQuickKeyJSON::FromJson(quickKeys.GetObjectAt(i)); quickKey.has_value()) + { + quickKeysMap[quickKey->layoutUuid] = std::move(quickKey->key); + } + } + + return std::move(quickKeysMap); + } + catch (const winrt::hresult_error& e) + { + Logger::error(L"Parsing quick keys error: {}", e.message()); + return {}; + } + } + + json::JsonArray SerializeQuickKeys(const TLayoutQuickKeysMap& quickKeysMap) + { + json::JsonArray quickKeysJSON{}; + + for (const auto& [uuid, key] : quickKeysMap) + { + quickKeysJSON.Append(LayoutQuickKeyJSON::ToJson(LayoutQuickKeyJSON{ uuid, key })); + } + + return quickKeysJSON; + } } \ No newline at end of file diff --git a/src/modules/fancyzones/lib/JsonHelpers.h b/src/modules/fancyzones/lib/JsonHelpers.h index eb933721e8..52d3bc327c 100644 --- a/src/modules/fancyzones/lib/JsonHelpers.h +++ b/src/modules/fancyzones/lib/JsonHelpers.h @@ -55,9 +55,19 @@ namespace JSONHelpers static std::optional FromJson(const json::JsonObject& device); }; + struct LayoutQuickKeyJSON + { + std::wstring layoutUuid; + int key; + + static json::JsonObject ToJson(const LayoutQuickKeyJSON& device); + static std::optional FromJson(const json::JsonObject& device); + }; + using TAppZoneHistoryMap = std::unordered_map>; using TDeviceInfoMap = std::unordered_map; using TCustomZoneSetsMap = std::unordered_map; + using TLayoutQuickKeysMap = std::unordered_map; struct MonitorInfo { @@ -81,7 +91,7 @@ namespace JSONHelpers json::JsonObject GetPersistFancyZonesJSON(const std::wstring& zonesSettingsFileName, const std::wstring& appZoneHistoryFileName); - void SaveZoneSettings(const std::wstring& zonesSettingsFileName, const TDeviceInfoMap& deviceInfoMap, const TCustomZoneSetsMap& customZoneSetsMap); + void SaveZoneSettings(const std::wstring& zonesSettingsFileName, const TDeviceInfoMap& deviceInfoMap, const TCustomZoneSetsMap& customZoneSetsMap, const TLayoutQuickKeysMap& quickKeysMap); void SaveAppZoneHistory(const std::wstring& appZoneHistoryFileName, const TAppZoneHistoryMap& appZoneHistoryMap); TAppZoneHistoryMap ParseAppZoneHistory(const json::JsonObject& fancyZonesDataJSON); @@ -92,4 +102,7 @@ namespace JSONHelpers TCustomZoneSetsMap ParseCustomZoneSets(const json::JsonObject& fancyZonesDataJSON); json::JsonArray SerializeCustomZoneSets(const TCustomZoneSetsMap& customZoneSetsMap); + + TLayoutQuickKeysMap ParseQuickKeys(const json::JsonObject& fancyZonesDataJSON); + json::JsonArray SerializeQuickKeys(const TLayoutQuickKeysMap& quickKeysMap); } diff --git a/src/modules/fancyzones/lib/MonitorWorkAreaHandler.cpp b/src/modules/fancyzones/lib/MonitorWorkAreaHandler.cpp index 049cdae0ae..ebad94a9ae 100644 --- a/src/modules/fancyzones/lib/MonitorWorkAreaHandler.cpp +++ b/src/modules/fancyzones/lib/MonitorWorkAreaHandler.cpp @@ -17,6 +17,27 @@ winrt::com_ptr MonitorWorkAreaHandler::GetWorkArea(const GUID& desk return nullptr; } +winrt::com_ptr MonitorWorkAreaHandler::GetWorkAreaFromCursor(const GUID& desktopId) +{ + auto allMonitorsWorkArea = GetWorkArea(desktopId, NULL); + if (allMonitorsWorkArea) + { + // First, check if there's a work area spanning all monitors (signalled by the NULL monitor handle) + return allMonitorsWorkArea; + } + else + { + // Otherwise, look for the work area based on cursor position + POINT cursorPoint; + if (!GetCursorPos(&cursorPoint)) + { + return nullptr; + } + + return GetWorkArea(desktopId, MonitorFromPoint(cursorPoint, MONITOR_DEFAULTTONULL)); + } +} + winrt::com_ptr MonitorWorkAreaHandler::GetWorkArea(HWND window) { GUID desktopId{}; diff --git a/src/modules/fancyzones/lib/MonitorWorkAreaHandler.h b/src/modules/fancyzones/lib/MonitorWorkAreaHandler.h index 10f9df7dd9..a876d62275 100644 --- a/src/modules/fancyzones/lib/MonitorWorkAreaHandler.h +++ b/src/modules/fancyzones/lib/MonitorWorkAreaHandler.h @@ -29,6 +29,16 @@ public: */ winrt::com_ptr GetWorkArea(const GUID& desktopId, HMONITOR monitor); + /** + * Get work area based on virtual desktop id and the current cursor position. + * + * @param[in] desktopId Virtual desktop identifier. + * + * @returns Object representing single work area, interface to all actions available on work area + * (e.g. moving windows through zone layout specified for that work area). + */ + winrt::com_ptr GetWorkAreaFromCursor(const GUID& desktopId); + /** * Get work area on which specified window is located. * diff --git a/src/modules/fancyzones/lib/Resources.resx b/src/modules/fancyzones/lib/Resources.resx index 641609a08e..f0dff6271a 100644 --- a/src/modules/fancyzones/lib/Resources.resx +++ b/src/modules/fancyzones/lib/Resources.resx @@ -247,4 +247,10 @@ Failed to save the FancyZones settings. Please retry again later, if the problem persists report the bug to "Report bug to" will have a URL after. FancyZone is a product name, keep as is. + + Enable quick layout switch + + + Flash zones when switching layout + \ No newline at end of file diff --git a/src/modules/fancyzones/lib/Settings.cpp b/src/modules/fancyzones/lib/Settings.cpp index 137d813579..111a50c317 100644 --- a/src/modules/fancyzones/lib/Settings.cpp +++ b/src/modules/fancyzones/lib/Settings.cpp @@ -21,6 +21,8 @@ namespace NonLocalizable const wchar_t AppLastZoneMoveWindowsID[] = L"fancyzones_appLastZone_moveWindows"; const wchar_t OpenWindowOnActiveMonitorID[] = L"fancyzones_openWindowOnActiveMonitor"; const wchar_t RestoreSizeID[] = L"fancyzones_restoreSize"; + const wchar_t QuickLayoutSwitch[] = L"fancyzones_quickLayoutSwitch"; + const wchar_t FlashZonesOnQuickSwitch[] = L"fancyzones_flashZonesOnQuickSwitch"; const wchar_t UseCursorPosEditorStartupScreenID[] = L"use_cursorpos_editor_startupscreen"; const wchar_t ShowOnAllMonitorsID[] = L"fancyzones_show_on_all_monitors"; const wchar_t SpanZonesAcrossMonitorsID[] = L"fancyzones_span_zones_across_monitors"; @@ -80,7 +82,7 @@ private: PCWSTR name; bool* value; int resourceId; - } m_configBools[14] = { + } m_configBools[16] = { { NonLocalizable::ShiftDragID, &m_settings.shiftDrag, IDS_SETTING_DESCRIPTION_SHIFTDRAG }, { NonLocalizable::MouseSwitchID, &m_settings.mouseSwitch, IDS_SETTING_DESCRIPTION_MOUSESWITCH }, { NonLocalizable::OverrideSnapHotKeysID, &m_settings.overrideSnapHotkeys, IDS_SETTING_DESCRIPTION_OVERRIDE_SNAP_HOTKEYS }, @@ -91,6 +93,8 @@ private: { NonLocalizable::AppLastZoneMoveWindowsID, &m_settings.appLastZone_moveWindows, IDS_SETTING_DESCRIPTION_APPLASTZONE_MOVEWINDOWS }, { NonLocalizable::OpenWindowOnActiveMonitorID, &m_settings.openWindowOnActiveMonitor, IDS_SETTING_DESCRIPTION_OPEN_WINDOW_ON_ACTIVE_MONITOR }, { NonLocalizable::RestoreSizeID, &m_settings.restoreSize, IDS_SETTING_DESCRIPTION_RESTORESIZE }, + { NonLocalizable::QuickLayoutSwitch, &m_settings.quickLayoutSwitch, IDS_SETTING_DESCRIPTION_QUICKLAYOUTSWITCH }, + { NonLocalizable::FlashZonesOnQuickSwitch, &m_settings.flashZonesOnQuickSwitch, IDS_SETTING_DESCRIPTION_FLASHZONESONQUICKSWITCH }, { NonLocalizable::UseCursorPosEditorStartupScreenID, &m_settings.use_cursorpos_editor_startupscreen, IDS_SETTING_DESCRIPTION_USE_CURSORPOS_EDITOR_STARTUPSCREEN }, { NonLocalizable::ShowOnAllMonitorsID, &m_settings.showZonesOnAllMonitors, IDS_SETTING_DESCRIPTION_SHOW_FANCY_ZONES_ON_ALL_MONITORS }, { NonLocalizable::SpanZonesAcrossMonitorsID, &m_settings.spanZonesAcrossMonitors, IDS_SETTING_DESCRIPTION_SPAN_ZONES_ACROSS_MONITORS }, diff --git a/src/modules/fancyzones/lib/Settings.h b/src/modules/fancyzones/lib/Settings.h index bba0301abb..03a1df5899 100644 --- a/src/modules/fancyzones/lib/Settings.h +++ b/src/modules/fancyzones/lib/Settings.h @@ -34,6 +34,8 @@ struct Settings bool appLastZone_moveWindows = false; bool openWindowOnActiveMonitor = false; bool restoreSize = false; + bool quickLayoutSwitch = true; + bool flashZonesOnQuickSwitch = true; bool use_cursorpos_editor_startupscreen = true; bool showZonesOnAllMonitors = false; bool spanZonesAcrossMonitors = false; diff --git a/src/modules/fancyzones/lib/ZoneWindow.cpp b/src/modules/fancyzones/lib/ZoneWindow.cpp index 3675f7011a..4c1485acba 100644 --- a/src/modules/fancyzones/lib/ZoneWindow.cpp +++ b/src/modules/fancyzones/lib/ZoneWindow.cpp @@ -124,8 +124,6 @@ public: MoveWindowIntoZoneByDirectionAndPosition(HWND window, DWORD vkCode, bool cycle) noexcept; IFACEMETHODIMP_(bool) ExtendWindowByDirectionAndPosition(HWND window, DWORD vkCode) noexcept; - IFACEMETHODIMP_(void) - CycleActiveZoneSet(DWORD vkCode) noexcept; IFACEMETHODIMP_(std::wstring) UniqueId() noexcept { return { m_uniqueId }; } IFACEMETHODIMP_(void) @@ -140,6 +138,8 @@ public: UpdateActiveZoneSet() noexcept; IFACEMETHODIMP_(void) ClearSelectedZones() noexcept; + IFACEMETHODIMP_(void) + FlashZones() noexcept; protected: static LRESULT CALLBACK s_WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lparam) noexcept; @@ -149,9 +149,8 @@ private: void CalculateZoneSet() noexcept; void UpdateActiveZoneSet(_In_opt_ IZoneSet* zoneSet) noexcept; LRESULT WndProc(UINT message, WPARAM wparam, LPARAM lparam) noexcept; - void OnKeyUp(WPARAM wparam) noexcept; std::vector ZonesFromPoint(POINT pt) noexcept; - void CycleActiveZoneSetInternal(DWORD wparam, Trace::ZoneWindow::InputMode mode) noexcept; + void SetAsTopmostWindow() noexcept; winrt::com_ptr m_host; HMONITOR m_monitor{}; @@ -165,7 +164,7 @@ private: WPARAM m_keyLast{}; size_t m_keyCycle{}; static const UINT m_showAnimationDuration = 200; // ms - static const UINT m_flashDuration = 700; // ms + static const UINT m_flashDuration = 1000; // ms std::unique_ptr m_zoneWindowDrawing; }; @@ -359,17 +358,6 @@ ZoneWindow::ExtendWindowByDirectionAndPosition(HWND window, DWORD vkCode) noexce return false; } -IFACEMETHODIMP_(void) -ZoneWindow::CycleActiveZoneSet(DWORD wparam) noexcept -{ - CycleActiveZoneSetInternal(wparam, Trace::ZoneWindow::InputMode::Keyboard); - - if (m_windowMoveSize) - { - InvalidateRect(m_window, nullptr, true); - } -} - IFACEMETHODIMP_(void) ZoneWindow::SaveWindowProcessToZoneIndex(HWND window) noexcept { @@ -392,23 +380,12 @@ ZoneWindow::SaveWindowProcessToZoneIndex(HWND window) noexcept IFACEMETHODIMP_(void) ZoneWindow::ShowZoneWindow() noexcept { - auto window = m_window; - if (!window) + if (m_window) { - return; + SetAsTopmostWindow(); + m_zoneWindowDrawing->DrawActiveZoneSet(m_activeZoneSet->GetZones(), m_highlightZone, m_host); + m_zoneWindowDrawing->Show(m_showAnimationDuration); } - - UINT flags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE; - - HWND windowInsertAfter = m_windowMoveSize; - if (windowInsertAfter == nullptr) - { - windowInsertAfter = HWND_TOPMOST; - } - - SetWindowPos(window, windowInsertAfter, 0, 0, 0, 0, flags); - m_zoneWindowDrawing->Show(m_showAnimationDuration); - m_zoneWindowDrawing->DrawActiveZoneSet(m_activeZoneSet->GetZones(), m_highlightZone, m_host); } IFACEMETHODIMP_(void) @@ -427,6 +404,10 @@ IFACEMETHODIMP_(void) ZoneWindow::UpdateActiveZoneSet() noexcept { CalculateZoneSet(); + if (m_window) + { + m_zoneWindowDrawing->DrawActiveZoneSet(m_activeZoneSet->GetZones(), m_highlightZone, m_host); + } } IFACEMETHODIMP_(void) @@ -439,6 +420,17 @@ ZoneWindow::ClearSelectedZones() noexcept } } +IFACEMETHODIMP_(void) +ZoneWindow::FlashZones() noexcept +{ + if (m_window) + { + SetAsTopmostWindow(); + m_zoneWindowDrawing->DrawActiveZoneSet(m_activeZoneSet->GetZones(), {}, m_host); + m_zoneWindowDrawing->Flash(m_flashDuration); + } +} + #pragma region private void ZoneWindow::InitializeZoneSets(const std::wstring& parentUniqueId) noexcept @@ -541,12 +533,6 @@ LRESULT ZoneWindow::WndProc(UINT message, WPARAM wparam, LPARAM lparam) noexcept case WM_ERASEBKGND: return 1; - case WM_PAINT: - { - m_zoneWindowDrawing->ForceRender(); - break; - } - default: { return DefWindowProc(m_window, message, wparam, lparam); @@ -555,18 +541,6 @@ LRESULT ZoneWindow::WndProc(UINT message, WPARAM wparam, LPARAM lparam) noexcept return 0; } -void ZoneWindow::OnKeyUp(WPARAM wparam) noexcept -{ - bool fRedraw = false; - Trace::ZoneWindow::KeyUp(wparam); - - if ((wparam >= '0') && (wparam <= '9')) - { - CycleActiveZoneSetInternal(static_cast(wparam), Trace::ZoneWindow::InputMode::Keyboard); - m_zoneWindowDrawing->DrawActiveZoneSet(m_activeZoneSet->GetZones(), m_highlightZone, m_host); - } -} - std::vector ZoneWindow::ZonesFromPoint(POINT pt) noexcept { if (m_activeZoneSet) @@ -576,52 +550,22 @@ std::vector ZoneWindow::ZonesFromPoint(POINT pt) noexcept return {}; } -void ZoneWindow::CycleActiveZoneSetInternal(DWORD wparam, Trace::ZoneWindow::InputMode mode) noexcept +void ZoneWindow::SetAsTopmostWindow() noexcept { - Trace::ZoneWindow::CycleActiveZoneSet(m_activeZoneSet, mode); - if (m_keyLast != wparam) + if (!m_window) { - m_keyCycle = 0; + return; } - m_keyLast = wparam; + UINT flags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE; - bool loopAround = true; - size_t const val = static_cast(wparam - L'0'); - size_t i = 0; - for (auto zoneSet : m_zoneSets) + HWND windowInsertAfter = m_windowMoveSize; + if (windowInsertAfter == nullptr) { - if (zoneSet->GetZones().size() == val) - { - if (i < m_keyCycle) - { - i++; - } - else - { - UpdateActiveZoneSet(zoneSet.get()); - loopAround = false; - break; - } - } + windowInsertAfter = HWND_TOPMOST; } - if ((m_keyCycle > 0) && loopAround) - { - // Cycling through a non-empty group and hit the end - m_keyCycle = 0; - OnKeyUp(wparam); - } - else - { - m_keyCycle++; - } - - if (m_host) - { - m_host->MoveWindowsOnActiveZoneSetChange(); - } - m_highlightZone = {}; + SetWindowPos(m_window, windowInsertAfter, 0, 0, 0, 0, flags); } #pragma endregion diff --git a/src/modules/fancyzones/lib/ZoneWindow.h b/src/modules/fancyzones/lib/ZoneWindow.h index 26dc63c9ad..708f4bd3c2 100644 --- a/src/modules/fancyzones/lib/ZoneWindow.h +++ b/src/modules/fancyzones/lib/ZoneWindow.h @@ -86,13 +86,6 @@ interface __declspec(uuid("{7F017528-8110-4FB3-BE41-F472969C2560}")) IZoneWindow * zones available in the given direction. */ IFACEMETHOD_(bool, ExtendWindowByDirectionAndPosition)(HWND window, DWORD vkCode) = 0; - /** - * Cycle through active zone layouts (giving hints about each layout). - * - * @param vkCode Pressed key representing layout index. - */ - IFACEMETHOD_(void, CycleActiveZoneSet)(DWORD vkCode) = 0; - /** * Save information about zone in which window was assigned, when closing the window. * Used once we open same window again to assign it to its previous zone. @@ -118,6 +111,10 @@ interface __declspec(uuid("{7F017528-8110-4FB3-BE41-F472969C2560}")) IZoneWindow * Clear the selected zones when this ZoneWindow loses focus. */ IFACEMETHOD_(void, ClearSelectedZones)() = 0; + /* + * Display the layout on the screen and then hide it. + */ + IFACEMETHOD_(void, FlashZones)() = 0; }; winrt::com_ptr MakeZoneWindow(IZoneWindowHost* host, HINSTANCE hinstance, HMONITOR monitor, diff --git a/src/modules/fancyzones/lib/ZoneWindowDrawing.cpp b/src/modules/fancyzones/lib/ZoneWindowDrawing.cpp index e87b86d70c..b47b62090f 100644 --- a/src/modules/fancyzones/lib/ZoneWindowDrawing.cpp +++ b/src/modules/fancyzones/lib/ZoneWindowDrawing.cpp @@ -19,18 +19,21 @@ float ZoneWindowDrawing::GetAnimationAlpha() // Lock is being held if (!m_animation) { - return 1.f; + return 0.f; } auto tNow = std::chrono::steady_clock().now(); auto alpha = (tNow - m_animation->tStart).count() / (1e6f * m_animation->duration); - if (alpha < 1.f) + + if (m_animation->fadeIn) { - return alpha; + // Return a positive value to avoid hiding + return std::clamp(alpha, 0.001f, 1.f); } else { - return 1.f; + // Quadratic function looks better + return std::clamp(1.f - alpha * alpha, 0.f, 1.f); } } @@ -100,28 +103,7 @@ ZoneWindowDrawing::ZoneWindowDrawing(HWND window) return; } - m_renderThread = std::thread([this]() { - while (!m_abortThread) - { - // Force repeated rendering while in the animation loop. - // Yield if low latency locking was requested - if (!m_lowLatencyLock) - { - float animationAlpha; - { - std::unique_lock lock(m_mutex); - animationAlpha = GetAnimationAlpha(); - } - - if (animationAlpha < 1.f) - { - m_shouldRender = true; - } - } - - Render(); - } - }); + m_renderThread = std::thread([this]() { RenderLoop(); }); } void ZoneWindowDrawing::Render() @@ -133,11 +115,14 @@ void ZoneWindowDrawing::Render() return; } - m_cv.wait(lock, [this]() { return (bool)m_shouldRender; }); + float animationAlpha = GetAnimationAlpha(); + + if (animationAlpha <= 0.f) + { + return; + } m_renderTarget->BeginDraw(); - - float animationAlpha = GetAnimationAlpha(); // Draw backdrop m_renderTarget->Clear(D2D1::ColorF(0.f, 0.f, 0.f, 0.f)); @@ -197,20 +182,49 @@ void ZoneWindowDrawing::Render() textBrush->Release(); } + // The lock must be released here, as EndDraw() will wait for vertical sync + lock.unlock(); + m_renderTarget->EndDraw(); - m_shouldRender = false; +} + +void ZoneWindowDrawing::RenderLoop() +{ + while (!m_abortThread) + { + float animationAlpha; + { + // The lock must be held by the caller when calling GetAnimationAlpha + std::unique_lock lock(m_mutex); + animationAlpha = GetAnimationAlpha(); + } + + // Check whether the animation expired and we need to hide the window + if (animationAlpha <= 0.f) + { + Hide(); + } + + { + // Wait here while rendering is disabled + std::unique_lock lock(m_mutex); + m_cv.wait(lock, [this]() { return (bool)m_shouldRender; }); + } + + Render(); + } } void ZoneWindowDrawing::Hide() { _TRACER_; - m_lowLatencyLock = true; std::unique_lock lock(m_mutex); - m_lowLatencyLock = false; - if (m_animation) + m_animation.reset(); + + if (m_shouldRender) { - m_animation.reset(); + m_shouldRender = false; ShowWindow(m_window, SW_HIDE); } } @@ -218,20 +232,40 @@ void ZoneWindowDrawing::Hide() void ZoneWindowDrawing::Show(unsigned animationMillis) { _TRACER_; - m_lowLatencyLock = true; std::unique_lock lock(m_mutex); - m_lowLatencyLock = false; - - if (!m_animation) + + if (!m_shouldRender) { ShowWindow(m_window, SW_SHOWNA); - if (animationMillis > 0) - { - m_animation.emplace(AnimationInfo{ std::chrono::steady_clock().now(), animationMillis }); - } - m_shouldRender = true; - m_cv.notify_all(); } + + animationMillis = max(animationMillis, 1); + + if (!m_animation || !m_animation->fadeIn) + { + m_animation.emplace(AnimationInfo{ std::chrono::steady_clock().now(), animationMillis, true }); + } + + m_shouldRender = true; + m_cv.notify_all(); +} + +void ZoneWindowDrawing::Flash(unsigned animationMillis) +{ + _TRACER_; + std::unique_lock lock(m_mutex); + + if (!m_shouldRender) + { + ShowWindow(m_window, SW_SHOWNA); + } + + animationMillis = max(animationMillis, 1); + + m_animation.emplace(AnimationInfo{ std::chrono::steady_clock().now(), animationMillis, false }); + + m_shouldRender = true; + m_cv.notify_all(); } void ZoneWindowDrawing::DrawActiveZoneSet(const IZoneSet::ZonesMap& zones, @@ -239,9 +273,7 @@ void ZoneWindowDrawing::DrawActiveZoneSet(const IZoneSet::ZonesMap& zones, winrt::com_ptr host) { _TRACER_; - m_lowLatencyLock = true; std::unique_lock lock(m_mutex); - m_lowLatencyLock = false; m_sceneRects = {}; @@ -299,18 +331,6 @@ void ZoneWindowDrawing::DrawActiveZoneSet(const IZoneSet::ZonesMap& zones, m_sceneRects.push_back(drawableRect); } } - - m_shouldRender = true; - m_cv.notify_all(); -} - -void ZoneWindowDrawing::ForceRender() -{ - m_lowLatencyLock = true; - std::unique_lock lock(m_mutex); - m_lowLatencyLock = false; - m_shouldRender = true; - m_cv.notify_all(); } ZoneWindowDrawing::~ZoneWindowDrawing() diff --git a/src/modules/fancyzones/lib/ZoneWindowDrawing.h b/src/modules/fancyzones/lib/ZoneWindowDrawing.h index 1485d86641..b9cceb16b1 100644 --- a/src/modules/fancyzones/lib/ZoneWindowDrawing.h +++ b/src/modules/fancyzones/lib/ZoneWindowDrawing.h @@ -26,6 +26,7 @@ class ZoneWindowDrawing { std::chrono::steady_clock::time_point tStart; unsigned duration; + bool fadeIn; }; HWND m_window = nullptr; @@ -42,10 +43,10 @@ class ZoneWindowDrawing static D2D1_COLOR_F ConvertColor(COLORREF color); static D2D1_RECT_F ConvertRect(RECT rect); void Render(); + void RenderLoop(); std::atomic m_shouldRender = false; std::atomic m_abortThread = false; - std::atomic m_lowLatencyLock = false; std::condition_variable m_cv; std::thread m_renderThread; @@ -55,7 +56,7 @@ public: ZoneWindowDrawing(HWND window); void Hide(); void Show(unsigned animationMillis); - void ForceRender(); + void Flash(unsigned animationMillis); void DrawActiveZoneSet(const IZoneSet::ZonesMap& zones, const std::vector& highlightZones, winrt::com_ptr host); diff --git a/src/modules/fancyzones/lib/trace.cpp b/src/modules/fancyzones/lib/trace.cpp index 9961c2f8f4..e1265f58b1 100644 --- a/src/modules/fancyzones/lib/trace.cpp +++ b/src/modules/fancyzones/lib/trace.cpp @@ -17,6 +17,7 @@ #define EventZoneWindowKeyUpKey "FancyZones_ZoneWindowKeyUp" #define EventMoveSizeEndKey "FancyZones_MoveSizeEnd" #define EventCycleActiveZoneSetKey "FancyZones_CycleActiveZoneSet" +#define EventQuickLayoutSwitchKey "FancyZones_QuickLayoutSwitch" #define EventEnabledKey "Enabled" #define PressedKeyCodeKey "Hotkey" @@ -25,6 +26,7 @@ #define MoveSizeActionKey "InMoveSize" #define AppsInHistoryCountKey "AppsInHistoryCount" #define CustomZoneSetCountKey "CustomZoneSetCount" +#define LayoutUsingQuickKeyCountKey "LayoutUsingQuickKeyCount" #define NumberOfZonesForEachCustomZoneSetKey "NumberOfZonesForEachCustomZoneSet" #define ActiveZoneSetsCountKey "ActiveZoneSetsCount" #define ActiveZoneSetsListKey "ActiveZoneSetsList" @@ -40,6 +42,8 @@ #define MoveWindowsToLastZoneOnAppOpeningKey "MoveWindowsToLastZoneOnAppOpening" #define OpenWindowOnActiveMonitorKey "OpenWindowOnActiveMonitor" #define RestoreSizeKey "RestoreSize" +#define QuickLayoutSwitchKey "QuickLayoutSwitch" +#define FlashZonesOnQuickSwitchKey "FlashZonesOnQuickSwitch" #define UseCursorPosOnEditorStartupKey "UseCursorPosOnEditorStartup" #define ShowZonesOnAllMonitorsKey "ShowZonesOnAllMonitors" #define SpanZonesAcrossMonitorsKey "SpanZonesAcrossMonitors" @@ -56,6 +60,7 @@ #define NumberOfWindowsKey "NumberOfWindows" #define InputModeKey "InputMode" #define OverlappingZonesAlgorithmKey "OverlappingZonesAlgorithm" +#define QuickLayoutSwitchedWithShortcutUsed "ShortcutUsed" TRACELOGGING_DEFINE_PROVIDER( g_hProvider, @@ -128,6 +133,7 @@ void Trace::FancyZones::DataChanged() noexcept int appsHistorySize = static_cast(data.GetAppZoneHistoryMap().size()); const auto& customZones = data.GetCustomZoneSetsMap(); const auto& devices = data.GetDeviceInfoMap(); + const auto& quickKeys = data.GetLayoutQuickKeys(); std::unique_ptr customZonesArray(new (std::nothrow) INT32[customZones.size()]); if (!customZonesArray) @@ -149,7 +155,7 @@ void Trace::FancyZones::DataChanged() noexcept return 0; }; - //NumberOfZonesForEachCustomZoneSet + // NumberOfZonesForEachCustomZoneSet int i = 0; for (const auto& [id, customZoneSetData] : customZones) { @@ -157,7 +163,7 @@ void Trace::FancyZones::DataChanged() noexcept i++; } - //ActiveZoneSetsList + // ActiveZoneSetsList std::wstring activeZoneSetInfo; for (const auto& [id, device] : devices) { @@ -201,7 +207,8 @@ void Trace::FancyZones::DataChanged() noexcept TraceLoggingInt32(static_cast(customZones.size()), CustomZoneSetCountKey), TraceLoggingInt32Array(customZonesArray.get(), static_cast(customZones.size()), NumberOfZonesForEachCustomZoneSetKey), TraceLoggingInt32(static_cast(devices.size()), ActiveZoneSetsCountKey), - TraceLoggingWideString(activeZoneSetInfo.c_str(), ActiveZoneSetsListKey)); + TraceLoggingWideString(activeZoneSetInfo.c_str(), ActiveZoneSetsListKey), + TraceLoggingInt32(static_cast(quickKeys.size()), LayoutUsingQuickKeyCountKey)); } void Trace::FancyZones::EditorLaunched(int value) noexcept @@ -227,6 +234,16 @@ void Trace::FancyZones::Error(const DWORD errorCode, std::wstring errorMessage, TraceLoggingValue(errorMessage.c_str(), "ErrorMessage")); } +void Trace::FancyZones::QuickLayoutSwitched(bool shortcutUsed) noexcept +{ + TraceLoggingWrite( + g_hProvider, + EventQuickLayoutSwitchKey, + ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), + TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE), + TraceLoggingBoolean(shortcutUsed, QuickLayoutSwitchedWithShortcutUsed)); +} + void Trace::SettingsChanged(const Settings& settings) noexcept { const auto& editorHotkey = settings.editorHotkey; @@ -253,6 +270,8 @@ void Trace::SettingsChanged(const Settings& settings) noexcept TraceLoggingBoolean(settings.appLastZone_moveWindows, MoveWindowsToLastZoneOnAppOpeningKey), TraceLoggingBoolean(settings.openWindowOnActiveMonitor, OpenWindowOnActiveMonitorKey), TraceLoggingBoolean(settings.restoreSize, RestoreSizeKey), + TraceLoggingBoolean(settings.quickLayoutSwitch, QuickLayoutSwitchKey), + TraceLoggingBoolean(settings.flashZonesOnQuickSwitch, FlashZonesOnQuickSwitchKey), TraceLoggingBoolean(settings.use_cursorpos_editor_startupscreen, UseCursorPosOnEditorStartupKey), TraceLoggingBoolean(settings.showZonesOnAllMonitors, ShowZonesOnAllMonitorsKey), TraceLoggingBoolean(settings.spanZonesAcrossMonitors, SpanZonesAcrossMonitorsKey), diff --git a/src/modules/fancyzones/lib/trace.h b/src/modules/fancyzones/lib/trace.h index d33c4734cf..59d42f0f25 100644 --- a/src/modules/fancyzones/lib/trace.h +++ b/src/modules/fancyzones/lib/trace.h @@ -17,6 +17,7 @@ public: static void DataChanged() noexcept; static void EditorLaunched(int value) noexcept; static void Error(const DWORD errorCode, std::wstring errorMessage, std::wstring methodName) noexcept; + static void QuickLayoutSwitched(bool shortcutUsed) noexcept; }; static void SettingsChanged(const Settings& settings) noexcept; diff --git a/src/modules/fancyzones/tests/UnitTests/FancyZones.Spec.cpp b/src/modules/fancyzones/tests/UnitTests/FancyZones.Spec.cpp index d52eabb245..b8077c768b 100644 --- a/src/modules/fancyzones/tests/UnitTests/FancyZones.Spec.cpp +++ b/src/modules/fancyzones/tests/UnitTests/FancyZones.Spec.cpp @@ -78,6 +78,8 @@ namespace FancyZonesUnitTests ptSettings.add_bool_toggle(L"fancyzones_zoneSetChange_moveWindows", IDS_SETTING_DESCRIPTION_ZONESETCHANGE_MOVEWINDOWS, settings.zoneSetChange_moveWindows); ptSettings.add_bool_toggle(L"fancyzones_appLastZone_moveWindows", IDS_SETTING_DESCRIPTION_APPLASTZONE_MOVEWINDOWS, settings.appLastZone_moveWindows); ptSettings.add_bool_toggle(L"fancyzones_restoreSize", IDS_SETTING_DESCRIPTION_RESTORESIZE, settings.restoreSize); + ptSettings.add_bool_toggle(L"fancyzones_quickLayoutSwitch", IDS_SETTING_DESCRIPTION_QUICKLAYOUTSWITCH, settings.quickLayoutSwitch); + ptSettings.add_bool_toggle(L"fancyzones_flashZonesOnQuickSwitch", IDS_SETTING_DESCRIPTION_FLASHZONESONQUICKSWITCH, settings.flashZonesOnQuickSwitch); ptSettings.add_bool_toggle(L"use_cursorpos_editor_startupscreen", IDS_SETTING_DESCRIPTION_USE_CURSORPOS_EDITOR_STARTUPSCREEN, settings.use_cursorpos_editor_startupscreen); ptSettings.add_bool_toggle(L"fancyzones_show_on_all_monitors", IDS_SETTING_DESCRIPTION_SHOW_FANCY_ZONES_ON_ALL_MONITORS, settings.showZonesOnAllMonitors); ptSettings.add_bool_toggle(L"fancyzones_multi_monitor_mode", IDS_SETTING_DESCRIPTION_SPAN_ZONES_ACROSS_MONITORS, settings.spanZonesAcrossMonitors); @@ -303,6 +305,8 @@ namespace FancyZonesUnitTests ptSettings.add_bool_toggle(L"fancyzones_zoneSetChange_moveWindows", IDS_SETTING_DESCRIPTION_ZONESETCHANGE_MOVEWINDOWS, settings.zoneSetChange_moveWindows); ptSettings.add_bool_toggle(L"fancyzones_appLastZone_moveWindows", IDS_SETTING_DESCRIPTION_APPLASTZONE_MOVEWINDOWS, settings.appLastZone_moveWindows); ptSettings.add_bool_toggle(L"fancyzones_restoreSize", IDS_SETTING_DESCRIPTION_RESTORESIZE, settings.restoreSize); + ptSettings.add_bool_toggle(L"fancyzones_quickLayoutSwitch", IDS_SETTING_DESCRIPTION_QUICKLAYOUTSWITCH, settings.quickLayoutSwitch); + ptSettings.add_bool_toggle(L"fancyzones_flashZonesOnQuickSwitch", IDS_SETTING_DESCRIPTION_FLASHZONESONQUICKSWITCH, settings.flashZonesOnQuickSwitch); ptSettings.add_bool_toggle(L"use_cursorpos_editor_startupscreen", IDS_SETTING_DESCRIPTION_USE_CURSORPOS_EDITOR_STARTUPSCREEN, settings.use_cursorpos_editor_startupscreen); ptSettings.add_bool_toggle(L"fancyzones_show_on_all_monitors", IDS_SETTING_DESCRIPTION_SHOW_FANCY_ZONES_ON_ALL_MONITORS, settings.showZonesOnAllMonitors); ptSettings.add_bool_toggle(L"fancyzones_multi_monitor_mode", IDS_SETTING_DESCRIPTION_SPAN_ZONES_ACROSS_MONITORS, settings.spanZonesAcrossMonitors); diff --git a/src/modules/fancyzones/tests/UnitTests/JsonHelpers.Tests.cpp b/src/modules/fancyzones/tests/UnitTests/JsonHelpers.Tests.cpp index 094681c695..76aaadeb7f 100644 --- a/src/modules/fancyzones/tests/UnitTests/JsonHelpers.Tests.cpp +++ b/src/modules/fancyzones/tests/UnitTests/JsonHelpers.Tests.cpp @@ -1539,6 +1539,73 @@ namespace FancyZonesUnitTests compareJsonArrays(expected, actual); } + TEST_METHOD(QuickLayoutKeysParse) + { + const std::wstring zoneUuid = L"{33A2B101-06E0-437B-A61E-CDBECF502906}"; + LayoutQuickKeyJSON expected{ zoneUuid, 2 }; + json::JsonArray array; + array.Append(LayoutQuickKeyJSON::ToJson(expected)); + + json::JsonObject json; + json.SetNamedValue(L"quick-layout-keys", json::JsonValue::Parse(array.Stringify())); + + const auto& quickKeysMap = ParseQuickKeys(json); + + Assert::AreEqual((size_t)array.Size(), quickKeysMap.size()); + + Assert::IsTrue(quickKeysMap.find(zoneUuid) != quickKeysMap.end()); + int actualKey = quickKeysMap.find(zoneUuid)->second; + Assert::AreEqual((int)expected.key, actualKey); + } + + TEST_METHOD (QuickLayoutKeysParseEmpty) + { + json::JsonArray array; + json::JsonObject json; + json.SetNamedValue(L"quick-layout-keys", json::JsonValue::Parse(array.Stringify())); + + const auto& quickKeysMap = ParseQuickKeys(json); + + Assert::IsTrue(quickKeysMap.empty()); + } + + TEST_METHOD (QuickLayoutKeysParseInvalid) + { + const std::wstring invalidZoneUuid = L"{33A2B101-06E0-437B-}"; + LayoutQuickKeyJSON expected{ invalidZoneUuid, 2 }; + json::JsonArray array; + array.Append(LayoutQuickKeyJSON::ToJson(expected)); + + json::JsonObject json; + json.SetNamedValue(L"quick-layout-keys", json::JsonValue::Parse(array.Stringify())); + + const auto& quickKeysMap = ParseQuickKeys(json); + + Assert::IsTrue(quickKeysMap.empty()); + } + + TEST_METHOD (QuickLayoutKeysParseMissed) + { + json::JsonObject json; + + const auto& quickKeysMap = ParseQuickKeys(json); + + Assert::IsTrue(quickKeysMap.empty()); + } + + TEST_METHOD (QuickLayoutKeysSerialize) + { + json::JsonArray expected; + expected.Append(LayoutQuickKeyJSON::ToJson(LayoutQuickKeyJSON{ L"{33A2B101-06E0-437B-A61E-CDBECF502906}", 3})); + json::JsonObject json; + json.SetNamedValue(L"quick-layout-keys", json::JsonValue::Parse(expected.Stringify())); + + const auto& quickKeysMap = ParseQuickKeys(json); + + auto actual = SerializeQuickKeys(quickKeysMap); + compareJsonArrays(expected, actual); + } + TEST_METHOD (SetActiveZoneSet) { FancyZonesData data; @@ -1640,14 +1707,17 @@ namespace FancyZonesUnitTests }; AppZoneHistoryJSON appZoneHistory{ L"app-path", std::vector{ data } }; DeviceInfoJSON deviceInfo{ L"{33A2B101-06E0-437B-A61E-CDBECF502906}", DeviceInfoData{ ZoneSetData{ L"uuid", ZoneSetLayoutType::Custom }, true, 16, 3 } }; - json::JsonArray zoneSetsArray, appZonesArray, deviceInfoArray; + LayoutQuickKeyJSON quickKeys{ L"{33A2B101-06E0-437B-A61E-CDBECF502906}", 1 }; + json::JsonArray zoneSetsArray, appZonesArray, deviceInfoArray, quickKeysArray; zoneSetsArray.Append(CustomZoneSetJSON::ToJson(zoneSets)); appZonesArray.Append(AppZoneHistoryJSON::ToJson(appZoneHistory)); deviceInfoArray.Append(DeviceInfoJSON::ToJson(deviceInfo)); + quickKeysArray.Append(LayoutQuickKeyJSON::ToJson(quickKeys)); json::JsonObject fancyZones; fancyZones.SetNamedValue(L"custom-zone-sets", zoneSetsArray); fancyZones.SetNamedValue(L"app-zone-history", appZonesArray); fancyZones.SetNamedValue(L"devices", deviceInfoArray); + fancyZones.SetNamedValue(L"quick-layout-keys", quickKeysArray); json::to_file(jsonPath, fancyZones); @@ -1664,6 +1734,7 @@ namespace FancyZonesUnitTests Assert::IsFalse(fancyZonesData.GetCustomZoneSetsMap().empty()); Assert::IsFalse(fancyZonesData.GetCustomZoneSetsMap().empty()); Assert::IsFalse(fancyZonesData.GetCustomZoneSetsMap().empty()); + Assert::IsFalse(fancyZonesData.GetLayoutQuickKeys().empty()); } TEST_METHOD (LoadFancyZonesDataFromCroppedJson) diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ConfigDefaults.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ConfigDefaults.cs index 12a4819063..aa8299b3a7 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ConfigDefaults.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ConfigDefaults.cs @@ -14,5 +14,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library // Fancy Zones Default Flags. public static readonly bool DefaultFancyzonesShiftDrag = true; public static readonly bool DefaultUseCursorposEditorStartupscreen = true; + public static readonly bool DefaultFancyzonesQuickLayoutSwitch = true; + public static readonly bool DefaultFancyzonesFlashZonesOnQuickSwitch = true; } } diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/FZConfigProperties.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/FZConfigProperties.cs index f515f2e852..56ce046585 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/FZConfigProperties.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/FZConfigProperties.cs @@ -24,6 +24,8 @@ namespace Microsoft.PowerToys.Settings.UI.Library FancyzonesAppLastZoneMoveWindows = new BoolProperty(); FancyzonesOpenWindowOnActiveMonitor = new BoolProperty(); FancyzonesRestoreSize = new BoolProperty(); + FancyzonesQuickLayoutSwitch = new BoolProperty(ConfigDefaults.DefaultFancyzonesQuickLayoutSwitch); + FancyzonesFlashZonesOnQuickSwitch = new BoolProperty(ConfigDefaults.DefaultFancyzonesFlashZonesOnQuickSwitch); UseCursorposEditorStartupscreen = new BoolProperty(ConfigDefaults.DefaultUseCursorposEditorStartupscreen); FancyzonesShowOnAllMonitors = new BoolProperty(); FancyzonesSpanZonesAcrossMonitors = new BoolProperty(); @@ -69,6 +71,12 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonPropertyName("fancyzones_restoreSize")] public BoolProperty FancyzonesRestoreSize { get; set; } + [JsonPropertyName("fancyzones_quickLayoutSwitch")] + public BoolProperty FancyzonesQuickLayoutSwitch { get; set; } + + [JsonPropertyName("fancyzones_flashZonesOnQuickSwitch")] + public BoolProperty FancyzonesFlashZonesOnQuickSwitch { get; set; } + [JsonPropertyName("use_cursorpos_editor_startupscreen")] public BoolProperty UseCursorposEditorStartupscreen { get; set; } diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/FancyZonesViewModel.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/FancyZonesViewModel.cs index d21db334d0..82d6497e5d 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/FancyZonesViewModel.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/FancyZonesViewModel.cs @@ -71,6 +71,8 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels _appLastZoneMoveWindows = Settings.Properties.FancyzonesAppLastZoneMoveWindows.Value; _openWindowOnActiveMonitor = Settings.Properties.FancyzonesOpenWindowOnActiveMonitor.Value; _restoreSize = Settings.Properties.FancyzonesRestoreSize.Value; + _quickLayoutSwitch = Settings.Properties.FancyzonesQuickLayoutSwitch.Value; + _flashZonesOnQuickLayoutSwitch = Settings.Properties.FancyzonesFlashZonesOnQuickSwitch.Value; _useCursorPosEditorStartupScreen = Settings.Properties.UseCursorposEditorStartupscreen.Value; _showOnAllMonitors = Settings.Properties.FancyzonesShowOnAllMonitors.Value; _spanZonesAcrossMonitors = Settings.Properties.FancyzonesSpanZonesAcrossMonitors.Value; @@ -107,6 +109,8 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels private bool _openWindowOnActiveMonitor; private bool _spanZonesAcrossMonitors; private bool _restoreSize; + private bool _quickLayoutSwitch; + private bool _flashZonesOnQuickLayoutSwitch; private bool _useCursorPosEditorStartupScreen; private bool _showOnAllMonitors; private bool _makeDraggedWindowTransparent; @@ -138,6 +142,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels SendConfigMSG(snd.ToString()); OnPropertyChanged(nameof(IsEnabled)); OnPropertyChanged(nameof(SnapHotkeysCategoryEnabled)); + OnPropertyChanged(nameof(QuickSwitchEnabled)); } } } @@ -150,6 +155,14 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels } } + public bool QuickSwitchEnabled + { + get + { + return _isEnabled && _quickLayoutSwitch; + } + } + public bool ShiftDrag { get @@ -374,6 +387,43 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels } } + public bool QuickLayoutSwitch + { + get + { + return _quickLayoutSwitch; + } + + set + { + if (value != _quickLayoutSwitch) + { + _quickLayoutSwitch = value; + Settings.Properties.FancyzonesQuickLayoutSwitch.Value = value; + NotifyPropertyChanged(); + OnPropertyChanged(nameof(QuickSwitchEnabled)); + } + } + } + + public bool FlashZonesOnQuickSwitch + { + get + { + return _flashZonesOnQuickLayoutSwitch; + } + + set + { + if (value != _flashZonesOnQuickLayoutSwitch) + { + _flashZonesOnQuickLayoutSwitch = value; + Settings.Properties.FancyzonesFlashZonesOnQuickSwitch.Value = value; + NotifyPropertyChanged(); + } + } + } + public bool UseCursorPosEditorStartupScreen { get diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw index 9cc66b5d46..e8a429e8f0 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw @@ -1176,4 +1176,13 @@ Win + Shift + O to toggle your video Move the color up + + Flash zones when switching layout + + + Enable quick layout switch + + + Quick layout switch + \ No newline at end of file diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/FancyZonesPage.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/FancyZonesPage.xaml index f20aa59cde..a72cec9508 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/FancyZonesPage.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/FancyZonesPage.xaml @@ -189,6 +189,20 @@ IsEnabled="{x:Bind Mode=OneWay, Path=ViewModel.IsEnabled}"/> + + + + + + From 718289c115de77542ea54bfdaaa9deda503ac820 Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Thu, 25 Mar 2021 16:04:56 +0200 Subject: [PATCH 43/82] Settings telemetry for ColorPicker (#10417) --- src/common/interop/interop.cpp | 4 +++ src/common/interop/shared_constants.h | 2 ++ .../colorPicker/ColorPicker/dllmain.cpp | 11 +++++++ .../Helpers/NativeEventWaiter.cs | 16 ++-------- .../ColorPickerUI/Settings/IUserSettings.cs | 2 ++ .../ColorPickerUI/Settings/UserSettings.cs | 23 +++++++++++++ .../Telemetry/ColorPickerSettings.cs | 32 +++++++++++++++++++ .../ColorPickerUI/ViewModels/MainViewModel.cs | 6 ++-- .../interface/powertoy_module_interface.h | 10 ++++++ .../launcher/Microsoft.Launcher/dllmain.cpp | 15 ++------- 10 files changed, 91 insertions(+), 30 deletions(-) create mode 100644 src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSettings.cs diff --git a/src/common/interop/interop.cpp b/src/common/interop/interop.cpp index f2a944703d..b54239489e 100644 --- a/src/common/interop/interop.cpp +++ b/src/common/interop/interop.cpp @@ -149,6 +149,10 @@ public return gcnew String(CommonSharedConstants::RUN_SEND_SETTINGS_TELEMETRY_EVENT); } + static String ^ ColorPickerSendSettingsTelemetryEvent() { + return gcnew String(CommonSharedConstants::COLOR_PICKER_SEND_SETTINGS_TELEMETRY_EVENT); + } + static String ^ ShowColorPickerSharedEvent() { return gcnew String(CommonSharedConstants::SHOW_COLOR_PICKER_SHARED_EVENT); } diff --git a/src/common/interop/shared_constants.h b/src/common/interop/shared_constants.h index 2c36a450a7..da719abf06 100644 --- a/src/common/interop/shared_constants.h +++ b/src/common/interop/shared_constants.h @@ -17,6 +17,8 @@ namespace CommonSharedConstants const wchar_t RUN_SEND_SETTINGS_TELEMETRY_EVENT[] = L"Local\\PowerToysRunInvokeEvent-638ec522-0018-4b96-837d-6bd88e06f0d6"; + const wchar_t COLOR_PICKER_SEND_SETTINGS_TELEMETRY_EVENT[] = L"Local\\ColorPickerSettingsTelemetryEvent-6c7071d8-4014-46ec-b687-913bd8a422f1"; + // Path to the event used to show Color Picker const wchar_t SHOW_COLOR_PICKER_SHARED_EVENT[] = L"Local\\ShowColorPickerEvent-8c46be2a-3e05-4186-b56b-4ae986ef2525"; diff --git a/src/modules/colorPicker/ColorPicker/dllmain.cpp b/src/modules/colorPicker/ColorPicker/dllmain.cpp index 86bdab7d15..73e9853a2d 100644 --- a/src/modules/colorPicker/ColorPicker/dllmain.cpp +++ b/src/modules/colorPicker/ColorPicker/dllmain.cpp @@ -9,6 +9,7 @@ #include #include +#include BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, @@ -47,11 +48,14 @@ private: // Time to wait for process to close after sending WM_CLOSE signal static const int MAX_WAIT_MILLISEC = 10000; + HANDLE send_telemetry_event; + public: ColorPicker() { app_name = GET_RESOURCE_STRING(IDS_COLORPICKER_NAME); app_key = ColorPickerConstants::ModuleKey; + send_telemetry_event = CreateDefaultEvent(CommonSharedConstants::COLOR_PICKER_SEND_SETTINGS_TELEMETRY_EVENT); } ~ColorPicker() @@ -119,6 +123,7 @@ public: virtual void enable() { + ResetEvent(send_telemetry_event); // use only with new settings? if (UseNewSettings()) { @@ -144,6 +149,7 @@ public: { if (m_enabled) { + ResetEvent(send_telemetry_event); TerminateProcess(m_hProcess, 1); } @@ -154,6 +160,11 @@ public: { return m_enabled; } + + virtual void send_settings_telemetry() override + { + SetEvent(send_telemetry_event); + } }; extern "C" __declspec(dllexport) PowertoyModuleIface* __cdecl powertoy_create() diff --git a/src/modules/colorPicker/ColorPickerUI/Helpers/NativeEventWaiter.cs b/src/modules/colorPicker/ColorPickerUI/Helpers/NativeEventWaiter.cs index ae561f73e3..3f95eeaea6 100644 --- a/src/modules/colorPicker/ColorPickerUI/Helpers/NativeEventWaiter.cs +++ b/src/modules/colorPicker/ColorPickerUI/Helpers/NativeEventWaiter.cs @@ -3,25 +3,13 @@ // See the LICENSE file in the project root for more information. using System; -using System.ComponentModel.Composition; using System.Threading; using System.Windows; -using interop; namespace ColorPicker.Helpers { - [Export(typeof(NativeEventWaiter))] - public class NativeEventWaiter + public static class NativeEventWaiter { - private AppStateHandler _appStateHandler; - - [ImportingConstructor] - public NativeEventWaiter(AppStateHandler appStateHandler) - { - _appStateHandler = appStateHandler; - WaitForEventLoop(Constants.ShowColorPickerSharedEvent(), _appStateHandler.StartUserSession); - } - public static void WaitForEventLoop(string eventName, Action callback) { new Thread(() => @@ -31,7 +19,7 @@ namespace ColorPicker.Helpers { if (eventHandle.WaitOne()) { - Logger.LogInfo("Successfully waited for SHOW_COLOR_PICKER_EVENT"); + Logger.LogInfo($"Successfully waited for {eventName}"); Application.Current.Dispatcher.Invoke(callback); } } diff --git a/src/modules/colorPicker/ColorPickerUI/Settings/IUserSettings.cs b/src/modules/colorPicker/ColorPickerUI/Settings/IUserSettings.cs index 11d5db1ed2..8d44be3d11 100644 --- a/src/modules/colorPicker/ColorPickerUI/Settings/IUserSettings.cs +++ b/src/modules/colorPicker/ColorPickerUI/Settings/IUserSettings.cs @@ -25,5 +25,7 @@ namespace ColorPicker.Settings ObservableCollection VisibleColorFormats { get; } SettingItem ShowColorName { get; } + + void SendSettingsTelemetry(); } } diff --git a/src/modules/colorPicker/ColorPickerUI/Settings/UserSettings.cs b/src/modules/colorPicker/ColorPickerUI/Settings/UserSettings.cs index 013fa5e68d..5f9d461f84 100644 --- a/src/modules/colorPicker/ColorPickerUI/Settings/UserSettings.cs +++ b/src/modules/colorPicker/ColorPickerUI/Settings/UserSettings.cs @@ -13,6 +13,7 @@ using ColorPicker.Common; using Microsoft.PowerToys.Settings.UI.Library; using Microsoft.PowerToys.Settings.UI.Library.Enumerations; using Microsoft.PowerToys.Settings.UI.Library.Utilities; +using Microsoft.PowerToys.Telemetry; namespace ColorPicker.Settings { @@ -160,5 +161,27 @@ namespace ColorPicker.Settings } } } + + public void SendSettingsTelemetry() + { + Logger.LogInfo("Sending settings telemetry"); + var settings = _settingsUtils.GetSettingsOrDefault(ColorPickerModuleName); + var properties = settings?.Properties; + if (properties == null) + { + Logger.LogError("Failed to send settings telemetry"); + return; + } + + var telemetrySettings = new Telemetry.ColorPickerSettings(properties.VisibleColorFormats) + { + ActivationShortcut = properties.ActivationShortcut.ToString(), + ActivationBehaviour = properties.ActivationAction.ToString(), + ColorFormatForClipboard = properties.CopiedColorRepresentation.ToString(), + ShowColorName = properties.ShowColorName, + }; + + PowerToysTelemetry.Log.WriteEvent(telemetrySettings); + } } } diff --git a/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSettings.cs b/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSettings.cs new file mode 100644 index 0000000000..e9e1a66735 --- /dev/null +++ b/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSettings.cs @@ -0,0 +1,32 @@ +// 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.Collections.Generic; +using System.Diagnostics.Tracing; +using Microsoft.PowerToys.Telemetry; +using Microsoft.PowerToys.Telemetry.Events; + +namespace ColorPicker.Telemetry +{ + [EventData] + public class ColorPickerSettings : EventBase, IEvent + { + public ColorPickerSettings(IDictionary editorFormats) + { + EditorFormats = editorFormats; + } + + public string ActivationShortcut { get; set; } + + public string ActivationBehaviour { get; set; } + + public string ColorFormatForClipboard { get; set; } + + public bool ShowColorName { get; set; } + + public IDictionary EditorFormats { get; } + + public PartA_PrivTags PartA_PrivTags => PartA_PrivTags.ProductAndServiceUsage; + } +} diff --git a/src/modules/colorPicker/ColorPickerUI/ViewModels/MainViewModel.cs b/src/modules/colorPicker/ColorPickerUI/ViewModels/MainViewModel.cs index fca7ca271c..25ddd3aaf6 100644 --- a/src/modules/colorPicker/ColorPickerUI/ViewModels/MainViewModel.cs +++ b/src/modules/colorPicker/ColorPickerUI/ViewModels/MainViewModel.cs @@ -15,6 +15,7 @@ using ColorPicker.Mouse; using ColorPicker.Settings; using ColorPicker.Telemetry; using ColorPicker.ViewModelContracts; +using interop; using Microsoft.PowerToys.Settings.UI.Library.Enumerations; using Microsoft.PowerToys.Telemetry; @@ -26,7 +27,6 @@ namespace ColorPicker.ViewModels private readonly ZoomWindowHelper _zoomWindowHelper; private readonly AppStateHandler _appStateHandler; private readonly IUserSettings _userSettings; - private readonly NativeEventWaiter _nativeEventWaiter; ///
/// Backing field for @@ -49,13 +49,13 @@ namespace ColorPicker.ViewModels ZoomWindowHelper zoomWindowHelper, AppStateHandler appStateHandler, KeyboardMonitor keyboardMonitor, - NativeEventWaiter nativeEventWaiter, IUserSettings userSettings) { _zoomWindowHelper = zoomWindowHelper; _appStateHandler = appStateHandler; _userSettings = userSettings; - _nativeEventWaiter = nativeEventWaiter; + NativeEventWaiter.WaitForEventLoop(Constants.ShowColorPickerSharedEvent(), _appStateHandler.StartUserSession); + NativeEventWaiter.WaitForEventLoop(Constants.ColorPickerSendSettingsTelemetryEvent(), _userSettings.SendSettingsTelemetry); if (mouseInfoProvider != null) { diff --git a/src/modules/interface/powertoy_module_interface.h b/src/modules/interface/powertoy_module_interface.h index eeefcf1907..43b675bd99 100644 --- a/src/modules/interface/powertoy_module_interface.h +++ b/src/modules/interface/powertoy_module_interface.h @@ -86,6 +86,16 @@ public: virtual void send_settings_telemetry() { } + +protected: + HANDLE CreateDefaultEvent(const wchar_t* eventName) + { + SECURITY_ATTRIBUTES sa; + sa.nLength = sizeof(sa); + sa.bInheritHandle = false; + sa.lpSecurityDescriptor = NULL; + return CreateEventW(&sa, FALSE, FALSE, eventName); + } }; /* diff --git a/src/modules/launcher/Microsoft.Launcher/dllmain.cpp b/src/modules/launcher/Microsoft.Launcher/dllmain.cpp index 05611e0416..17d87d6fee 100644 --- a/src/modules/launcher/Microsoft.Launcher/dllmain.cpp +++ b/src/modules/launcher/Microsoft.Launcher/dllmain.cpp @@ -83,15 +83,6 @@ private: HANDLE send_telemetry_event; - SECURITY_ATTRIBUTES getDefaultSecurityAttribute() - { - SECURITY_ATTRIBUTES sa; - sa.nLength = sizeof(sa); - sa.bInheritHandle = false; - sa.lpSecurityDescriptor = NULL; - return sa; - } - public: // Constructor Microsoft_Launcher() @@ -104,10 +95,8 @@ public: Logger::info("Launcher object is constructing"); init_settings(); - auto sa1 = getDefaultSecurityAttribute(); - m_hEvent = CreateEventW(&sa1, FALSE, FALSE, CommonSharedConstants::POWER_LAUNCHER_SHARED_EVENT); - auto sa2 = getDefaultSecurityAttribute(); - send_telemetry_event = CreateEventW(&sa2, FALSE, FALSE, CommonSharedConstants::RUN_SEND_SETTINGS_TELEMETRY_EVENT); + m_hEvent = CreateDefaultEvent(CommonSharedConstants::POWER_LAUNCHER_SHARED_EVENT); + send_telemetry_event = CreateDefaultEvent(CommonSharedConstants::RUN_SEND_SETTINGS_TELEMETRY_EVENT); }; ~Microsoft_Launcher() From aac479f58cd63510bfdc5e276250ef5610e58c49 Mon Sep 17 00:00:00 2001 From: Andrey Nekrasov Date: Thu, 25 Mar 2021 17:28:29 +0300 Subject: [PATCH 44/82] [Log] Remove log_settings.json during installation and set default level to trace (#10438) --- .../bootstrapper/bootstrapper.cpp | 24 +++++++++++++++++++ src/common/SettingsAPI/settings_helpers.cpp | 1 - src/common/SettingsAPI/settings_helpers.h | 2 ++ src/common/logger/logger_settings.h | 2 +- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/installer/PowerToysBootstrapper/bootstrapper/bootstrapper.cpp b/installer/PowerToysBootstrapper/bootstrapper/bootstrapper.cpp index 48aa8da473..6e71d4a7fa 100644 --- a/installer/PowerToysBootstrapper/bootstrapper/bootstrapper.cpp +++ b/installer/PowerToysBootstrapper/bootstrapper/bootstrapper.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include @@ -79,6 +80,27 @@ void SetupLogger(fs::path directory, const spdlog::level::level_enum severity) } } +void CleanupSettingsFromOlderVersions() +{ + try + { + const auto logSettingsFile = fs::path{ PTSettingsHelper::get_root_save_folder_location() } / PTSettingsHelper::log_settings_filename; + if (fs::is_regular_file(logSettingsFile)) + { + fs::remove(logSettingsFile); + spdlog::info("Removed old log settings file"); + } + else + { + spdlog::info("Old log settings file wasn't found"); + } + } + catch(...) + { + spdlog::error("Failed to cleanup old log settings"); + } +} + void ShowMessageBoxError(const wchar_t* message) { if (!g_Silent) @@ -379,6 +401,8 @@ int Bootstrapper(HINSTANCE hInstance) spdlog::error("Unknown exception during dotnet installation"); ShowMessageBoxError(IDS_DOTNET_INSTALL_ERROR); } + + CleanupSettingsFromOlderVersions(); // At this point, there's no reason to show progress bar window, since MSI installers have their own CloseProgressBarDialog(); diff --git a/src/common/SettingsAPI/settings_helpers.cpp b/src/common/SettingsAPI/settings_helpers.cpp index 646cd1a76f..ed85ac9966 100644 --- a/src/common/SettingsAPI/settings_helpers.cpp +++ b/src/common/SettingsAPI/settings_helpers.cpp @@ -4,7 +4,6 @@ namespace PTSettingsHelper { constexpr inline const wchar_t* settings_filename = L"\\settings.json"; - constexpr inline const wchar_t* log_settings_filename = L"log_settings.json"; constexpr inline const wchar_t* oobe_filename = L"oobe_settings.json"; std::wstring get_root_save_folder_location() diff --git a/src/common/SettingsAPI/settings_helpers.h b/src/common/SettingsAPI/settings_helpers.h index 6e220f70ea..1174032fe2 100644 --- a/src/common/SettingsAPI/settings_helpers.h +++ b/src/common/SettingsAPI/settings_helpers.h @@ -6,6 +6,8 @@ namespace PTSettingsHelper { + constexpr inline const wchar_t* log_settings_filename = L"log_settings.json"; + std::wstring get_module_save_folder_location(std::wstring_view powertoy_name); std::wstring get_root_save_folder_location(); diff --git a/src/common/logger/logger_settings.h b/src/common/logger/logger_settings.h index aae55a1bcf..fdbcc5a80e 100644 --- a/src/common/logger/logger_settings.h +++ b/src/common/logger/logger_settings.h @@ -4,7 +4,7 @@ struct LogSettings { // The following strings are not localizable - inline const static std::wstring defaultLogLevel = L"warn"; + inline const static std::wstring defaultLogLevel = L"trace"; inline const static std::wstring logLevelOption = L"logLevel"; inline const static std::string runnerLoggerName = "runner"; inline const static std::wstring runnerLogPath = L"RunnerLogs\\runner-log.txt"; From ccaa98513c505bf8f2c9c0d739c31476249df747 Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Thu, 25 Mar 2021 13:16:57 -0700 Subject: [PATCH 45/82] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 8386111b53..c19387ebd3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -10,12 +10,14 @@ body: - type: markdown attributes: value: | - Please make sure to [search for existing issues](https://github.com/microsoft/PowerTOys/issues) before filing a new one! - + Please make sure to [search for existing issues](https://github.com/microsoft/PowerToys/issues) before filing a new one! + + We highly suggest including a screenshots and a bug report log (System tray->Report bug). To include, paste them into the markdown editor below the form or follow up with a separate comment. - type: input attributes: label: Microsoft PowerToys version - placeholder: "0.33.1" + placeholder: | + "0.33.1" description: | Hover over system tray icon or look at Settings validations: @@ -24,15 +26,17 @@ body: - type: dropdown attributes: label: Running as admin + description: Are you running PowerToys as Admin? options: - - 'Yes' - 'No' + - 'Yes' validations: required: true - type: dropdown attributes: - label: Utility with issue? + label: Area(s) with issue? + description: What things had an issue? Check all that apply. multiple: true options: - General @@ -74,7 +78,6 @@ body: - type: textarea attributes: label: ✔️ Expected Behavior - description: If you want to include screenshots, paste them into the markdown editor below the form or follow up with a separate comment. placeholder: What were you expecting? validations: required: false @@ -82,7 +85,6 @@ body: - type: textarea attributes: label: ❌ Actual Behavior - description: If you want to include screenshots, paste them into the markdown editor below the form or follow up with a separate comment. placeholder: What happened instead? validations: required: true From 1c46e6b72bfdaee47b833eb14960edc7177aa988 Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Fri, 26 Mar 2021 14:21:29 +0200 Subject: [PATCH 46/82] Added more logging (#10445) --- .../launcher/Microsoft.Launcher/dllmain.cpp | 52 ++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/src/modules/launcher/Microsoft.Launcher/dllmain.cpp b/src/modules/launcher/Microsoft.Launcher/dllmain.cpp index 17d87d6fee..aadc8be15b 100644 --- a/src/modules/launcher/Microsoft.Launcher/dllmain.cpp +++ b/src/modules/launcher/Microsoft.Launcher/dllmain.cpp @@ -192,6 +192,7 @@ public: if (!is_process_elevated(false)) { + Logger::trace("Starting PowerToys Run from not elevated process"); std::wstring executable_args; executable_args += L" -powerToysPid "; executable_args += std::to_wstring(powertoys_pid); @@ -207,6 +208,7 @@ public: { m_enabled = true; m_hProcess = sei.hProcess; + Logger::trace("Started PowerToys Run. Handle {}", m_hProcess); } else { @@ -215,6 +217,7 @@ public: } else { + Logger::trace("Starting PowerToys Run from elevated process"); std::wstring action_runner_path = get_module_folderpath(); std::wstring params; @@ -228,32 +231,42 @@ public: action_runner_path += L"\\action_runner.exe"; // Set up the shared file from which to retrieve the PID of PowerLauncher HANDLE hMapFile = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(DWORD), POWER_LAUNCHER_PID_SHARED_FILE); - if (hMapFile) + if (!hMapFile) { - PDWORD pidBuffer = reinterpret_cast(MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DWORD))); - if (pidBuffer) - { - *pidBuffer = 0; - m_hProcess = NULL; + auto err = get_last_error_message(GetLastError()); + Logger::error(L"Failed to create FileMapping {}. {}", POWER_LAUNCHER_PID_SHARED_FILE, err.has_value() ? err.value() : L""); + return; + } - if (run_non_elevated(action_runner_path, params, pidBuffer)) + PDWORD pidBuffer = reinterpret_cast(MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DWORD))); + if (pidBuffer) + { + *pidBuffer = 0; + m_hProcess = NULL; + + if (run_non_elevated(action_runner_path, params, pidBuffer)) + { + Logger::trace("Started PowerToys Run Process. PID {}", *pidBuffer); + m_enabled = true; + const int maxRetries = 80; + for (int retry = 0; retry < maxRetries; ++retry) { - m_enabled = true; - const int maxRetries = 80; - for (int retry = 0; retry < maxRetries; ++retry) + Sleep(50); + DWORD pid = *pidBuffer; + if (pid) { - Sleep(50); - DWORD pid = *pidBuffer; - if (pid) - { - m_hProcess = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, pid); - break; - } + m_hProcess = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, pid); + Logger::trace("Opened PowerToys Run Process. Handle {}", m_hProcess); + break; } } } - CloseHandle(hMapFile); + else + { + Logger::error("Failed to start PowerToys Run"); + } } + CloseHandle(hMapFile); } } } @@ -308,7 +321,7 @@ public: enable(); } - Logger::trace("Set POWER_LAUNCHER_SHARED_EVENT"); + Logger::trace("Set POWER_LAUNCHER_SHARED_EVENT. Handle {}", m_hProcess); SetEvent(m_hEvent); return true; } @@ -331,6 +344,7 @@ public: // Terminate process by sending WM_CLOSE signal and if it fails, force terminate. void terminateProcess() { + Logger::trace(L"Terminating PowerToys Run process. Handle {}.", m_hProcess); DWORD processID = GetProcessId(m_hProcess); if (TerminateProcess(m_hProcess, 1) == 0) { From 5baf11dada84c0a2d720806f40018319eb242e28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Sto=C5=A1i=C4=87?= Date: Fri, 26 Mar 2021 14:44:03 +0100 Subject: [PATCH 47/82] Fix a vector subscript out of range crash (#10458) --- src/modules/fancyzones/lib/ZoneWindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/fancyzones/lib/ZoneWindow.cpp b/src/modules/fancyzones/lib/ZoneWindow.cpp index 4c1485acba..aed00f01a5 100644 --- a/src/modules/fancyzones/lib/ZoneWindow.cpp +++ b/src/modules/fancyzones/lib/ZoneWindow.cpp @@ -406,6 +406,7 @@ ZoneWindow::UpdateActiveZoneSet() noexcept CalculateZoneSet(); if (m_window) { + m_highlightZone.clear(); m_zoneWindowDrawing->DrawActiveZoneSet(m_activeZoneSet->GetZones(), m_highlightZone, m_host); } } From 9a3896f48a2abfdb9d48359c53d01335f90103bb Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Fri, 26 Mar 2021 19:17:26 +0200 Subject: [PATCH 48/82] logs (#10462) --- src/modules/launcher/Microsoft.Launcher/dllmain.cpp | 6 ++++++ src/runner/centralized_kb_hook.cpp | 3 +++ src/runner/powertoy_module.cpp | 2 ++ 3 files changed, 11 insertions(+) diff --git a/src/modules/launcher/Microsoft.Launcher/dllmain.cpp b/src/modules/launcher/Microsoft.Launcher/dllmain.cpp index aadc8be15b..46b3863870 100644 --- a/src/modules/launcher/Microsoft.Launcher/dllmain.cpp +++ b/src/modules/launcher/Microsoft.Launcher/dllmain.cpp @@ -345,6 +345,12 @@ public: void terminateProcess() { Logger::trace(L"Terminating PowerToys Run process. Handle {}.", m_hProcess); + if (WaitForSingleObject(m_hProcess, 0) == WAIT_OBJECT_0) + { + Logger::warn("PowerToys Run has exited unexpectedly, so there is no need to terminate it."); + return; + } + DWORD processID = GetProcessId(m_hProcess); if (TerminateProcess(m_hProcess, 1) == 0) { diff --git a/src/runner/centralized_kb_hook.cpp b/src/runner/centralized_kb_hook.cpp index 09fe9ad201..eec4b7c542 100644 --- a/src/runner/centralized_kb_hook.cpp +++ b/src/runner/centralized_kb_hook.cpp @@ -2,6 +2,7 @@ #include "centralized_kb_hook.h" #include #include +#include namespace CentralizedKeyboardHook { @@ -79,12 +80,14 @@ namespace CentralizedKeyboardHook void SetHotkeyAction(const std::wstring& moduleName, const Hotkey& hotkey, std::function&& action) noexcept { + Logger::trace(L"Register hotkey action for {}", moduleName); std::unique_lock lock{ mutex }; hotkeyDescriptors.insert({ .hotkey = hotkey, .moduleName = moduleName, .action = std::move(action) }); } void ClearModuleHotkeys(const std::wstring& moduleName) noexcept { + Logger::trace(L"UnRegister hotkey action for {}", moduleName); std::unique_lock lock{ mutex }; auto it = hotkeyDescriptors.begin(); while (it != hotkeyDescriptors.end()) diff --git a/src/runner/powertoy_module.cpp b/src/runner/powertoy_module.cpp index 7db2b15e03..ce5cc6846e 100644 --- a/src/runner/powertoy_module.cpp +++ b/src/runner/powertoy_module.cpp @@ -1,6 +1,7 @@ #include "pch.h" #include "powertoy_module.h" #include "centralized_kb_hook.h" +#include std::map& modules() { @@ -60,6 +61,7 @@ void PowertoyModule::update_hotkeys() for (size_t i = 0; i < hotkeyCount; i++) { CentralizedKeyboardHook::SetHotkeyAction(pt_module->get_key(), hotkeys[i], [modulePtr, i] { + Logger::trace(L"{} hotkey is invoked from Centralized keyboard hook", modulePtr->get_key()); return modulePtr->on_hotkey(i); }); } From ccc380f11cf7167b0446e6ccc0ae2afc0b7b7dc0 Mon Sep 17 00:00:00 2001 From: Enrico Giordani Date: Mon, 29 Mar 2021 11:20:49 +0200 Subject: [PATCH 49/82] [telemetry][ColorPicker] add event name support (#10476) Allow to set a custom name for the event instead of just using the class name. --- src/common/ManagedTelemetry/Telemetry/Events/EventBase.cs | 2 ++ src/common/ManagedTelemetry/Telemetry/PowerToysTelemetry.cs | 2 +- .../ColorPickerUI/Telemetry/ColorPickerSession.cs | 5 +++++ .../ColorPickerUI/Telemetry/ColorPickerSettings.cs | 1 + 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/common/ManagedTelemetry/Telemetry/Events/EventBase.cs b/src/common/ManagedTelemetry/Telemetry/Events/EventBase.cs index ba1a43f3c8..1b657bb9c5 100644 --- a/src/common/ManagedTelemetry/Telemetry/Events/EventBase.cs +++ b/src/common/ManagedTelemetry/Telemetry/Events/EventBase.cs @@ -16,6 +16,8 @@ namespace Microsoft.PowerToys.Telemetry.Events { public bool UTCReplace_AppSessionGuid => true; + public string EventName { get; set; } + private string _version; public string Version diff --git a/src/common/ManagedTelemetry/Telemetry/PowerToysTelemetry.cs b/src/common/ManagedTelemetry/Telemetry/PowerToysTelemetry.cs index 707d514c0f..cad79cbd3d 100644 --- a/src/common/ManagedTelemetry/Telemetry/PowerToysTelemetry.cs +++ b/src/common/ManagedTelemetry/Telemetry/PowerToysTelemetry.cs @@ -37,7 +37,7 @@ namespace Microsoft.PowerToys.Telemetry where T : EventBase, IEvent { this.Write( - null, + telemetryEvent.EventName, new EventSourceOptions() { Keywords = ProjectKeywordMeasure, diff --git a/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSession.cs b/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSession.cs index 6f1de4d3a4..07c1852fb5 100644 --- a/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSession.cs +++ b/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSession.cs @@ -12,6 +12,11 @@ namespace ColorPicker.Telemetry [EventData] public class ColorPickerSession : EventBase, IEvent { + public ColorPickerSession() + { + EventName = "ColorPicker_Session"; + } + public string StartedAs { get; set; } public bool ZoomUsed { get; set; } diff --git a/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSettings.cs b/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSettings.cs index e9e1a66735..ea1eb6a03f 100644 --- a/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSettings.cs +++ b/src/modules/colorPicker/ColorPickerUI/Telemetry/ColorPickerSettings.cs @@ -15,6 +15,7 @@ namespace ColorPicker.Telemetry public ColorPickerSettings(IDictionary editorFormats) { EditorFormats = editorFormats; + EventName = "ColorPicker_Settings"; } public string ActivationShortcut { get; set; } From 31fa9475dac35bf2eaea1804bed74c9fbcd0ea91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Sto=C5=A1i=C4=87?= Date: Mon, 29 Mar 2021 13:39:16 +0200 Subject: [PATCH 50/82] [FancyZones] Fix deadlocks in ZoneWindowDrawing (#10461) * Fixed deadlocks in ZoneWindowDrawing Moved all possibly reentrant or blocking calls to ShowWindow out of critical sections. * Initialize bools * Tune flashing visuals * Address PR comments * Use = true; to initialize bools * Remove tracing from GetAnimationAlpha * Use member initialization when constructing AnimationInfo * Refactor rendering * Whitespace * Hide window on render failure --- src/modules/fancyzones/lib/FancyZones.cpp | 4 +- src/modules/fancyzones/lib/ZoneWindow.cpp | 6 +- .../fancyzones/lib/ZoneWindowDrawing.cpp | 121 ++++++++++-------- .../fancyzones/lib/ZoneWindowDrawing.h | 16 ++- 4 files changed, 80 insertions(+), 67 deletions(-) diff --git a/src/modules/fancyzones/lib/FancyZones.cpp b/src/modules/fancyzones/lib/FancyZones.cpp index 8d8880805e..6665b28322 100644 --- a/src/modules/fancyzones/lib/FancyZones.cpp +++ b/src/modules/fancyzones/lib/FancyZones.cpp @@ -647,7 +647,7 @@ void FancyZones::ToggleEditor() noexcept wil::unique_cotaskmem_string virtualDesktopId; if (!SUCCEEDED(StringFromCLSID(m_currentDesktopId, &virtualDesktopId))) { - return; + return; } /* @@ -677,7 +677,7 @@ void FancyZones::ToggleEditor() noexcept { params += FancyZonesUtils::GenerateUniqueIdAllMonitorsArea(virtualDesktopId.get()) + divider; /* Monitor id where the Editor should be opened */ } - + // device id map std::unordered_map displayDeviceIdxMap; diff --git a/src/modules/fancyzones/lib/ZoneWindow.cpp b/src/modules/fancyzones/lib/ZoneWindow.cpp index aed00f01a5..4754430dac 100644 --- a/src/modules/fancyzones/lib/ZoneWindow.cpp +++ b/src/modules/fancyzones/lib/ZoneWindow.cpp @@ -163,8 +163,6 @@ private: std::vector m_highlightZone; WPARAM m_keyLast{}; size_t m_keyCycle{}; - static const UINT m_showAnimationDuration = 200; // ms - static const UINT m_flashDuration = 1000; // ms std::unique_ptr m_zoneWindowDrawing; }; @@ -384,7 +382,7 @@ ZoneWindow::ShowZoneWindow() noexcept { SetAsTopmostWindow(); m_zoneWindowDrawing->DrawActiveZoneSet(m_activeZoneSet->GetZones(), m_highlightZone, m_host); - m_zoneWindowDrawing->Show(m_showAnimationDuration); + m_zoneWindowDrawing->Show(); } } @@ -428,7 +426,7 @@ ZoneWindow::FlashZones() noexcept { SetAsTopmostWindow(); m_zoneWindowDrawing->DrawActiveZoneSet(m_activeZoneSet->GetZones(), {}, m_host); - m_zoneWindowDrawing->Flash(m_flashDuration); + m_zoneWindowDrawing->Flash(); } } diff --git a/src/modules/fancyzones/lib/ZoneWindowDrawing.cpp b/src/modules/fancyzones/lib/ZoneWindowDrawing.cpp index b47b62090f..0731f184c2 100644 --- a/src/modules/fancyzones/lib/ZoneWindowDrawing.cpp +++ b/src/modules/fancyzones/lib/ZoneWindowDrawing.cpp @@ -9,6 +9,12 @@ #include +namespace +{ + const int FadeInDurationMillis = 200; + const int FlashZonesDurationMillis = 700; +} + namespace NonLocalizable { const wchar_t SegoeUiFont[] = L"Segoe ui"; @@ -16,25 +22,23 @@ namespace NonLocalizable float ZoneWindowDrawing::GetAnimationAlpha() { - // Lock is being held + // Lock is held by the caller + if (!m_animation) { return 0.f; } auto tNow = std::chrono::steady_clock().now(); - auto alpha = (tNow - m_animation->tStart).count() / (1e6f * m_animation->duration); + auto millis = (tNow - m_animation->tStart).count() / 1e6f; - if (m_animation->fadeIn) + if (m_animation->autoHide && millis > FlashZonesDurationMillis) { - // Return a positive value to avoid hiding - return std::clamp(alpha, 0.001f, 1.f); - } - else - { - // Quadratic function looks better - return std::clamp(1.f - alpha * alpha, 0.f, 1.f); + return 0.f; } + + // Return a positive value to avoid hiding + return std::clamp(millis / FadeInDurationMillis, 0.001f, 1.f); } ID2D1Factory* ZoneWindowDrawing::GetD2DFactory() @@ -91,7 +95,7 @@ ZoneWindowDrawing::ZoneWindowDrawing(HWND window) D2D1::PixelFormat(DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_PREMULTIPLIED), 96.f, 96.f); - + auto renderTargetSize = D2D1::SizeU(m_clientRect.right - m_clientRect.left, m_clientRect.bottom - m_clientRect.top); auto hwndRenderTargetProperties = D2D1::HwndRenderTargetProperties(window, renderTargetSize); @@ -106,20 +110,20 @@ ZoneWindowDrawing::ZoneWindowDrawing(HWND window) m_renderThread = std::thread([this]() { RenderLoop(); }); } -void ZoneWindowDrawing::Render() +ZoneWindowDrawing::RenderResult ZoneWindowDrawing::Render() { std::unique_lock lock(m_mutex); if (!m_renderTarget) { - return; + return RenderResult::Failed; } float animationAlpha = GetAnimationAlpha(); if (animationAlpha <= 0.f) { - return; + return RenderResult::AnimationEnded; } m_renderTarget->BeginDraw(); @@ -186,91 +190,96 @@ void ZoneWindowDrawing::Render() lock.unlock(); m_renderTarget->EndDraw(); + return RenderResult::Ok; } void ZoneWindowDrawing::RenderLoop() { while (!m_abortThread) { - float animationAlpha; - { - // The lock must be held by the caller when calling GetAnimationAlpha - std::unique_lock lock(m_mutex); - animationAlpha = GetAnimationAlpha(); - } - - // Check whether the animation expired and we need to hide the window - if (animationAlpha <= 0.f) - { - Hide(); - } - { // Wait here while rendering is disabled std::unique_lock lock(m_mutex); m_cv.wait(lock, [this]() { return (bool)m_shouldRender; }); } - - Render(); + + auto result = Render(); + + if (result == RenderResult::AnimationEnded || result == RenderResult::Failed) + { + Hide(); + } } } void ZoneWindowDrawing::Hide() { _TRACER_; - std::unique_lock lock(m_mutex); - - m_animation.reset(); - - if (m_shouldRender) + bool shouldHideWindow = true; { + std::unique_lock lock(m_mutex); + m_animation.reset(); + shouldHideWindow = m_shouldRender; m_shouldRender = false; + } + + if (shouldHideWindow) + { ShowWindow(m_window, SW_HIDE); } } -void ZoneWindowDrawing::Show(unsigned animationMillis) +void ZoneWindowDrawing::Show() { _TRACER_; - std::unique_lock lock(m_mutex); - - if (!m_shouldRender) + bool shouldShowWindow = true; + { + std::unique_lock lock(m_mutex); + shouldShowWindow = !m_shouldRender; + m_shouldRender = true; + + if (!m_animation) + { + m_animation.emplace(AnimationInfo{ .tStart = std::chrono::steady_clock().now(), .autoHide = false }); + } + else if (m_animation->autoHide) + { + // Do not change the starting time of the animation, just reset autoHide + m_animation->autoHide = false; + } + } + + if (shouldShowWindow) { ShowWindow(m_window, SW_SHOWNA); } - animationMillis = max(animationMillis, 1); - - if (!m_animation || !m_animation->fadeIn) - { - m_animation.emplace(AnimationInfo{ std::chrono::steady_clock().now(), animationMillis, true }); - } - - m_shouldRender = true; m_cv.notify_all(); } -void ZoneWindowDrawing::Flash(unsigned animationMillis) +void ZoneWindowDrawing::Flash() { _TRACER_; - std::unique_lock lock(m_mutex); + bool shouldShowWindow = true; + { + std::unique_lock lock(m_mutex); + shouldShowWindow = !m_shouldRender; + m_shouldRender = true; - if (!m_shouldRender) + m_animation.emplace(AnimationInfo{ .tStart = std::chrono::steady_clock().now(), .autoHide = true }); + } + + if (shouldShowWindow) { ShowWindow(m_window, SW_SHOWNA); } - animationMillis = max(animationMillis, 1); - - m_animation.emplace(AnimationInfo{ std::chrono::steady_clock().now(), animationMillis, false }); - - m_shouldRender = true; m_cv.notify_all(); } void ZoneWindowDrawing::DrawActiveZoneSet(const IZoneSet::ZonesMap& zones, - const std::vector& highlightZones, - winrt::com_ptr host) + const std::vector& highlightZones, + winrt::com_ptr host) { _TRACER_; std::unique_lock lock(m_mutex); diff --git a/src/modules/fancyzones/lib/ZoneWindowDrawing.h b/src/modules/fancyzones/lib/ZoneWindowDrawing.h index b9cceb16b1..06a204ea14 100644 --- a/src/modules/fancyzones/lib/ZoneWindowDrawing.h +++ b/src/modules/fancyzones/lib/ZoneWindowDrawing.h @@ -25,8 +25,14 @@ class ZoneWindowDrawing struct AnimationInfo { std::chrono::steady_clock::time_point tStart; - unsigned duration; - bool fadeIn; + bool autoHide; + }; + + enum struct RenderResult + { + Ok, + AnimationEnded, + Failed, }; HWND m_window = nullptr; @@ -42,7 +48,7 @@ class ZoneWindowDrawing static IDWriteFactory* GetWriteFactory(); static D2D1_COLOR_F ConvertColor(COLORREF color); static D2D1_RECT_F ConvertRect(RECT rect); - void Render(); + RenderResult Render(); void RenderLoop(); std::atomic m_shouldRender = false; @@ -55,8 +61,8 @@ public: ~ZoneWindowDrawing(); ZoneWindowDrawing(HWND window); void Hide(); - void Show(unsigned animationMillis); - void Flash(unsigned animationMillis); + void Show(); + void Flash(); void DrawActiveZoneSet(const IZoneSet::ZonesMap& zones, const std::vector& highlightZones, winrt::com_ptr host); From 49fb8381755dde81fe34be868ba706ff4c0e2d89 Mon Sep 17 00:00:00 2001 From: csigs Date: Mon, 29 Mar 2021 06:46:38 -0700 Subject: [PATCH 51/82] LEGO: check in for master to temporary branch. (#10480) --- .../bootstrapper/Resources.resx.lcl | 9 ++ .../bootstrapper/Resources.resx.lcl | 9 ++ .../bootstrapper/Resources.resx.lcl | 9 ++ .../bootstrapper/Resources.resx.lcl | 9 ++ .../Properties/Resources.resx.lcl | 18 ++++ .../Properties/Resources.resx.lcl | 18 ++++ .../Properties/Resources.resx.lcl | 66 +++++++++++--- .../Properties/Resources.resx.lcl | 63 +++++++++++--- .../Properties/Resources.resx.lcl | 15 ++++ .../Properties/Resources.resx.lcl | 66 +++++++++++--- .../Properties/Resources.resx.lcl | 66 +++++++++++--- .../Properties/Resources.resx.lcl | 18 ++++ .../Properties/Resources.resx.lcl | 66 +++++++++++--- .../Properties/Resources.resx.lcl | 18 ++++ .../Properties/Resources.resx.lcl | 15 ++++ .../Properties/Resources.resx.lcl | 66 +++++++++++--- .../Properties/Resources.resx.lcl | 66 +++++++++++--- .../Properties/Resources.resx.lcl | 15 ++++ .../Properties/Resources.resx.lcl | 63 +++++++++++--- .../Properties/Resources.resx.lcl | 51 ++++++++--- .../Properties/Resources.resx.lcl | 66 +++++++++++--- .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 ++++ .../Microsoft.Launcher/Resources.resx.lcl | 2 +- .../Microsoft.Launcher/Resources.resx.lcl | 2 +- .../Microsoft.Launcher/Resources.resx.lcl | 2 +- .../Microsoft.Launcher/Resources.resx.lcl | 2 +- .../Microsoft.Launcher/Resources.resx.lcl | 2 +- .../Microsoft.Launcher/Resources.resx.lcl | 2 +- .../Microsoft.Launcher/Resources.resx.lcl | 2 +- .../Microsoft.Launcher/Resources.resx.lcl | 2 +- .../Microsoft.Launcher/Resources.resx.lcl | 2 +- .../Properties/Resources.resx.lcl | 13 +-- .../Properties/Resources.resx.lcl | 13 +-- .../Properties/Resources.resx.lcl | 13 +-- .../Properties/Resources.resx.lcl | 13 +-- .../Properties/Resources.resx.lcl | 13 +-- .../Properties/Resources.resx.lcl | 13 +-- .../Properties/Resources.resx.lcl | 13 +-- .../Properties/Resources.resx.lcl | 13 +-- .../powerrename/dll/Resources.resx.lcl | 4 +- .../powerrename/dll/Resources.resx.lcl | 4 +- .../powerrename/dll/Resources.resx.lcl | 4 +- .../powerrename/dll/Resources.resx.lcl | 4 +- .../powerrename/dll/Resources.resx.lcl | 4 +- .../powerrename/dll/Resources.resx.lcl | 4 +- .../modules/powerrename/ui/Resources.resx.lcl | 2 +- .../modules/powerrename/ui/Resources.resx.lcl | 2 +- .../modules/powerrename/ui/Resources.resx.lcl | 2 +- .../modules/powerrename/ui/Resources.resx.lcl | 2 +- .../modules/powerrename/ui/Resources.resx.lcl | 2 +- .../modules/powerrename/ui/Resources.resx.lcl | 2 +- .../Strings/en-us/Resources.resw.lcl | 66 ++++++++++++-- .../Strings/en-us/Resources.resw.lcl | 62 +++++++++++-- .../Strings/en-us/Resources.resw.lcl | 65 +++++++++++++- .../Strings/en-us/Resources.resw.lcl | 43 +++++++++- .../Strings/en-us/Resources.resw.lcl | 66 ++++++++++++-- .../Strings/en-us/Resources.resw.lcl | 86 +++++++++++++++---- .../Strings/en-us/Resources.resw.lcl | 52 ++++++++++- .../Strings/en-us/Resources.resw.lcl | 61 ++++++++++++- .../Strings/en-us/Resources.resw.lcl | 54 +++++++++++- .../Strings/en-us/Resources.resw.lcl | 86 +++++++++++++++---- .../Strings/en-us/Resources.resw.lcl | 34 +++++++- .../Strings/en-us/Resources.resw.lcl | 68 ++++++++++++--- .../Strings/en-us/Resources.resw.lcl | 75 ++++++++++++++-- .../Strings/en-us/Resources.resw.lcl | 55 ++++++++++-- .../Strings/en-us/Resources.resw.lcl | 39 ++++++++- .../Strings/en-us/Resources.resw.lcl | 52 +++++++++-- .../Strings/en-us/Resources.resw.lcl | 56 +++++++++++- 78 files changed, 1816 insertions(+), 352 deletions(-) diff --git a/installer/PowerToysBootstrapper/bootstrapper/loc/ja/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl b/installer/PowerToysBootstrapper/bootstrapper/loc/ja/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl index e6d63877b8..0c97be102d 100644 --- a/installer/PowerToysBootstrapper/bootstrapper/loc/ja/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl +++ b/installer/PowerToysBootstrapper/bootstrapper/loc/ja/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl @@ -283,6 +283,15 @@ + + + + + + + + + diff --git a/installer/PowerToysBootstrapper/bootstrapper/loc/pt-PT/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl b/installer/PowerToysBootstrapper/bootstrapper/loc/pt-PT/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl index 54391aeb3d..c365080935 100644 --- a/installer/PowerToysBootstrapper/bootstrapper/loc/pt-PT/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl +++ b/installer/PowerToysBootstrapper/bootstrapper/loc/pt-PT/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl @@ -283,6 +283,15 @@ + + + + + + + + + diff --git a/installer/PowerToysBootstrapper/bootstrapper/loc/ru/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl b/installer/PowerToysBootstrapper/bootstrapper/loc/ru/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl index 9dde09119a..4ac2575e56 100644 --- a/installer/PowerToysBootstrapper/bootstrapper/loc/ru/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl +++ b/installer/PowerToysBootstrapper/bootstrapper/loc/ru/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl @@ -283,6 +283,15 @@ + + + + + + + + + diff --git a/installer/PowerToysBootstrapper/bootstrapper/loc/tr/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl b/installer/PowerToysBootstrapper/bootstrapper/loc/tr/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl index cdd1fcf23e..d5b1326a0f 100644 --- a/installer/PowerToysBootstrapper/bootstrapper/loc/tr/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl +++ b/installer/PowerToysBootstrapper/bootstrapper/loc/tr/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl @@ -283,6 +283,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/cs/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/cs/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index fe26123a8d..3fe9beaefc 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/cs/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/cs/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -514,6 +514,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/de/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/de/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index cdfde3c284..414d4b8f5b 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/de/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/de/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -514,6 +514,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/es/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/es/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index c84b2dcb97..8680fc04d6 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/es/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/es/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,24 @@ + + + + + + + + + + + + + + + + + + @@ -487,18 +505,6 @@ - - - - - - - - - - - - @@ -508,6 +514,24 @@ + + + + + + + + + + + + + + + + + + @@ -565,6 +589,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/fr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/fr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index a23af9c28f..b57090fab3 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/fr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/fr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,24 @@ + + + + + + + + + + + + + + + + + + @@ -487,18 +505,6 @@ - - - - - - - - - - - - @@ -508,6 +514,21 @@ + + + + + + + + + + + + + + + @@ -565,6 +586,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/hu/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/hu/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 9dd9041499..40f3ab6708 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/hu/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/hu/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -514,6 +514,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/it/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/it/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index bf7fcdc741..93eee40b13 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/it/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/it/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,24 @@ + + + + + + + + + + + + + + + + + + @@ -487,18 +505,6 @@ - - - - - - - - - - - - @@ -508,6 +514,24 @@ + + + + + + + + + + + + + + + + + + @@ -565,6 +589,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ja/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ja/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index ddcd51cb30..93035b7c45 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ja/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ja/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,24 @@ + + + + + + + + + + + + + + + + + + @@ -487,18 +505,6 @@ - - - - - - - - - - - - @@ -508,6 +514,24 @@ + + + + + + + + + + + + + + + + + + @@ -565,6 +589,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ko/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ko/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 403097e304..f682afec4d 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ko/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ko/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -514,6 +514,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/nl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/nl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index ac0857c509..788ab2241f 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/nl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/nl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,24 @@ + + + + + + + + + + + + + + + + + + @@ -487,18 +505,6 @@ - - - - - - - - - - - - @@ -508,6 +514,24 @@ + + + + + + + + + + + + + + + + + + @@ -565,6 +589,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index c21a008233..bd89d0f795 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -514,6 +514,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-BR/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-BR/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 5423d835f2..12fda01f9f 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-BR/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-BR/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -514,6 +514,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-PT/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-PT/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 6d0f9aa0ff..cb298d739e 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-PT/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-PT/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,24 @@ + + + + + + + + + + + + + + + + + + @@ -487,18 +505,6 @@ - - - - - - - - - - - - @@ -508,6 +514,24 @@ + + + + + + + + + + + + + + + + + + @@ -565,6 +589,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ru/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ru/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 1079054479..7bbe68f561 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ru/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ru/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,24 @@ + + + + + + + + + + + + + + + + + + @@ -487,18 +505,6 @@ - - - - - - - - - - - - @@ -508,6 +514,24 @@ + + + + + + + + + + + + + + + + + + @@ -565,6 +589,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/sv/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/sv/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 6e74d1b524..962d3d896c 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/sv/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/sv/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -514,6 +514,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/tr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/tr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 3bd660e5b5..3f4fdddfbb 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/tr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/tr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,24 @@ + + + + + + + + + + + + + + + + + + @@ -487,18 +505,6 @@ - - - - - - - - - - - - @@ -508,6 +514,21 @@ + + + + + + + + + + + + + + + @@ -565,6 +586,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hans/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hans/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 7ba29dcfbf..4464980607 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hans/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hans/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,18 @@ + + + + + + + + + + + + @@ -487,18 +499,6 @@ - - - - - - - - - - - - @@ -508,6 +508,21 @@ + + + + + + + + + + + + + + + @@ -565,6 +580,18 @@ + + + + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hant/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hant/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 20ef39e662..931d2fdc5b 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hant/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hant/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -451,6 +451,24 @@ + + + + + + + + + + + + + + + + + + @@ -487,18 +505,6 @@ - - - - - - - - - - - - @@ -508,6 +514,24 @@ + + + + + + + + + + + + + + + + + + @@ -565,6 +589,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/cs/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/cs/src/modules/fancyzones/lib/Resources.resx.lcl index 1358e6a96d..9a8fb3e3a7 100644 --- a/src/modules/fancyzones/lib/loc/cs/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/cs/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/de/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/de/src/modules/fancyzones/lib/Resources.resx.lcl index 6e31d0fe7d..85ae1b6c11 100644 --- a/src/modules/fancyzones/lib/loc/de/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/de/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/es/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/es/src/modules/fancyzones/lib/Resources.resx.lcl index 002d9427c5..f24d81a517 100644 --- a/src/modules/fancyzones/lib/loc/es/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/es/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/it/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/it/src/modules/fancyzones/lib/Resources.resx.lcl index 4a22e644d7..a7c60dddaa 100644 --- a/src/modules/fancyzones/lib/loc/it/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/it/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/ja/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/ja/src/modules/fancyzones/lib/Resources.resx.lcl index 86fc1b82c2..f06645a5a4 100644 --- a/src/modules/fancyzones/lib/loc/ja/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/ja/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/ko/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/ko/src/modules/fancyzones/lib/Resources.resx.lcl index caf3a69d8b..6bd2b1066e 100644 --- a/src/modules/fancyzones/lib/loc/ko/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/ko/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/nl/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/nl/src/modules/fancyzones/lib/Resources.resx.lcl index c16a114b2b..b0499d68c3 100644 --- a/src/modules/fancyzones/lib/loc/nl/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/nl/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/pl/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/pl/src/modules/fancyzones/lib/Resources.resx.lcl index c11223812b..28e2636c64 100644 --- a/src/modules/fancyzones/lib/loc/pl/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/pl/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/pt-PT/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/pt-PT/src/modules/fancyzones/lib/Resources.resx.lcl index 8179b2e158..7eb8a4d7d2 100644 --- a/src/modules/fancyzones/lib/loc/pt-PT/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/pt-PT/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/ru/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/ru/src/modules/fancyzones/lib/Resources.resx.lcl index 25b20a6a5e..8b11805390 100644 --- a/src/modules/fancyzones/lib/loc/ru/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/ru/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/zh-Hant/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/zh-Hant/src/modules/fancyzones/lib/Resources.resx.lcl index 7e2408c3e9..9bca94b996 100644 --- a/src/modules/fancyzones/lib/loc/zh-Hant/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/zh-Hant/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/launcher/Microsoft.Launcher/loc/cs/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl b/src/modules/launcher/Microsoft.Launcher/loc/cs/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl index 50bfa6ac00..5492102eaf 100644 --- a/src/modules/launcher/Microsoft.Launcher/loc/cs/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl +++ b/src/modules/launcher/Microsoft.Launcher/loc/cs/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/launcher/Microsoft.Launcher/loc/de/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl b/src/modules/launcher/Microsoft.Launcher/loc/de/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl index 65c24df124..0675769644 100644 --- a/src/modules/launcher/Microsoft.Launcher/loc/de/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl +++ b/src/modules/launcher/Microsoft.Launcher/loc/de/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/launcher/Microsoft.Launcher/loc/es/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl b/src/modules/launcher/Microsoft.Launcher/loc/es/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl index 5637646925..2d7487df7f 100644 --- a/src/modules/launcher/Microsoft.Launcher/loc/es/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl +++ b/src/modules/launcher/Microsoft.Launcher/loc/es/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/launcher/Microsoft.Launcher/loc/hu/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl b/src/modules/launcher/Microsoft.Launcher/loc/hu/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl index 76a3be3bcc..2149bf3712 100644 --- a/src/modules/launcher/Microsoft.Launcher/loc/hu/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl +++ b/src/modules/launcher/Microsoft.Launcher/loc/hu/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/launcher/Microsoft.Launcher/loc/it/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl b/src/modules/launcher/Microsoft.Launcher/loc/it/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl index 6a6a25a81e..27fabcf555 100644 --- a/src/modules/launcher/Microsoft.Launcher/loc/it/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl +++ b/src/modules/launcher/Microsoft.Launcher/loc/it/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/launcher/Microsoft.Launcher/loc/pl/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl b/src/modules/launcher/Microsoft.Launcher/loc/pl/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl index ce6b4357b4..62d5b2bfc3 100644 --- a/src/modules/launcher/Microsoft.Launcher/loc/pl/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl +++ b/src/modules/launcher/Microsoft.Launcher/loc/pl/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/launcher/Microsoft.Launcher/loc/pt-PT/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl b/src/modules/launcher/Microsoft.Launcher/loc/pt-PT/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl index e8271e9ee5..cb8f8835e2 100644 --- a/src/modules/launcher/Microsoft.Launcher/loc/pt-PT/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl +++ b/src/modules/launcher/Microsoft.Launcher/loc/pt-PT/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/launcher/Microsoft.Launcher/loc/ru/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl b/src/modules/launcher/Microsoft.Launcher/loc/ru/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl index e7975321e4..86c19f0fb1 100644 --- a/src/modules/launcher/Microsoft.Launcher/loc/ru/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl +++ b/src/modules/launcher/Microsoft.Launcher/loc/ru/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/launcher/Microsoft.Launcher/loc/sv/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl b/src/modules/launcher/Microsoft.Launcher/loc/sv/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl index 0a5030a720..cba5dd9c7d 100644 --- a/src/modules/launcher/Microsoft.Launcher/loc/sv/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl +++ b/src/modules/launcher/Microsoft.Launcher/loc/sv/src/modules/launcher/Microsoft.Launcher/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/launcher/PowerLauncher/loc/cs/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl b/src/modules/launcher/PowerLauncher/loc/cs/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl index 2fe00b7e59..94576b3bf2 100644 --- a/src/modules/launcher/PowerLauncher/loc/cs/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl +++ b/src/modules/launcher/PowerLauncher/loc/cs/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl @@ -100,15 +100,6 @@ - - - - - - - - - @@ -122,7 +113,7 @@ - + @@ -206,7 +197,7 @@ - + diff --git a/src/modules/launcher/PowerLauncher/loc/de/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl b/src/modules/launcher/PowerLauncher/loc/de/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl index c209ed56ea..b5a10692ef 100644 --- a/src/modules/launcher/PowerLauncher/loc/de/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl +++ b/src/modules/launcher/PowerLauncher/loc/de/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl @@ -100,15 +100,6 @@ - - - - - - - - - @@ -122,7 +113,7 @@ - + @@ -206,7 +197,7 @@ - + diff --git a/src/modules/launcher/PowerLauncher/loc/hu/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl b/src/modules/launcher/PowerLauncher/loc/hu/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl index 52020e9523..0b24fbd29d 100644 --- a/src/modules/launcher/PowerLauncher/loc/hu/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl +++ b/src/modules/launcher/PowerLauncher/loc/hu/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl @@ -100,15 +100,6 @@ - - - - - - - - - @@ -122,7 +113,7 @@ - + @@ -206,7 +197,7 @@ - + diff --git a/src/modules/launcher/PowerLauncher/loc/it/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl b/src/modules/launcher/PowerLauncher/loc/it/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl index 3e56a3c315..8b86bbcaf5 100644 --- a/src/modules/launcher/PowerLauncher/loc/it/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl +++ b/src/modules/launcher/PowerLauncher/loc/it/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl @@ -100,15 +100,6 @@ - - - - - - - - - @@ -122,7 +113,7 @@ - + @@ -206,7 +197,7 @@ - + diff --git a/src/modules/launcher/PowerLauncher/loc/pl/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl b/src/modules/launcher/PowerLauncher/loc/pl/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl index e0ffd48cb3..b5811327c7 100644 --- a/src/modules/launcher/PowerLauncher/loc/pl/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl +++ b/src/modules/launcher/PowerLauncher/loc/pl/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl @@ -100,15 +100,6 @@ - - - - - - - - - @@ -122,7 +113,7 @@ - + @@ -206,7 +197,7 @@ - + diff --git a/src/modules/launcher/PowerLauncher/loc/pt-PT/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl b/src/modules/launcher/PowerLauncher/loc/pt-PT/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl index 4f776a6a6a..93a9f53b27 100644 --- a/src/modules/launcher/PowerLauncher/loc/pt-PT/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl +++ b/src/modules/launcher/PowerLauncher/loc/pt-PT/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl @@ -100,15 +100,6 @@ - - - - - - - - - @@ -122,7 +113,7 @@ - + @@ -206,7 +197,7 @@ - + diff --git a/src/modules/launcher/PowerLauncher/loc/ru/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl b/src/modules/launcher/PowerLauncher/loc/ru/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl index 562a8afdff..796a613f9b 100644 --- a/src/modules/launcher/PowerLauncher/loc/ru/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl +++ b/src/modules/launcher/PowerLauncher/loc/ru/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl @@ -100,15 +100,6 @@ - - - - - - - - - @@ -122,7 +113,7 @@ - + @@ -206,7 +197,7 @@ - + diff --git a/src/modules/launcher/PowerLauncher/loc/sv/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl b/src/modules/launcher/PowerLauncher/loc/sv/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl index 9c07e07da0..afa19fd946 100644 --- a/src/modules/launcher/PowerLauncher/loc/sv/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl +++ b/src/modules/launcher/PowerLauncher/loc/sv/src/modules/launcher/PowerLauncher/Properties/Resources.resx.lcl @@ -100,15 +100,6 @@ - - - - - - - - - @@ -122,7 +113,7 @@ - + @@ -206,7 +197,7 @@ - + diff --git a/src/modules/powerrename/dll/loc/cs/src/modules/powerrename/dll/Resources.resx.lcl b/src/modules/powerrename/dll/loc/cs/src/modules/powerrename/dll/Resources.resx.lcl index 08e2346ee7..e61354a276 100644 --- a/src/modules/powerrename/dll/loc/cs/src/modules/powerrename/dll/Resources.resx.lcl +++ b/src/modules/powerrename/dll/loc/cs/src/modules/powerrename/dll/Resources.resx.lcl @@ -23,7 +23,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/src/modules/powerrename/dll/loc/hu/src/modules/powerrename/dll/Resources.resx.lcl b/src/modules/powerrename/dll/loc/hu/src/modules/powerrename/dll/Resources.resx.lcl index 9b07049507..9c2eb0b4f6 100644 --- a/src/modules/powerrename/dll/loc/hu/src/modules/powerrename/dll/Resources.resx.lcl +++ b/src/modules/powerrename/dll/loc/hu/src/modules/powerrename/dll/Resources.resx.lcl @@ -23,7 +23,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/src/modules/powerrename/dll/loc/it/src/modules/powerrename/dll/Resources.resx.lcl b/src/modules/powerrename/dll/loc/it/src/modules/powerrename/dll/Resources.resx.lcl index 9c3a2a74ad..3c6daa0963 100644 --- a/src/modules/powerrename/dll/loc/it/src/modules/powerrename/dll/Resources.resx.lcl +++ b/src/modules/powerrename/dll/loc/it/src/modules/powerrename/dll/Resources.resx.lcl @@ -23,7 +23,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/src/modules/powerrename/dll/loc/pl/src/modules/powerrename/dll/Resources.resx.lcl b/src/modules/powerrename/dll/loc/pl/src/modules/powerrename/dll/Resources.resx.lcl index 98423e88df..b6cb4b3edf 100644 --- a/src/modules/powerrename/dll/loc/pl/src/modules/powerrename/dll/Resources.resx.lcl +++ b/src/modules/powerrename/dll/loc/pl/src/modules/powerrename/dll/Resources.resx.lcl @@ -23,7 +23,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/src/modules/powerrename/dll/loc/pt-PT/src/modules/powerrename/dll/Resources.resx.lcl b/src/modules/powerrename/dll/loc/pt-PT/src/modules/powerrename/dll/Resources.resx.lcl index a5793c1883..f596bb5606 100644 --- a/src/modules/powerrename/dll/loc/pt-PT/src/modules/powerrename/dll/Resources.resx.lcl +++ b/src/modules/powerrename/dll/loc/pt-PT/src/modules/powerrename/dll/Resources.resx.lcl @@ -23,7 +23,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/src/modules/powerrename/dll/loc/ru/src/modules/powerrename/dll/Resources.resx.lcl b/src/modules/powerrename/dll/loc/ru/src/modules/powerrename/dll/Resources.resx.lcl index 4ed7e342ed..6e2ff0fd86 100644 --- a/src/modules/powerrename/dll/loc/ru/src/modules/powerrename/dll/Resources.resx.lcl +++ b/src/modules/powerrename/dll/loc/ru/src/modules/powerrename/dll/Resources.resx.lcl @@ -23,7 +23,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/src/modules/powerrename/ui/loc/cs/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/cs/src/modules/powerrename/ui/Resources.resx.lcl index ebe5cc481a..032c40d122 100644 --- a/src/modules/powerrename/ui/loc/cs/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/cs/src/modules/powerrename/ui/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/powerrename/ui/loc/hu/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/hu/src/modules/powerrename/ui/Resources.resx.lcl index ef18abb14b..3964f1fa6a 100644 --- a/src/modules/powerrename/ui/loc/hu/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/hu/src/modules/powerrename/ui/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/powerrename/ui/loc/it/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/it/src/modules/powerrename/ui/Resources.resx.lcl index 2764360a5e..4215974c3f 100644 --- a/src/modules/powerrename/ui/loc/it/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/it/src/modules/powerrename/ui/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/powerrename/ui/loc/pl/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/pl/src/modules/powerrename/ui/Resources.resx.lcl index 8d9b3f981f..87903b28f8 100644 --- a/src/modules/powerrename/ui/loc/pl/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/pl/src/modules/powerrename/ui/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/powerrename/ui/loc/pt-PT/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/pt-PT/src/modules/powerrename/ui/Resources.resx.lcl index 78bf2fa2ca..eab1e76390 100644 --- a/src/modules/powerrename/ui/loc/pt-PT/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/pt-PT/src/modules/powerrename/ui/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/modules/powerrename/ui/loc/ru/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/ru/src/modules/powerrename/ui/Resources.resx.lcl index 741ff97932..dc9bfe8a67 100644 --- a/src/modules/powerrename/ui/loc/ru/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/ru/src/modules/powerrename/ui/Resources.resx.lcl @@ -14,7 +14,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/cs/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/cs/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index cb823c6da1..ac6f923487 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/cs/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/cs/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -59,7 +59,7 @@ - + @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2219,7 +2267,7 @@ - + @@ -2273,7 +2321,7 @@ - + @@ -2456,7 +2504,7 @@ - + @@ -2519,7 +2567,7 @@ - + @@ -2783,7 +2831,7 @@ - + @@ -2804,7 +2852,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/de/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/de/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 57539a68c2..52bf283e76 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/de/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/de/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -59,7 +59,7 @@ - + @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2219,7 +2267,7 @@ - + @@ -2273,7 +2321,7 @@ - + @@ -2519,7 +2567,7 @@ - + @@ -2783,7 +2831,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/es/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/es/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index babbf1eb58..c660058033 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/es/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/es/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2519,7 +2567,7 @@ - + @@ -2650,6 +2698,15 @@ + + + + + + + + + @@ -2774,7 +2831,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/fr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/fr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index cf53d7f442..12b7d52522 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/fr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/fr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,12 @@ + + + + + + @@ -577,6 +604,18 @@ + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/hu/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/hu/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index abd3776140..d3be99c5a0 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/hu/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/hu/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -59,7 +59,7 @@ - + @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,12 @@ + + + + + + @@ -577,6 +604,18 @@ + + + + + + + + + + + + @@ -2219,7 +2258,7 @@ - + @@ -2273,7 +2312,7 @@ - + @@ -2456,7 +2495,7 @@ - + @@ -2519,7 +2558,7 @@ - + @@ -2650,6 +2689,15 @@ + + + + + + + + + @@ -2774,7 +2822,7 @@ - + @@ -2795,7 +2843,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/it/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/it/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 63bc33bb4b..ccc49ee9e0 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/it/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/it/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -59,7 +59,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2003,7 +2051,7 @@ - + @@ -2012,7 +2060,7 @@ - + @@ -2021,7 +2069,7 @@ - + @@ -2030,7 +2078,7 @@ - + @@ -2039,7 +2087,7 @@ - + @@ -2057,7 +2105,7 @@ - + @@ -2075,7 +2123,7 @@ - + @@ -2219,7 +2267,7 @@ - + @@ -2273,7 +2321,7 @@ - + @@ -2417,7 +2465,7 @@ - + @@ -2456,7 +2504,7 @@ - + @@ -2519,7 +2567,7 @@ - + @@ -2618,7 +2666,7 @@ - + @@ -2783,7 +2831,7 @@ - + @@ -2804,7 +2852,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ja/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ja/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index fc22042d4f..24b096d659 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ja/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ja/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ko/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ko/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 50336295e7..f5da45e20b 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ko/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ko/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2650,6 +2698,15 @@ + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/nl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/nl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index a7877be5b1..023ffa6717 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/nl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/nl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2672,7 +2720,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index d2f06c6a0c..47910905a0 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -59,7 +59,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2003,7 +2051,7 @@ - + @@ -2012,7 +2060,7 @@ - + @@ -2021,7 +2069,7 @@ - + @@ -2030,7 +2078,7 @@ - + @@ -2039,7 +2087,7 @@ - + @@ -2057,7 +2105,7 @@ - + @@ -2075,7 +2123,7 @@ - + @@ -2219,7 +2267,7 @@ - + @@ -2273,7 +2321,7 @@ - + @@ -2417,7 +2465,7 @@ - + @@ -2456,7 +2504,7 @@ - + @@ -2519,7 +2567,7 @@ - + @@ -2672,7 +2720,7 @@ - + @@ -2783,7 +2831,7 @@ - + @@ -2804,7 +2852,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-BR/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-BR/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index c9c3ff3966..89628b1717 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-BR/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-BR/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -2650,6 +2671,15 @@ + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-PT/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-PT/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 83ef88bd51..c016ae79b6 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-PT/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-PT/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -59,7 +59,7 @@ - + @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2057,7 +2105,7 @@ - + @@ -2219,7 +2267,7 @@ - + @@ -2273,7 +2321,7 @@ - + @@ -2456,7 +2504,7 @@ - + @@ -2519,7 +2567,7 @@ - + @@ -2783,7 +2831,7 @@ - + @@ -2804,7 +2852,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ru/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ru/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index f11726a328..d8268e24d3 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ru/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ru/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -59,7 +59,7 @@ - + @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2219,7 +2267,7 @@ - + @@ -2273,7 +2321,7 @@ - + @@ -2456,7 +2504,7 @@ - + @@ -2519,7 +2567,7 @@ - + @@ -2650,6 +2698,15 @@ + + + + + + + + + @@ -2774,7 +2831,7 @@ - + @@ -2795,7 +2852,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/sv/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/sv/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index b4adc2049a..8fce4a428f 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/sv/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/sv/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -59,7 +59,7 @@ - + @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,12 @@ + + + + + + @@ -577,6 +604,18 @@ + + + + + + + + + + + + @@ -2219,7 +2258,7 @@ - + @@ -2273,7 +2312,7 @@ - + @@ -2519,7 +2558,7 @@ - + @@ -2672,7 +2711,7 @@ - + @@ -2783,7 +2822,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/tr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/tr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index a403c50ec5..f8f46fe3b6 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/tr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/tr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -208,6 +208,18 @@ + + + + + + + + + + + + @@ -219,10 +231,13 @@ - - + + + + + @@ -412,6 +427,12 @@ + + + + + + @@ -577,6 +598,18 @@ + + + + + + + + + + + + @@ -2618,7 +2651,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hans/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hans/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 9200413e31..f0af6410c1 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hans/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hans/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -125,7 +125,7 @@ - + @@ -208,6 +208,18 @@ + + + + + + + + + + + + @@ -219,10 +231,13 @@ - - + + + + + @@ -412,6 +427,12 @@ + + + + + + @@ -577,6 +598,18 @@ + + + + + + + + + + + + @@ -1646,7 +1679,7 @@ - + @@ -2650,6 +2683,15 @@ + + + + + + + + + @@ -2663,7 +2705,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hant/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hant/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index a6141b467c..295ee1f59d 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hant/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hant/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -208,6 +208,24 @@ + + + + + + + + + + + + + + + + + + @@ -219,10 +237,13 @@ - + - + + + + @@ -412,6 +433,15 @@ + + + + + + + + + @@ -577,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -1646,7 +1694,7 @@ - + @@ -2672,7 +2720,7 @@ - + From ffda6a51bbf1ccbeaea992fb77927900bfcea07f Mon Sep 17 00:00:00 2001 From: Andrey Nekrasov Date: Tue, 30 Mar 2021 18:27:42 +0300 Subject: [PATCH 52/82] [Tools] Add DShow webcam report tool (#10502) --- .github/actions/spell-check/expect.txt | 33 ++- .pipelines/build-tools.cmd | 1 + .../ci/templates/build-powertoys-steps.yml | 19 ++ .pipelines/pipeline.user.windows.yml | 2 + tools/WebcamReportTool/DirectShowUtils.cpp | 26 +++ tools/WebcamReportTool/DirectShowUtils.h | 22 ++ tools/WebcamReportTool/WebcamReportTool.sln | 25 ++ .../WebcamReportTool/WebcamReportTool.vcxproj | 69 ++++++ tools/WebcamReportTool/main.cpp | 219 ++++++++++++++++++ tools/WebcamReportTool/packages.config | 5 + 10 files changed, 414 insertions(+), 7 deletions(-) create mode 100644 tools/WebcamReportTool/DirectShowUtils.cpp create mode 100644 tools/WebcamReportTool/DirectShowUtils.h create mode 100644 tools/WebcamReportTool/WebcamReportTool.sln create mode 100644 tools/WebcamReportTool/WebcamReportTool.vcxproj create mode 100644 tools/WebcamReportTool/main.cpp create mode 100644 tools/WebcamReportTool/packages.config diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index 8a4cb90321..64b329f0bb 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -49,6 +49,8 @@ amd Amicrosoft AMirror AModifier +AMPROPERTY +AMPROPSETID anges ansicolor antialiased @@ -175,7 +177,6 @@ BRIGHTGREEN Browsable bsd bstr -BText bti Btn BTNFACE @@ -204,10 +205,12 @@ CDATA CDBECF cdecl CDeclaration +CDEF cdpx cdpxwin CENTERALIGN cfg +cguid charconv charset chdir @@ -434,6 +437,8 @@ DEU Devagya devblogs devdocs +devenum +DEVMON df DFactory Dialpad @@ -486,6 +491,7 @@ drivedetectionwarning DRM dropdown dropref +dshow dst DSVG DText @@ -773,7 +779,6 @@ GNumber google GPTR grayscale -GText gui guiddef GUITHREADINFO @@ -880,6 +885,7 @@ IAppx IAsync IAuto IBackground +IBase IBeam IBind icase @@ -898,6 +904,7 @@ Iconset IContext ICONWARNING ICore +ICreate IData IDCANCEL IDD @@ -945,6 +952,7 @@ IInput IInspectable IItem IJson +IKs IList ILogon IMAGEHLP @@ -955,6 +963,7 @@ IMarkdown ime imeutil img +IMoniker IMonitor IMouse impl @@ -970,7 +979,7 @@ inheritdoc ini INITCOMMONCONTROLSEX INITDIALOG -INITGUID +initguid inl Inlines inorder @@ -992,7 +1001,6 @@ INSTALLLOCATION INSTALLLOGATTRIBUTES INSTALLLOGMODE INSTALLMESSAGE -installpath INSTALLPROPERTY INSTALLSTARTMENUSHORTCUT INSTALLSTATE @@ -1019,6 +1027,7 @@ ipc ipcmanager ipconfig IPersist +IPin IPlugin IPower ipp @@ -1027,6 +1036,7 @@ ipreviewhandlertranslateaccelerator ipreviewhandlervisualssetfont IPrincipal IProgram +IProperty IPublic IQuery IRead @@ -1241,6 +1251,7 @@ lzw mailto MAINICON Mainwindow +majortype makeappx MAKEINTRESOURCE MAKEINTRESOURCEW @@ -1267,6 +1278,8 @@ Mdb MDICHILD MDL mdpreviewhandler +MEDIASUBTYPE +MEDIATYPE Melman memcpy memset @@ -1293,6 +1306,7 @@ miniz MINMAXINFO Miracast mixin +MJPG mkdir MLogo MMI @@ -1568,6 +1582,7 @@ phwnd pici pid pidl +PINDIR pinfo pinvoke Pipelinhttps @@ -1781,13 +1796,12 @@ roslyn royvou rpc RRF -rshift RSHIFT +rshift Rsp rst Rstrtmgr RTB -RText rtf Rtl RTLREADING @@ -1999,6 +2013,7 @@ stringify STRINGIZE stringtable stringval +Strmiids strsafe strutil sttngs @@ -2244,6 +2259,7 @@ Versioning VFT vh vid +VIDEOINFOHEADER viewbox viewmodel virtualization @@ -2293,7 +2309,7 @@ wdp wdupenv weakme webapp -Webcam +webcam webclient webkit webp @@ -2346,6 +2362,7 @@ winspool winstore winui winxamlmanager +wistd withinrafael Withscript wix @@ -2435,6 +2452,8 @@ YLogo yml YOffset YStr +YUY +YUYV yy Zc ZEROINIT diff --git a/.pipelines/build-tools.cmd b/.pipelines/build-tools.cmd index 47da7a5c96..aa5f782932 100644 --- a/.pipelines/build-tools.cmd +++ b/.pipelines/build-tools.cmd @@ -7,4 +7,5 @@ set SolutionDir=%cd% popd SET IsPipeline=1 call msbuild ../tools/BugReportTool/BugReportTool.sln /p:Configuration=Release /p:Platform=x64 /p:CIBuild=true || exit /b 1 +call msbuild ../tools/WebcamReportTool/WebcamReportTool.sln /p:Configuration=Release /p:Platform=x64 /p:CIBuild=true || exit /b 1 diff --git a/.pipelines/ci/templates/build-powertoys-steps.yml b/.pipelines/ci/templates/build-powertoys-steps.yml index fe149c755f..a053bf883d 100644 --- a/.pipelines/ci/templates/build-powertoys-steps.yml +++ b/.pipelines/ci/templates/build-powertoys-steps.yml @@ -55,6 +55,25 @@ steps: msbuildArgs: ${{ parameters.additionalBuildArguments }} maximumCpuCount: true +- task: NuGetCommand@2 + displayName: Restore NuGet packages for WebcamReportTool.sln + inputs: + command: restore + feedsToUse: config + configPath: NuGet.config + restoreSolution: tools\WebcamReportTool\WebcamReportTool.sln + restoreDirectory: '$(Build.SourcesDirectory)\tools\WebcamReportTool\packages' + +- task: VSBuild@1 + displayName: 'Build WebcamReportTool.sln' + inputs: + solution: '**\WebcamReportTool.sln' + vsVersion: 16.0 + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + msbuildArgs: ${{ parameters.additionalBuildArguments }} + maximumCpuCount: true + - task: NuGetCommand@2 displayName: Restore NuGet packages for PowerToysSetup.sln inputs: diff --git a/.pipelines/pipeline.user.windows.yml b/.pipelines/pipeline.user.windows.yml index d873aed929..5dcefed0eb 100644 --- a/.pipelines/pipeline.user.windows.yml +++ b/.pipelines/pipeline.user.windows.yml @@ -66,6 +66,7 @@ build: include: - 'action_runner.exe' - 'BugReportTool\BugReportTool.exe' + - 'WebcamReportTool\WebcamReportTool.exe' - 'modules\ColorPicker\ColorPicker.dll' - 'modules\ColorPicker\ColorPickerUI.dll' - 'modules\ColorPicker\ColorPickerUI.exe' @@ -168,6 +169,7 @@ build: to: 'Build_Output' include: - 'BugReportTool\BugReportTool.exe' + - 'WebcamReportTool\WebcamReportTool.exe' signing_options: sign_inline: true # This does signing a soon as this command completes - !!buildcommand diff --git a/tools/WebcamReportTool/DirectShowUtils.cpp b/tools/WebcamReportTool/DirectShowUtils.cpp new file mode 100644 index 0000000000..b7feffd71b --- /dev/null +++ b/tools/WebcamReportTool/DirectShowUtils.cpp @@ -0,0 +1,26 @@ +#include "DirectShowUtils.h" + +void FreeMediaTypeHelper(AM_MEDIA_TYPE& mt) +{ + if (mt.cbFormat != 0) + { + CoTaskMemFree(mt.pbFormat); + mt.cbFormat = 0; + mt.pbFormat = nullptr; + } + if (mt.pUnk != nullptr) + { + mt.pUnk->Release(); + mt.pUnk = nullptr; + } +} + +void DeleteMediaTypeHelper(AM_MEDIA_TYPE* pmt) +{ + if (!pmt) + { + return; + } + FreeMediaTypeHelper(*pmt); + CoTaskMemFree(const_cast(pmt)); +} diff --git a/tools/WebcamReportTool/DirectShowUtils.h b/tools/WebcamReportTool/DirectShowUtils.h new file mode 100644 index 0000000000..c230422238 --- /dev/null +++ b/tools/WebcamReportTool/DirectShowUtils.h @@ -0,0 +1,22 @@ +#pragma once +#include + +#define WIN32_LEAN_AND_MEAN +#include +#include + +#include +#include + +#include +#include + +std::ofstream& log(); + +#define TRACE log() << __FUNCTION__ << '\n'; +#define LOG(msg) log() << msg << '\n'; + +void DeleteMediaTypeHelper(AM_MEDIA_TYPE* pmt); + +using unique_media_type_ptr = + wistd::unique_ptr>; diff --git a/tools/WebcamReportTool/WebcamReportTool.sln b/tools/WebcamReportTool/WebcamReportTool.sln new file mode 100644 index 0000000000..88a5d0fcb1 --- /dev/null +++ b/tools/WebcamReportTool/WebcamReportTool.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31005.135 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebcamReportTool", "WebcamReportTool.vcxproj", "{FC9599B4-68CD-E14B-71D7-456FDD8D0845}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC9599B4-68CD-E14B-71D7-456FDD8D0845}.Debug|x64.ActiveCfg = Debug|x64 + {FC9599B4-68CD-E14B-71D7-456FDD8D0845}.Debug|x64.Build.0 = Debug|x64 + {FC9599B4-68CD-E14B-71D7-456FDD8D0845}.Release|x64.ActiveCfg = Release|x64 + {FC9599B4-68CD-E14B-71D7-456FDD8D0845}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {536C9E03-09C5-4CAA-AA5E-D62D34A5C09A} + EndGlobalSection +EndGlobal diff --git a/tools/WebcamReportTool/WebcamReportTool.vcxproj b/tools/WebcamReportTool/WebcamReportTool.vcxproj new file mode 100644 index 0000000000..9a8fec4aea --- /dev/null +++ b/tools/WebcamReportTool/WebcamReportTool.vcxproj @@ -0,0 +1,69 @@ + + + + + + + {FC9599B4-68CD-E14B-71D7-456FDD8D0845} + true + WebcamReportTool + WebcamReportTool + + + $(SolutionDir)..\..\$(Platform)\$(Configuration)\obj\$(ProjectName)\ + $(SolutionDir)..\..\$(Platform)\$(Configuration)\$(ProjectName)\ + + + + + + + + + + + + true + WebcamReportTool + .exe + include;$(IncludePath) + lib;$(LibraryPath) + + + false + WebcamReportTool + .exe + include;$(IncludePath) + lib;$(LibraryPath) + + + + NotUsing + + + Console + Windowsapp.lib;Strmiids.lib;%(AdditionalDependencies) + true + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/tools/WebcamReportTool/main.cpp b/tools/WebcamReportTool/main.cpp new file mode 100644 index 0000000000..06e25ab2f8 --- /dev/null +++ b/tools/WebcamReportTool/main.cpp @@ -0,0 +1,219 @@ +#include +#define WIN32_LEAN_AND_MEAN + +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include "DirectShowUtils.h" + +std::ofstream& log() +{ + static std::ofstream report = []{ + char buffer[MAX_PATH]{}; + if (SHGetSpecialFolderPathA(HWND_DESKTOP, buffer, CSIDL_DESKTOP, false)) + { + std::string path = buffer; + path += "\\WebcamReport.txt"; + return std::ofstream{ path }; + } + else + { + return std::ofstream{ "WebcamReport.txt" }; + } + }(); + return report; +} + +std::string GetMediaSubTypeString(const GUID& guid) +{ + if (guid == MEDIASUBTYPE_RGB24) + { + return "MEDIASUBTYPE_RGB24"; + } + else if (guid == MEDIASUBTYPE_RGB32) + { + return "MEDIASUBTYPE_RGB32"; + } + else if (guid == MEDIASUBTYPE_YUY2) + { + return "MEDIASUBTYPE_YUY2"; + } + else if (guid == MEDIASUBTYPE_MJPG) + { + return "MEDIASUBTYPE_MJPG"; + } + else if (guid == MEDIASUBTYPE_NV12) + { + return "MEDIASUBTYPE_NV12"; + } + else if (guid == MEDIASUBTYPE_NV11) + { + return "MEDIASUBTYPE_NV11"; + } + else if (guid == MEDIASUBTYPE_YV12) + { + return "MEDIASUBTYPE_YV12"; + } + else if (guid == MEDIASUBTYPE_YUYV) + { + return "MEDIASUBTYPE_YUYV"; + } + else + { + OLECHAR* guidString = nullptr; + StringFromCLSID(guid, &guidString); + if (guidString) + { + std::wstring_view wideView{guidString}; + std::string result; + for (const auto c :wideView) + { + result += static_cast(c); + } + ::CoTaskMemFree(guidString); + return result; + } + else + { + return "MEDIASUBTYPE_UNKNOWN"; + } + } +} + +void LogMediaTypes(wil::com_ptr_nothrow& pin) +{ + wil::com_ptr_nothrow mediaTypeEnum; + if (pin->EnumMediaTypes(&mediaTypeEnum); !mediaTypeEnum) + { + return; + } + ULONG _ = 0; + unique_media_type_ptr mt; + log() << "Supported formats:\n"; + while (mediaTypeEnum->Next(1, wil::out_param(mt), &_) == S_OK) + { + if (mt->majortype != MEDIATYPE_Video) + { + continue; + } + auto format = reinterpret_cast(mt->pbFormat); + if (!format->AvgTimePerFrame) + { + continue; + } + const auto formatAvgFPS = 10000000LL / format->AvgTimePerFrame; + log() << GetMediaSubTypeString(mt->subtype) << '\t' << format->bmiHeader.biWidth << "x" + << format->bmiHeader.biHeight << " - " << formatAvgFPS << "fps\n"; + } + log() << '\n'; +} + +void ReportAllWebcams() +{ + auto enumeratorFactory = wil::CoCreateInstanceNoThrow(CLSID_SystemDeviceEnum); + if (!enumeratorFactory) + { + LOG("Couldn't create devenum factory"); + return; + } + + wil::com_ptr_nothrow enumMoniker; + enumeratorFactory->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &enumMoniker, CDEF_DEVMON_PNP_DEVICE); + if (!enumMoniker) + { + LOG("Couldn't create class enumerator"); + return; + } + + ULONG _ = 0; + wil::com_ptr_nothrow moniker; + while (enumMoniker->Next(1, &moniker, &_) == S_OK) + { + wil::com_ptr_nothrow propertyData; + moniker->BindToStorage(nullptr, nullptr, IID_IPropertyBag, reinterpret_cast(&propertyData)); + if (!propertyData) + { + LOG("BindToStorage failed"); + continue; + } + + wil::unique_variant propVal; + propVal.vt = VT_BSTR; + + if (FAILED(propertyData->Read(L"FriendlyName", &propVal, nullptr))) + { + LOG("Couldn't obtain FriendlyName property"); + continue; + } + std::wstring wideFriendlyName = { propVal.bstrVal, SysStringLen(propVal.bstrVal) }; + std::string friendlyName; + for (wchar_t c : wideFriendlyName) + { + friendlyName += (char)c; + } + log() << "Webcam " << friendlyName << '\n'; + + propVal.reset(); + propVal.vt = VT_BSTR; + + if (FAILED(propertyData->Read(L"DevicePath", &propVal, nullptr))) + { + LOG("Couldn't obtain DevicePath property"); + continue; + } + wil::com_ptr_nothrow filter; + moniker->BindToObject(nullptr, nullptr, IID_IBaseFilter, reinterpret_cast(&filter)); + if (!filter) + { + LOG("Couldn't BindToObject"); + continue; + } + + wil::com_ptr_nothrow pinsEnum; + if (FAILED(filter->EnumPins(&pinsEnum))) + { + LOG("BindToObject EnumPins"); + continue; + } + wil::com_ptr_nothrow pin; + + while (pinsEnum->Next(1, &pin, &_) == S_OK) + { + // Skip pins which do not belong to capture category + GUID category{}; + DWORD __; + if (auto props = pin.try_copy(); + !props || + FAILED(props->Get(AMPROPSETID_Pin, AMPROPERTY_PIN_CATEGORY, nullptr, 0, &category, sizeof(GUID), &__)) || + category != PIN_CATEGORY_CAPTURE) + { + continue; + } + + // Skip non-output pins + if (PIN_DIRECTION direction = {}; FAILED(pin->QueryDirection(&direction)) || direction != PINDIR_OUTPUT) + { + continue; + } + LogMediaTypes(pin); + } + } +} + +int main() +{ + auto comCtx = wil::CoInitializeEx(); + log() << "Report started\n"; + ReportAllWebcams(); + return 0; +} diff --git a/tools/WebcamReportTool/packages.config b/tools/WebcamReportTool/packages.config new file mode 100644 index 0000000000..fda08e21c1 --- /dev/null +++ b/tools/WebcamReportTool/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file From fba4fd91a1686d2298b041c1b6e16abaebbb5a4e Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Tue, 30 Mar 2021 09:52:00 -0700 Subject: [PATCH 53/82] Updating nugets (#10493) * Update System.Text.Json and Newtsoft.json * update newtson.json * Updating testing only items. --- .../interop-tests/Microsoft.Interop.Tests.csproj | 11 +++++++---- .../UnitTest-ColorPickerUI.csproj | 8 ++++---- .../editor/FancyZonesEditor/FancyZonesEditor.csproj | 2 +- .../imageresizer/tests/ImageResizerUITest.csproj | 4 ++-- src/modules/imageresizer/ui/ImageResizerUI.csproj | 2 +- ...unity.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj | 2 +- .../Microsoft.Plugin.Folder.UnitTests.csproj | 6 +++--- .../Microsoft.Plugin.Folder.csproj | 8 ++++---- .../Microsoft.Plugin.Program.UnitTests.csproj | 6 +++--- .../Microsoft.Plugin.Uri.UnitTests.csproj | 4 ++-- ...ft.PowerToys.Run.Plugin.Calculator.UnitTest.csproj | 4 ++-- ...oft.PowerToys.Run.Plugin.Registry.UnitTests.csproj | 6 +++--- ...osoft.PowerToys.Run.Plugin.System.UnitTests.csproj | 6 +++--- .../launcher/PowerLauncher/PowerLauncher.csproj | 2 +- src/modules/launcher/Wox.Plugin/Wox.Plugin.csproj | 2 +- src/modules/launcher/Wox.Test/Wox.Test.csproj | 6 +++--- .../UnitTests-MarkdownPreviewHandler.csproj | 6 +++--- .../UnitTests-PreviewHandlerCommon.csproj | 8 ++++---- .../UnitTests-SvgPreviewHandler.csproj | 8 ++++---- .../UnitTests-SvgThumbnailProvider.csproj | 10 +++++----- .../Microsoft.PowerToys.Settings.UI.Library.csproj | 2 +- .../Microsoft.PowerToys.Settings.UI.UnitTests.csproj | 10 +++++----- .../Microsoft.PowerToys.Settings.UI.csproj | 2 +- 23 files changed, 64 insertions(+), 61 deletions(-) diff --git a/src/common/interop/interop-tests/Microsoft.Interop.Tests.csproj b/src/common/interop/interop-tests/Microsoft.Interop.Tests.csproj index 2f07116d1d..2001931efd 100644 --- a/src/common/interop/interop-tests/Microsoft.Interop.Tests.csproj +++ b/src/common/interop/interop-tests/Microsoft.Interop.Tests.csproj @@ -52,10 +52,13 @@ - - - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/modules/colorPicker/UnitTest-ColorPickerUI/UnitTest-ColorPickerUI.csproj b/src/modules/colorPicker/UnitTest-ColorPickerUI/UnitTest-ColorPickerUI.csproj index c03dd465a8..d95394e7e8 100644 --- a/src/modules/colorPicker/UnitTest-ColorPickerUI/UnitTest-ColorPickerUI.csproj +++ b/src/modules/colorPicker/UnitTest-ColorPickerUI/UnitTest-ColorPickerUI.csproj @@ -28,13 +28,13 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/FancyZonesEditor.csproj b/src/modules/fancyzones/editor/FancyZonesEditor/FancyZonesEditor.csproj index c3eabfda28..612e95b12f 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/FancyZonesEditor.csproj +++ b/src/modules/fancyzones/editor/FancyZonesEditor/FancyZonesEditor.csproj @@ -71,7 +71,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/modules/imageresizer/tests/ImageResizerUITest.csproj b/src/modules/imageresizer/tests/ImageResizerUITest.csproj index e35610ac35..2a82c19f61 100644 --- a/src/modules/imageresizer/tests/ImageResizerUITest.csproj +++ b/src/modules/imageresizer/tests/ImageResizerUITest.csproj @@ -64,8 +64,8 @@ all - - + + all diff --git a/src/modules/imageresizer/ui/ImageResizerUI.csproj b/src/modules/imageresizer/ui/ImageResizerUI.csproj index 07d72c98e1..a73fd9eb19 100644 --- a/src/modules/imageresizer/ui/ImageResizerUI.csproj +++ b/src/modules/imageresizer/ui/ImageResizerUI.csproj @@ -66,7 +66,7 @@ - + all diff --git a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Community.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Community.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj index 6e5dcd8384..ed2b977245 100644 --- a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Community.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj +++ b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Community.PowerToys.Run.Plugin.VSCodeWorkspaces.csproj @@ -53,7 +53,7 @@ - + diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Folder.UnitTests/Microsoft.Plugin.Folder.UnitTests.csproj b/src/modules/launcher/Plugins/Microsoft.Plugin.Folder.UnitTests/Microsoft.Plugin.Folder.UnitTests.csproj index 752b012246..613d6a9f66 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.Folder.UnitTests/Microsoft.Plugin.Folder.UnitTests.csproj +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Folder.UnitTests/Microsoft.Plugin.Folder.UnitTests.csproj @@ -10,10 +10,10 @@ - - + + - + diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Folder/Microsoft.Plugin.Folder.csproj b/src/modules/launcher/Plugins/Microsoft.Plugin.Folder/Microsoft.Plugin.Folder.csproj index 23dfdd3aae..46877d7a23 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.Folder/Microsoft.Plugin.Folder.csproj +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Folder/Microsoft.Plugin.Folder.csproj @@ -60,13 +60,13 @@ - + false - + false - + false @@ -77,7 +77,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Program.UnitTests/Microsoft.Plugin.Program.UnitTests.csproj b/src/modules/launcher/Plugins/Microsoft.Plugin.Program.UnitTests/Microsoft.Plugin.Program.UnitTests.csproj index aefdf6ded2..4cf3c81355 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.Program.UnitTests/Microsoft.Plugin.Program.UnitTests.csproj +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Program.UnitTests/Microsoft.Plugin.Program.UnitTests.csproj @@ -25,10 +25,10 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + - + diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Uri.UnitTests/Microsoft.Plugin.Uri.UnitTests.csproj b/src/modules/launcher/Plugins/Microsoft.Plugin.Uri.UnitTests/Microsoft.Plugin.Uri.UnitTests.csproj index bf8a7e83e8..3f4ee12d6e 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.Uri.UnitTests/Microsoft.Plugin.Uri.UnitTests.csproj +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Uri.UnitTests/Microsoft.Plugin.Uri.UnitTests.csproj @@ -10,9 +10,9 @@ - + - + diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest/Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest.csproj b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest/Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest.csproj index 508f7a13f4..bdffa1cb1d 100644 --- a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest/Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest.csproj +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest/Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest.csproj @@ -10,9 +10,9 @@ - + - + diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry.UnitTest/Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.csproj b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry.UnitTest/Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.csproj index 190eb9baf4..4122d0b1e0 100644 --- a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry.UnitTest/Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.csproj +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry.UnitTest/Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.csproj @@ -33,9 +33,9 @@ - - - + + + diff --git a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System.UnitTests/Microsoft.PowerToys.Run.Plugin.System.UnitTests.csproj b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System.UnitTests/Microsoft.PowerToys.Run.Plugin.System.UnitTests.csproj index d653865ae0..de7ed9270b 100644 --- a/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System.UnitTests/Microsoft.PowerToys.Run.Plugin.System.UnitTests.csproj +++ b/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System.UnitTests/Microsoft.PowerToys.Run.Plugin.System.UnitTests.csproj @@ -14,10 +14,10 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/modules/launcher/PowerLauncher/PowerLauncher.csproj b/src/modules/launcher/PowerLauncher/PowerLauncher.csproj index e62d5cec64..9745aa61d8 100644 --- a/src/modules/launcher/PowerLauncher/PowerLauncher.csproj +++ b/src/modules/launcher/PowerLauncher/PowerLauncher.csproj @@ -100,7 +100,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/modules/launcher/Wox.Plugin/Wox.Plugin.csproj b/src/modules/launcher/Wox.Plugin/Wox.Plugin.csproj index cf336d10d1..94ed3f0e6f 100644 --- a/src/modules/launcher/Wox.Plugin/Wox.Plugin.csproj +++ b/src/modules/launcher/Wox.Plugin/Wox.Plugin.csproj @@ -77,7 +77,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/modules/launcher/Wox.Test/Wox.Test.csproj b/src/modules/launcher/Wox.Test/Wox.Test.csproj index 498ed4d5ef..d7817e7541 100644 --- a/src/modules/launcher/Wox.Test/Wox.Test.csproj +++ b/src/modules/launcher/Wox.Test/Wox.Test.csproj @@ -60,13 +60,13 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/modules/previewpane/PreviewPaneUnitTests/UnitTests-MarkdownPreviewHandler.csproj b/src/modules/previewpane/PreviewPaneUnitTests/UnitTests-MarkdownPreviewHandler.csproj index 44d54fcd24..c6b29d3875 100644 --- a/src/modules/previewpane/PreviewPaneUnitTests/UnitTests-MarkdownPreviewHandler.csproj +++ b/src/modules/previewpane/PreviewPaneUnitTests/UnitTests-MarkdownPreviewHandler.csproj @@ -28,15 +28,15 @@ - + all - - + + diff --git a/src/modules/previewpane/UnitTests-PreviewHandlerCommon/UnitTests-PreviewHandlerCommon.csproj b/src/modules/previewpane/UnitTests-PreviewHandlerCommon/UnitTests-PreviewHandlerCommon.csproj index 9177869175..e071f80fc2 100644 --- a/src/modules/previewpane/UnitTests-PreviewHandlerCommon/UnitTests-PreviewHandlerCommon.csproj +++ b/src/modules/previewpane/UnitTests-PreviewHandlerCommon/UnitTests-PreviewHandlerCommon.csproj @@ -28,9 +28,9 @@ - - - + + + @@ -52,7 +52,7 @@ - + diff --git a/src/modules/previewpane/UnitTests-SvgPreviewHandler/UnitTests-SvgPreviewHandler.csproj b/src/modules/previewpane/UnitTests-SvgPreviewHandler/UnitTests-SvgPreviewHandler.csproj index ceb7c48469..b0bba5162e 100644 --- a/src/modules/previewpane/UnitTests-SvgPreviewHandler/UnitTests-SvgPreviewHandler.csproj +++ b/src/modules/previewpane/UnitTests-SvgPreviewHandler/UnitTests-SvgPreviewHandler.csproj @@ -31,11 +31,11 @@ all - - - + + + - + diff --git a/src/modules/previewpane/UnitTests-SvgThumbnailProvider/UnitTests-SvgThumbnailProvider.csproj b/src/modules/previewpane/UnitTests-SvgThumbnailProvider/UnitTests-SvgThumbnailProvider.csproj index ed72c5af1c..295188982c 100644 --- a/src/modules/previewpane/UnitTests-SvgThumbnailProvider/UnitTests-SvgThumbnailProvider.csproj +++ b/src/modules/previewpane/UnitTests-SvgThumbnailProvider/UnitTests-SvgThumbnailProvider.csproj @@ -44,15 +44,15 @@ all - - - + + + all - + - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/Microsoft.PowerToys.Settings.UI.Library.csproj b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/Microsoft.PowerToys.Settings.UI.Library.csproj index 209e2647b9..56b8405c27 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/Microsoft.PowerToys.Settings.UI.Library.csproj +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/Microsoft.PowerToys.Settings.UI.Library.csproj @@ -42,7 +42,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + 3.3.0 runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.UnitTests/Microsoft.PowerToys.Settings.UI.UnitTests.csproj b/src/settings-ui/Microsoft.PowerToys.Settings.UI.UnitTests/Microsoft.PowerToys.Settings.UI.UnitTests.csproj index 875e95a3f6..51e345c4d7 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.UnitTests/Microsoft.PowerToys.Settings.UI.UnitTests.csproj +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.UnitTests/Microsoft.PowerToys.Settings.UI.UnitTests.csproj @@ -24,11 +24,11 @@ - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj index c6c91d8a9a..ceef74642e 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj @@ -251,7 +251,7 @@ 2.0.1 - 12.0.3 + 13.0.1 1.1.118 From 38b9ce3aa28c1d62e293f5b5cec9f0612fdffe7d Mon Sep 17 00:00:00 2001 From: Seraphima Zykova Date: Tue, 30 Mar 2021 19:42:10 +0100 Subject: [PATCH 54/82] [FZ Editor] Crash with malformed layout data fix. (#10500) * check values on json parsing * comments * invalidate malformed canvas layouts * changed error message * simplify error message * removed exception message --- .../editor/FancyZonesEditor/App.xaml.cs | 10 +- .../Properties/Resources.Designer.cs | 15 +-- .../Properties/Resources.resx | 7 +- .../Utils/FancyZonesEditorIO.cs | 119 +++++++++++------- 4 files changed, 83 insertions(+), 68 deletions(-) diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/App.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/App.xaml.cs index c259daa011..8d505528af 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/App.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/App.xaml.cs @@ -135,15 +135,7 @@ namespace FancyZonesEditor sb.AppendLine(ParsingErrorDataTag); sb.AppendLine(parseResult.MalformedData); - string message = parseResult.Message + Environment.NewLine + Environment.NewLine + FancyZonesEditor.Properties.Resources.Error_Parsing_Zones_Settings_User_Choice; - if (MessageBox.Show(message, FancyZonesEditor.Properties.Resources.Error_Parsing_Zones_Settings_Title, MessageBoxButton.YesNo) == MessageBoxResult.No) - { - // TODO: log error - ShowExceptionReportMessageBox(sb.ToString()); - Environment.Exit(0); - } - - ShowExceptionReportMessageBox(sb.ToString()); + MessageBox.Show(parseResult.Message, FancyZonesEditor.Properties.Resources.Error_Parsing_Zones_Settings_Title, MessageBoxButton.OK); } MainWindowSettingsModel settings = ((App)Current).MainWindowSettings; diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs index 65f423c184..b0ed1cb6a0 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.Designer.cs @@ -376,11 +376,11 @@ namespace FancyZonesEditor.Properties { } /// - /// Looks up a localized string similar to 'zones-settings.json' contains malformed data.. + /// Looks up a localized string similar to A layout that contained invalid data has been removed.. /// - public static string Error_Parsing_Zones_Settings_Malformed_Data { + public static string Error_Parsing_Zones_Settings_Message { get { - return ResourceManager.GetString("Error_Parsing_Zones_Settings_Malformed_Data", resourceCulture); + return ResourceManager.GetString("Error_Parsing_Zones_Settings_Message", resourceCulture); } } @@ -393,15 +393,6 @@ namespace FancyZonesEditor.Properties { } } - /// - /// Looks up a localized string similar to Would you like to continue? Malformed data will be lost.. - /// - public static string Error_Parsing_Zones_Settings_User_Choice { - get { - return ResourceManager.GetString("Error_Parsing_Zones_Settings_User_Choice", resourceCulture); - } - } - /// /// Looks up a localized string similar to Error persisting custom layout. /// diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx index 122af40493..58809d5097 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx @@ -303,14 +303,11 @@ Delete zone A tooltip on a button that allows the user to delete a zone - - 'zones-settings.json' contains malformed data. - Editor settings parsing error. - - Would you like to continue? Malformed data will be lost. + + A layout that contained invalid data has been removed. Apply layout diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs index 439577e0f1..4a61063e03 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs @@ -549,7 +549,7 @@ namespace FancyZonesEditor.Utils if (!devicesParsingResult || !customZonesParsingResult) { - return new ParsingResult(false, Properties.Resources.Error_Parsing_Zones_Settings_Malformed_Data, settingsString); + return new ParsingResult(false, FancyZonesEditor.Properties.Resources.Error_Parsing_Zones_Settings_Message, settingsString); } } catch (Exception ex) @@ -810,55 +810,25 @@ namespace FancyZonesEditor.Utils continue; } - LayoutModel layout; - if (zoneSet.Type == CanvasLayoutModel.ModelTypeID) + LayoutModel layout = null; + try { - var info = JsonSerializer.Deserialize(zoneSet.Info.GetRawText(), _options); - - var zones = new List(); - foreach (var zone in info.Zones) + if (zoneSet.Type == CanvasLayoutModel.ModelTypeID) { - zones.Add(new Int32Rect { X = (int)zone.X, Y = (int)zone.Y, Width = (int)zone.Width, Height = (int)zone.Height }); + layout = ParseCanvasInfo(zoneSet); } - - try + else if (zoneSet.Type == GridLayoutModel.ModelTypeID) { - layout = new CanvasLayoutModel(zoneSet.Uuid, zoneSet.Name, LayoutType.Custom, zones, info.RefWidth, info.RefHeight); + layout = ParseGridInfo(zoneSet); } - catch (Exception) - { - continue; - } - - layout.SensitivityRadius = info.SensitivityRadius; } - else if (zoneSet.Type == GridLayoutModel.ModelTypeID) + catch (Exception) { - var info = JsonSerializer.Deserialize(zoneSet.Info.GetRawText(), _options); - - var cells = new int[info.Rows, info.Columns]; - for (int row = 0; row < info.Rows; row++) - { - for (int column = 0; column < info.Columns; column++) - { - cells[row, column] = info.CellChildMap[row][column]; - } - } - - try - { - layout = new GridLayoutModel(zoneSet.Uuid, zoneSet.Name, LayoutType.Custom, info.Rows, info.Columns, info.RowsPercentage, info.ColumnsPercentage, cells); - } - catch (Exception) - { - continue; - } - - layout.SensitivityRadius = info.SensitivityRadius; - (layout as GridLayoutModel).ShowSpacing = info.ShowSpacing; - (layout as GridLayoutModel).Spacing = info.Spacing; + result = false; + continue; } - else + + if (layout == null) { result = false; continue; @@ -913,6 +883,71 @@ namespace FancyZonesEditor.Utils return true; } + private CanvasLayoutModel ParseCanvasInfo(CustomLayoutWrapper wrapper) + { + var info = JsonSerializer.Deserialize(wrapper.Info.GetRawText(), _options); + + var zones = new List(); + foreach (var zone in info.Zones) + { + if (zone.Width < 0 || zone.Height < 0) + { + // Malformed data + return null; + } + + zones.Add(new Int32Rect { X = zone.X, Y = zone.Y, Width = zone.Width, Height = zone.Height }); + } + + var layout = new CanvasLayoutModel(wrapper.Uuid, wrapper.Name, LayoutType.Custom, zones, Math.Max(info.RefWidth, 0), Math.Max(info.RefHeight, 0)); + layout.SensitivityRadius = info.SensitivityRadius; + + return layout; + } + + private GridLayoutModel ParseGridInfo(CustomLayoutWrapper wrapper) + { + var info = JsonSerializer.Deserialize(wrapper.Info.GetRawText(), _options); + + // Check if rows and columns are valid + if (info.Rows <= 0 || info.Columns <= 0) + { + return null; + } + + // Check if percentage is valid. Otherwise, Editor could crash on layout rendering. + foreach (int percent in info.RowsPercentage) + { + if (percent < 0) + { + return null; + } + } + + foreach (int percent in info.ColumnsPercentage) + { + if (percent < 0) + { + return null; + } + } + + var cells = new int[info.Rows, info.Columns]; + for (int row = 0; row < info.Rows; row++) + { + for (int column = 0; column < info.Columns; column++) + { + cells[row, column] = info.CellChildMap[row][column]; + } + } + + var layout = new GridLayoutModel(wrapper.Uuid, wrapper.Name, LayoutType.Custom, info.Rows, info.Columns, info.RowsPercentage, info.ColumnsPercentage, cells); + layout.SensitivityRadius = info.SensitivityRadius; + layout.ShowSpacing = info.ShowSpacing; + layout.Spacing = info.Spacing; + return layout; + } + private LayoutType JsonTagToLayoutType(string tag) { switch (tag) From 1728857ca1e31b7c8a475653eab3f87100eab148 Mon Sep 17 00:00:00 2001 From: Enrico Giordani Date: Wed, 31 Mar 2021 09:37:18 +0200 Subject: [PATCH 55/82] [CI build] exclude WebcamReportTool from build (#10510) --- .pipelines/build-tools.cmd | 2 -- .pipelines/pipeline.user.windows.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/.pipelines/build-tools.cmd b/.pipelines/build-tools.cmd index aa5f782932..6ae68dbed1 100644 --- a/.pipelines/build-tools.cmd +++ b/.pipelines/build-tools.cmd @@ -7,5 +7,3 @@ set SolutionDir=%cd% popd SET IsPipeline=1 call msbuild ../tools/BugReportTool/BugReportTool.sln /p:Configuration=Release /p:Platform=x64 /p:CIBuild=true || exit /b 1 -call msbuild ../tools/WebcamReportTool/WebcamReportTool.sln /p:Configuration=Release /p:Platform=x64 /p:CIBuild=true || exit /b 1 - diff --git a/.pipelines/pipeline.user.windows.yml b/.pipelines/pipeline.user.windows.yml index 5dcefed0eb..d873aed929 100644 --- a/.pipelines/pipeline.user.windows.yml +++ b/.pipelines/pipeline.user.windows.yml @@ -66,7 +66,6 @@ build: include: - 'action_runner.exe' - 'BugReportTool\BugReportTool.exe' - - 'WebcamReportTool\WebcamReportTool.exe' - 'modules\ColorPicker\ColorPicker.dll' - 'modules\ColorPicker\ColorPickerUI.dll' - 'modules\ColorPicker\ColorPickerUI.exe' @@ -169,7 +168,6 @@ build: to: 'Build_Output' include: - 'BugReportTool\BugReportTool.exe' - - 'WebcamReportTool\WebcamReportTool.exe' signing_options: sign_inline: true # This does signing a soon as this command completes - !!buildcommand From 667e38fea08978d8b9d75f8fbdc36a8bff8d6e9d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Mar 2021 09:58:38 +0200 Subject: [PATCH 56/82] Bump y18n from 4.0.0 to 4.0.1 in /src/settings-web (#10508) Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1. - [Release notes](https://github.com/yargs/y18n/releases) - [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md) - [Commits](https://github.com/yargs/y18n/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/settings-web/package-lock.json | 56 +++++++++++++++++------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/settings-web/package-lock.json b/src/settings-web/package-lock.json index 083dff7992..c582caabf8 100644 --- a/src/settings-web/package-lock.json +++ b/src/settings-web/package-lock.json @@ -2667,12 +2667,20 @@ } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } } }, "ms": { @@ -3774,6 +3782,23 @@ } } }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -4592,23 +4617,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -5793,9 +5801,9 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { From 9cf3b9f91d1ecae3a15460ffcedabf93017ef6bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Sto=C5=A1i=C4=87?= Date: Wed, 31 Mar 2021 14:54:32 +0200 Subject: [PATCH 57/82] Disable forwarding the scroll event (#10513) --- src/modules/colorPicker/ColorPickerUI/Mouse/MouseHook.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/colorPicker/ColorPickerUI/Mouse/MouseHook.cs b/src/modules/colorPicker/ColorPickerUI/Mouse/MouseHook.cs index 80e0df7790..d75e57a024 100644 --- a/src/modules/colorPicker/ColorPickerUI/Mouse/MouseHook.cs +++ b/src/modules/colorPicker/ColorPickerUI/Mouse/MouseHook.cs @@ -114,6 +114,7 @@ namespace ColorPicker.Mouse { MouseDevice mouseDev = InputManager.Current.PrimaryMouseDevice; MouseWheel.Invoke(null, new MouseWheelEventArgs(mouseDev, Environment.TickCount, (int)mouseHookStruct.mouseData >> 16)); + return new IntPtr(-1); } } } From a91f74d6486e5c61107015c9ee195b8ff6df2f99 Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Wed, 31 Mar 2021 21:54:10 +0300 Subject: [PATCH 58/82] fix glitch (#10517) --- .../ViewModels/PowerLauncherViewModel.cs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs index 2973161d73..aec904a672 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs @@ -262,11 +262,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels if (value == true) { settings.Properties.Position = StartupPosition.Cursor; + _isCursorPositionRadioButtonChecked = value; + UpdateSettings(); } - - _isCursorPositionRadioButtonChecked = value; - - UpdateSettings(); } } @@ -282,11 +280,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels if (value == true) { settings.Properties.Position = StartupPosition.PrimaryMonitor; + _isPrimaryMonitorPositionRadioButtonChecked = value; + UpdateSettings(); } - - _isPrimaryMonitorPositionRadioButtonChecked = value; - - UpdateSettings(); } } @@ -302,11 +298,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels if (value == true) { settings.Properties.Position = StartupPosition.Focus; + _isFocusPositionRadioButtonChecked = value; + UpdateSettings(); } - - _isFocusPositionRadioButtonChecked = value; - - UpdateSettings(); } } From 5de2c3dc228a4e3751f98210296e1ef6339341c1 Mon Sep 17 00:00:00 2001 From: Enrico Giordani Date: Wed, 31 Mar 2021 21:45:23 +0200 Subject: [PATCH 59/82] [msi] add FancyZonesEditor.deps.json (#10519) --- installer/PowerToysSetup/Product.wxs | 1 + 1 file changed, 1 insertion(+) diff --git a/installer/PowerToysSetup/Product.wxs b/installer/PowerToysSetup/Product.wxs index a2ef49be5a..5e7f5fc4bd 100644 --- a/installer/PowerToysSetup/Product.wxs +++ b/installer/PowerToysSetup/Product.wxs @@ -380,6 +380,7 @@ + From 6613522e534deb9b5fc9a649e6797cf177bb5d8b Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Thu, 1 Apr 2021 09:52:13 -0700 Subject: [PATCH 60/82] Readme 0.35 (#10504) * Update README.md * Update README.md shifting to WinGet * Update expect.txt * Update README.md * Update README.md * Update README.md * Update expect.txt * Update README.md * Update README.md * Update expect.txt addrum * Update README.md * Update README.md * Update README.md Co-authored-by: htcfreek <61519853+htcfreek@users.noreply.github.com> * Update README.md Co-authored-by: htcfreek <61519853+htcfreek@users.noreply.github.com> * Update README.md Co-authored-by: Deondre Davis Co-authored-by: htcfreek <61519853+htcfreek@users.noreply.github.com> --- .github/actions/spell-check/expect.txt | 5 ++ README.md | 85 ++++++++++++++------------ 2 files changed, 51 insertions(+), 39 deletions(-) diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index 64b329f0bb..b4fbec9cbb 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -22,6 +22,7 @@ activatable ACTIVATEAPP Addavirtualdesktop Addins +addrum ADDUNDORECORD ADifferent ADMINS @@ -1096,6 +1097,7 @@ jp jpe jpeg jpg +jsoref JPN json jsonval @@ -1270,6 +1272,7 @@ MATCHMODE MAXIMIZEBOX MAXSHORTCUTSIZE maxversiontested +mayitbeegh MBUTTON MBUTTONDBLCLK MBUTTONDOWN @@ -2278,6 +2281,7 @@ VREDRAW VSC VSCBD vscode +vsconfig VSCROLL vse vsonline @@ -2451,6 +2455,7 @@ yinwang YLogo yml YOffset +YourUserName YStr YUY YUYV diff --git a/README.md b/README.md index bd1b7d5d1d..0d7e8d18d3 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,9 @@ Microsoft PowerToys is a set of utilities for power users to tune and streamline ### Requirements -- Windows 10 v1903 (build 18362) or better preferred, Windows 10 v1803 (build 17134) minimum. -- Have [.NET Core 3.1 Desktop Runtime](https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-desktop-3.1.11-windows-x64-installer). The installer should handle this but we want to directly make people aware. +- Windows 10 v1903 (build 18362) or newer preferred, Windows 10 v1803 (build 17134) minimum. + - ⚠️ PowerToys minimum version of Windows 10 will be increased to v1903 starting with the 0.37 release +- Have [.NET Core 3.1.13 Desktop Runtime](https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-desktop-3.1.13-windows-x64-installer). The installer should handle this but we want to directly make people aware. ### Via GitHub with EXE [Recommended] @@ -41,7 +42,7 @@ To install the Video Conference mute, please use the [v0.28 pre-release experime We hope to have an updated version in February 2021 with the new DirectShow driver. ### Via WinGet (Preview) -Download PowerToys from [WinGet](https://github.com/microsoft/winget-cli/releases). To install PowerToys, run the following command from the command line / PowerShell: +Download PowerToys from [WinGet](https://github.com/microsoft/winget-cli#installing-the-client). To install PowerToys, run the following command from the command line / PowerShell: ```powershell WinGet install powertoys @@ -75,65 +76,71 @@ For guidance on developing for PowerToys, please read the [developer docs](/doc/ Our [prioritized roadmap][roadmap] of features and utilities that the core team is focusing on. -### 0.33 - February 2021 Update +### 0.35 - March 2021 Update -Our goals for [v0.33 release cycle][github-release-link] was to add in some critical new functionality into the new user experience as well as a plug-in manager for PowerToys Run. In addition, we feel we are near ready to add in Video Conference mute into the stable release pending feedback from the pending 0.34 experimental release. The 0.34 experimental release will happen week of March 8th toward the end of the week pending testing. +Our goals for the [v0.35 release cycle][github-release-link] were to add in new functionality to support quick swapping layouts for FancyZones, wrap up work for the DirectShow migration for Video Conference Mute so we can migrate into the main dev branch as well as fixing bugs. The 0.36 experimental release will happen the week of April 5th toward the end of the week pending testing. Throughout these efforts, we continue working towards stability across all PowerToys utilities. -Our [prioritized roadmap][roadmap] of features and utilities that the core team is focusing on for the near future. We fixed a lot of localization issues from our initial release but we may not still be perfect. If you find an issue, please file a [localization bug][loc-bug]. +Our [prioritized roadmap][roadmap] of features and utilities will dictate what the core team is focusing on for the near future. -#### Highlights from v0.33 Stable/0.34 Experimental +#### Highlights from v0.35 Stable/0.36 Experimental **General** -- Updated overview links to be language agnostic to the docs site. -- 'First time load' experience. The hope is a quick, light way to learn about basic functionality. We have some more work to do and want to also use the same framework for teaching about updates as well. +- PowerToys will start requiring Windows 10 v1903 or greater after 0.35.x release. The v1 settings, which supports older Windows versions, will be removed in 0.37. + - Note: We may be able to bring back support when we migrate to WinUI3 but as of now, we will be increasing the minimum version of Windows to 1903 or greater. - Localization corrections +- Improved GitHub report bug template. +- Increased .NET Core to 3.1.13 +- Fixed installer 'run as user' regression + +**Color Picker** +- UX adjustments to editor. Thanks [@niels9001](https://github.com/niels9001)! +- `Esc` can now be used to exit the editor. Thanks [@BenConstable9](https://github.com/BenConstable9)! **FancyZones** -- Adjusted editor UX based on feedback. Thanks [@niels9001](https://github.com/niels9001)! -- New options to change zone activation algorithm. - -**File Explorer** -- Improved how SVG images are previewed in the preview pane, thanks[@Drakula44](https://github.com/Drakula44)! -- [@Aaron-Junker](Aaron-Junker) has created a proof of concept for using [Monaco editor](https://github.com/microsoft/monaco-editor) for previewing dev files. This will enable over 125+ file types. +- Added hotkeys and quick swap functionality for custom layouts! Users can now assign a hotkey in the editor and use it to quickly set a desktop's zones with `Ctrl + Win + Alt + NUMBER` key binding, or by pressing the hotkey while dragging a window. +- UX updates. Thanks [@niels9001](https://github.com/niels9001)! +- Fixed zone placement algorithm for when the Taskbar is vertical +- Bug fixes **PowerToys Run** -- Plugin Manager now is in settings. You can directly turn on / off, include items in general search, and change the action key! Thanks [@htcfreek](https://github.com/htcfreek) for the great feedback! -- Improved support for additional window managers by abstracting out shell process calls. Thanks [@davidegiacometti](https://github.com/davidegiacometti)! -- Fix for PT Run registering the hotkey on non-supported OS versions. -- `~` will now act as the user home directory in Folder plugin. Thanks [@davidegiacometti](https://github.com/davidegiacometti) -- Service plugin has adjusted status messages +- Users can specify where to show the launcher window. Thanks [@addrum](https://github.com/addrum)! +- New plugin added to support opening previously used Visual Studio Code workspaces, remote machines (SSH or Codespaces), and containers! When enabled, use `{` to query for available workspaces. Thanks [@ricardosantos9521](https://github.com/ricardosantos9521)! Please note, this plugin is off by default. +- Shell history now saves the raw command instead of the resolved command. A command like `%appdata%` would now save in the Shell history as is instead of `C:\Users\YourUserName\AppData\Roaming`. Thanks [@mayitbeegh](https://github.com/mayitbeegh)! +- Better logging to try to track down some bugs +- Bug fixes **Video Conference Mute (Experimental)** -- Adjust video muting to leverage DirectShow. -- Goal is to have 0.34 experimental release week of March 8th. +- Tracking work remaining at issue [#7944](https://github.com/microsoft/PowerToys/issues/7944) +- Goal is to have 0.36 experimental release week of April 5th (Yes, we've stated this before, we know) -**Settings** -- When restarting as admin, the settings now will reopen. Thanks [@davidegiacometti](https://github.com/davidegiacometti)! - -**ARM64 Progress** -- Investigation on how we'll accomplish Settings with the XAML Island and WPF app. +**Contributor workflow** +- Main project now has a vsconfig which will prompt you to install needed items versus having to use a script. This will aid in keeping you up-to-date when something changes. +- Updated spell checker. Thanks [@jsoref](https://github.com/jsoref)! #### Community contributions We'd like to directly mention (in alphabetical order) for their continued community support this month and helping directly make PowerToys a better piece of software. [@Aaron-Junker](https://github.com/Aaron-Junker), -[@davidegiacometti](https://github.com/davidegiacometti), -[@Drakula44](https://github.com/Drakula44), -[@htcfreek](https://github.com/htcfreek), -[@Jay-o-Way](https://github.com/Jay-o-Way), +[@addrum](https://github.com/addrum), +[@BenConstable9](https://github.com/BenConstable9), +[@htcfreek](https://github.com/htcfreek), +[@Jay-o-Way](https://github.com/Jay-o-Way), +[@jsoref](https://github.com/jsoref), +[@mayitbeegh](https://github.com/mayitbeegh), [@niels9001](https://github.com/niels9001), -and -[@notDevagya](https://github.com/notDevagya) +[@pc-v2](https://github.com/pc-v2), +and +[@ricardosantos9521](https://github.com/ricardosantos9521) -#### What is being planned for v0.35 - March 2021 +#### What is being planned for v0.37 - April 2021 -For [v0.35][github-next-release-work], we are planning to work on: +For [v0.37][github-next-release-work], we are planning to work on: - Stability and bug fixes -- FZ Editor hotkey layout swap support -- Integrating VCM in main release -- Start process for removal support for old settings system and migrating our minimum OS version to Windows 10 1903. +- Adding VCM to the stable release +- Removing v1 Settings / PT minimum version will become Windows 10 v1903 +- Post-update guidance prompt work ## PowerToys Community @@ -158,5 +165,5 @@ The application logs basic telemetry. Our Telemetry Data page (Coming Soon) has [usingPowerToys-docs-link]: https://docs.microsoft.com/windows/powertoys/ -[github-next-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aopen+is%3Aissue+project%3Amicrosoft%2FPowerToys%2F18 +[github-next-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aopen+is%3Aissue+project%3Amicrosoft%2FPowerToys%2F19 [github-prerelease-link]: https://github.com/microsoft/PowerToys/releases/tag/v0.28.0 From d128939227c14b5f35faea4681eebf0d5f3af4c7 Mon Sep 17 00:00:00 2001 From: Chris Davis Date: Fri, 2 Apr 2021 03:07:12 -0700 Subject: [PATCH 61/82] Show progress dialog during startup (#9255) * Show progress dialog during startup for selection enumeration that can take a long time. * Updated with better code organization and a timer to ensure the progress dialog does not appear in most cases. * Update based on PR feedback * Change progress dialog delay from 1500ms to 2500ms * Move progress dialog invocation off the main UI thread Co-authored-by: Chris Davis (EDGE) --- .gitignore | 2 + src/modules/powerrename/lib/Helpers.cpp | 98 +++------ src/modules/powerrename/lib/Helpers.h | 3 +- .../powerrename/lib/PowerRenameEnum.cpp | 144 +++++++++++++ src/modules/powerrename/lib/PowerRenameEnum.h | 34 +++ .../powerrename/lib/PowerRenameInterfaces.h | 6 + .../powerrename/lib/PowerRenameLib.vcxproj | 2 + .../powerrename/lib/PowerRenameManager.cpp | 28 --- src/modules/powerrename/lib/pch.h | 1 + src/modules/powerrename/ui/PowerRenameUI.cpp | 204 +++++++++++++++++- src/modules/powerrename/ui/PowerRenameUI.h | 41 +++- src/modules/powerrename/ui/Resources.resx | 6 + 12 files changed, 463 insertions(+), 106 deletions(-) create mode 100644 src/modules/powerrename/lib/PowerRenameEnum.cpp create mode 100644 src/modules/powerrename/lib/PowerRenameEnum.h diff --git a/.gitignore b/.gitignore index bfded31434..1c39ddc996 100644 --- a/.gitignore +++ b/.gitignore @@ -342,3 +342,5 @@ src/common/Telemetry/*.etl !**/MergeModules/Release/ !**/MergeModules/Debug/ /src/modules/previewpane/SvgThumbnailProvider/$(SolutionDir)$(Platform)/$(Configuration)/modules/FileExplorerPreview/SvgThumbnailProvider.xml +/src/modules/powerrename/ui/RCa24464 +/src/modules/powerrename/ui/RCb24464 diff --git a/src/modules/powerrename/lib/Helpers.cpp b/src/modules/powerrename/lib/Helpers.cpp index 0c01f06597..30447d34f8 100644 --- a/src/modules/powerrename/lib/Helpers.cpp +++ b/src/modules/powerrename/lib/Helpers.cpp @@ -275,7 +275,7 @@ HRESULT GetDatedFileName(_Out_ PWSTR result, UINT cchMax, _In_ PCWSTR source, SY return hr; } -HRESULT _GetShellItemArrayFromDataOject(_In_ IUnknown* dataSource, _COM_Outptr_ IShellItemArray** items) +HRESULT GetShellItemArrayFromDataObject(_In_ IUnknown* dataSource, _COM_Outptr_ IShellItemArray** items) { *items = nullptr; CComPtr dataObj; @@ -292,73 +292,6 @@ HRESULT _GetShellItemArrayFromDataOject(_In_ IUnknown* dataSource, _COM_Outptr_ return hr; } -HRESULT _ParseEnumItems(_In_ IEnumShellItems* pesi, _In_ IPowerRenameManager* psrm, _In_ int depth = 0) -{ - HRESULT hr = E_INVALIDARG; - - // We shouldn't get this deep since we only enum the contents of - // regular folders but adding just in case - if ((pesi) && (depth < (MAX_PATH / 2))) - { - hr = S_OK; - - ULONG celtFetched; - CComPtr spsi; - while ((S_OK == pesi->Next(1, &spsi, &celtFetched)) && (SUCCEEDED(hr))) - { - CComPtr spsrif; - hr = psrm->GetRenameItemFactory(&spsrif); - if (SUCCEEDED(hr)) - { - CComPtr spNewItem; - hr = spsrif->Create(spsi, &spNewItem); - if (SUCCEEDED(hr)) - { - spNewItem->PutDepth(depth); - hr = psrm->AddItem(spNewItem); - } - - if (SUCCEEDED(hr)) - { - bool isFolder = false; - if (SUCCEEDED(spNewItem->GetIsFolder(&isFolder)) && isFolder) - { - // Bind to the IShellItem for the IEnumShellItems interface - CComPtr spesiNext; - hr = spsi->BindToHandler(nullptr, BHID_EnumItems, IID_PPV_ARGS(&spesiNext)); - if (SUCCEEDED(hr)) - { - // Parse the folder contents recursively - hr = _ParseEnumItems(spesiNext, psrm, depth + 1); - } - } - } - } - - spsi = nullptr; - } - } - - return hr; -} - -// Iterate through the data source and add paths to the rotation manager -HRESULT EnumerateDataObject(_In_ IUnknown* dataSource, _In_ IPowerRenameManager* psrm) -{ - CComPtr spsia; - HRESULT hr = E_FAIL; - if (SUCCEEDED(_GetShellItemArrayFromDataOject(dataSource, &spsia))) - { - CComPtr spesi; - if (SUCCEEDED(spsia->EnumItems(&spesi))) - { - hr = _ParseEnumItems(spesi, psrm); - } - } - - return hr; -} - BOOL GetEnumeratedFileName(__out_ecount(cchMax) PWSTR pszUniqueName, UINT cchMax, __in PCWSTR pszTemplate, __in_opt PCWSTR pszDir, unsigned long ulMinLong, __inout unsigned long* pulNumUsed) { PWSTR pszName = nullptr; @@ -528,7 +461,7 @@ bool DataObjectContainsRenamableItem(_In_ IUnknown* dataSource) { bool hasRenamable = false; CComPtr spsia; - if (SUCCEEDED(_GetShellItemArrayFromDataOject(dataSource, &spsia))) + if (SUCCEEDED(GetShellItemArrayFromDataObject(dataSource, &spsia))) { CComPtr spesi; if (SUCCEEDED(spsia->EnumItems(&spesi))) @@ -549,3 +482,30 @@ bool DataObjectContainsRenamableItem(_In_ IUnknown* dataSource) } return hasRenamable; } + +HWND CreateMsgWindow(_In_ HINSTANCE hInst, _In_ WNDPROC pfnWndProc, _In_ void* p) +{ + WNDCLASS wc = { 0 }; + PCWSTR wndClassName = L"MsgWindow"; + + wc.lpfnWndProc = DefWindowProc; + wc.cbWndExtra = sizeof(void*); + wc.hInstance = hInst; + wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); + wc.lpszClassName = wndClassName; + + RegisterClass(&wc); + + HWND hwnd = CreateWindowEx( + 0, wndClassName, nullptr, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, hInst, nullptr); + if (hwnd) + { + SetWindowLongPtr(hwnd, 0, (LONG_PTR)p); + if (pfnWndProc) + { + SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)pfnWndProc); + } + } + + return hwnd; +} diff --git a/src/modules/powerrename/lib/Helpers.h b/src/modules/powerrename/lib/Helpers.h index e035c65b66..a803ba15f5 100644 --- a/src/modules/powerrename/lib/Helpers.h +++ b/src/modules/powerrename/lib/Helpers.h @@ -7,7 +7,7 @@ HRESULT GetTransformedFileName(_Out_ PWSTR result, UINT cchMax, _In_ PCWSTR sour HRESULT GetDatedFileName(_Out_ PWSTR result, UINT cchMax, _In_ PCWSTR source, SYSTEMTIME fileTime); bool isFileTimeUsed(_In_ PCWSTR source); bool DataObjectContainsRenamableItem(_In_ IUnknown* dataSource); -HRESULT EnumerateDataObject(_In_ IUnknown* pdo, _In_ IPowerRenameManager* psrm); +HRESULT GetShellItemArrayFromDataObject(_In_ IUnknown* dataSource, _COM_Outptr_ IShellItemArray** items); BOOL GetEnumeratedFileName( __out_ecount(cchMax) PWSTR pszUniqueName, UINT cchMax, @@ -15,3 +15,4 @@ BOOL GetEnumeratedFileName( __in_opt PCWSTR pszDir, unsigned long ulMinLong, __inout unsigned long* pulNumUsed); +HWND CreateMsgWindow(_In_ HINSTANCE hInst, _In_ WNDPROC pfnWndProc, _In_ void* p); diff --git a/src/modules/powerrename/lib/PowerRenameEnum.cpp b/src/modules/powerrename/lib/PowerRenameEnum.cpp new file mode 100644 index 0000000000..94b575226a --- /dev/null +++ b/src/modules/powerrename/lib/PowerRenameEnum.cpp @@ -0,0 +1,144 @@ +#include "pch.h" +#include "PowerRenameEnum.h" +#include +#include + +IFACEMETHODIMP_(ULONG) CPowerRenameEnum::AddRef() +{ + return InterlockedIncrement(&m_refCount); +} + +IFACEMETHODIMP_(ULONG) CPowerRenameEnum::Release() +{ + long refCount = InterlockedDecrement(&m_refCount); + + if (refCount == 0) + { + delete this; + } + return refCount; +} + +IFACEMETHODIMP CPowerRenameEnum::QueryInterface(_In_ REFIID riid, _Outptr_ void** ppv) +{ + static const QITAB qit[] = { + QITABENT(CPowerRenameEnum, IPowerRenameEnum), + { 0 } + }; + return QISearch(this, qit, riid, ppv); +} + +IFACEMETHODIMP CPowerRenameEnum::Start() +{ + m_canceled = false; + CComPtr spsia; + HRESULT hr = GetShellItemArrayFromDataObject(m_spdo, &spsia); + if (SUCCEEDED(hr)) + { + CComPtr spesi; + hr = spsia->EnumItems(&spesi); + if (SUCCEEDED(hr)) + { + hr = _ParseEnumItems(spesi); + } + } + + return hr; +} + +IFACEMETHODIMP CPowerRenameEnum::Cancel() +{ + m_canceled = true; + return S_OK; +} + +HRESULT CPowerRenameEnum::s_CreateInstance(_In_ IUnknown* pdo, _In_ IPowerRenameManager* pManager, _In_ REFIID iid, _Outptr_ void** resultInterface) +{ + *resultInterface = nullptr; + + CPowerRenameEnum* newRenameEnum = new CPowerRenameEnum(); + HRESULT hr = newRenameEnum ? S_OK : E_OUTOFMEMORY; + if (SUCCEEDED(hr)) + { + hr = newRenameEnum->_Init(pdo, pManager); + if (SUCCEEDED(hr)) + { + hr = newRenameEnum->QueryInterface(iid, resultInterface); + } + + newRenameEnum->Release(); + } + return hr; +} + +CPowerRenameEnum::CPowerRenameEnum() : + m_refCount(1) +{ +} + +CPowerRenameEnum::~CPowerRenameEnum() +{ +} + +HRESULT CPowerRenameEnum::_Init(_In_ IUnknown* pdo, _In_ IPowerRenameManager* pManager) +{ + m_spdo = pdo; + m_spsrm = pManager; + return S_OK; +} + +HRESULT CPowerRenameEnum::_ParseEnumItems(_In_ IEnumShellItems* pesi, _In_ int depth) +{ + HRESULT hr = E_INVALIDARG; + + // We shouldn't get this deep since we only enum the contents of + // regular folders but adding just in case + if ((pesi) && (depth < (MAX_PATH / 2))) + { + hr = S_OK; + + ULONG celtFetched; + CComPtr spsi; + while ((S_OK == pesi->Next(1, &spsi, &celtFetched)) && (SUCCEEDED(hr))) + { + if (m_canceled) + { + return E_ABORT; + } + + CComPtr spFactory; + hr = m_spsrm->GetRenameItemFactory(&spFactory); + if (SUCCEEDED(hr)) + { + CComPtr spNewItem; + // Failure may be valid if we come across a shell item that does + // not support a file system path. In that case we simply ignore + // the item. + if (SUCCEEDED(spFactory->Create(spsi, &spNewItem))) + { + spNewItem->PutDepth(depth); + hr = m_spsrm->AddItem(spNewItem); + if (SUCCEEDED(hr)) + { + bool isFolder = false; + if (SUCCEEDED(spNewItem->GetIsFolder(&isFolder)) && isFolder) + { + // Bind to the IShellItem for the IEnumShellItems interface + CComPtr spesiNext; + hr = spsi->BindToHandler(nullptr, BHID_EnumItems, IID_PPV_ARGS(&spesiNext)); + if (SUCCEEDED(hr)) + { + // Parse the folder contents recursively + hr = _ParseEnumItems(spesiNext, depth + 1); + } + } + } + } + } + + spsi = nullptr; + } + } + + return hr; +} diff --git a/src/modules/powerrename/lib/PowerRenameEnum.h b/src/modules/powerrename/lib/PowerRenameEnum.h new file mode 100644 index 0000000000..c2923bc587 --- /dev/null +++ b/src/modules/powerrename/lib/PowerRenameEnum.h @@ -0,0 +1,34 @@ +#pragma once +#include "pch.h" +#include "PowerRenameInterfaces.h" +#include +#include "srwlock.h" + +class CPowerRenameEnum : + public IPowerRenameEnum +{ +public: + // IUnknown + IFACEMETHODIMP QueryInterface(_In_ REFIID iid, _Outptr_ void** resultInterface); + IFACEMETHODIMP_(ULONG) AddRef(); + IFACEMETHODIMP_(ULONG) Release(); + + // ISmartRenameEnum + IFACEMETHODIMP Start(); + IFACEMETHODIMP Cancel(); + +public: + static HRESULT s_CreateInstance(_In_ IUnknown* pdo, _In_ IPowerRenameManager* pManager, _In_ REFIID iid, _Outptr_ void** resultInterface); + +protected: + CPowerRenameEnum(); + virtual ~CPowerRenameEnum(); + + HRESULT _Init(_In_ IUnknown* pdo, _In_ IPowerRenameManager* pManager); + HRESULT _ParseEnumItems(_In_ IEnumShellItems* pesi, _In_ int depth = 0); + + CComPtr m_spsrm; + CComPtr m_spdo; + bool m_canceled = false; + long m_refCount = 0; +}; \ No newline at end of file diff --git a/src/modules/powerrename/lib/PowerRenameInterfaces.h b/src/modules/powerrename/lib/PowerRenameInterfaces.h index ee2303c1fd..c274cdb99b 100644 --- a/src/modules/powerrename/lib/PowerRenameInterfaces.h +++ b/src/modules/powerrename/lib/PowerRenameInterfaces.h @@ -134,3 +134,9 @@ public: IFACEMETHOD(AddMRUString)(_In_ PCWSTR entry) = 0; }; +interface __declspec(uuid("CE8C8616-C1A8-457A-9601-10570F5B9F1F")) IPowerRenameEnum : public IUnknown +{ +public: + IFACEMETHOD(Start)() = 0; + IFACEMETHOD(Cancel)() = 0; +}; diff --git a/src/modules/powerrename/lib/PowerRenameLib.vcxproj b/src/modules/powerrename/lib/PowerRenameLib.vcxproj index 25147ebd76..1372c57ba1 100644 --- a/src/modules/powerrename/lib/PowerRenameLib.vcxproj +++ b/src/modules/powerrename/lib/PowerRenameLib.vcxproj @@ -40,6 +40,7 @@ + @@ -52,6 +53,7 @@ + diff --git a/src/modules/powerrename/lib/PowerRenameManager.cpp b/src/modules/powerrename/lib/PowerRenameManager.cpp index 4089a52985..bdf62fe1df 100644 --- a/src/modules/powerrename/lib/PowerRenameManager.cpp +++ b/src/modules/powerrename/lib/PowerRenameManager.cpp @@ -13,34 +13,6 @@ namespace fs = std::filesystem; extern HINSTANCE g_hInst; -HWND CreateMsgWindow(_In_ HINSTANCE hInst, _In_ WNDPROC pfnWndProc, _In_ void* p) -{ - WNDCLASS wc = { 0 }; - - PCWSTR wndClassName = L"MsgWindow"; - - wc.lpfnWndProc = DefWindowProc; - wc.cbWndExtra = sizeof(void*); - wc.hInstance = hInst; - wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wc.lpszClassName = wndClassName; - - RegisterClass(&wc); - - HWND hwnd = CreateWindowEx( - 0, wndClassName, nullptr, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, hInst, nullptr); - if (hwnd) - { - SetWindowLongPtr(hwnd, 0, (LONG_PTR)p); - if (pfnWndProc) - { - SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)pfnWndProc); - } - } - - return hwnd; -} - // The default FOF flags to use in the rename operations #define FOF_DEFAULTFLAGS (FOF_ALLOWUNDO | FOFX_ADDUNDORECORD | FOFX_SHOWELEVATIONPROMPT | FOF_RENAMEONCOLLISION) diff --git a/src/modules/powerrename/lib/pch.h b/src/modules/powerrename/lib/pch.h index 607ca6cd92..121c6909fc 100644 --- a/src/modules/powerrename/lib/pch.h +++ b/src/modules/powerrename/lib/pch.h @@ -17,6 +17,7 @@ #include #include #include +#include #include diff --git a/src/modules/powerrename/ui/PowerRenameUI.cpp b/src/modules/powerrename/ui/PowerRenameUI.cpp index 63ffd534e4..c6f1245c38 100644 --- a/src/modules/powerrename/ui/PowerRenameUI.cpp +++ b/src/modules/powerrename/ui/PowerRenameUI.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -167,6 +168,17 @@ IFACEMETHODIMP CPowerRenameUI::GetShowUI(_Out_ bool* showUI) // IPowerRenameManagerEvents IFACEMETHODIMP CPowerRenameUI::OnItemAdded(_In_ IPowerRenameItem*) { + // Check if the user canceled the enumeration from the progress dialog UI + if (m_prpui.IsCanceled()) + { + m_prpui.Stop(); + if (m_sppre) + { + // Cancel the enumeration + m_sppre->Cancel(); + } + } + return S_OK; } @@ -373,21 +385,37 @@ void CPowerRenameUI::_Cleanup() m_hwnd = NULL; } -void CPowerRenameUI::_EnumerateItems(_In_ IUnknown* pdtobj) +HRESULT CPowerRenameUI::_EnumerateItems(_In_ IUnknown* pdtobj) { + HRESULT hr = S_OK; // Enumerate the data object and populate the manager if (m_spsrm) { m_disableCountUpdate = true; - EnumerateDataObject(pdtobj, m_spsrm); + + // Ensure we re-create the enumerator + m_sppre = nullptr; + hr = CPowerRenameEnum::s_CreateInstance(pdtobj, m_spsrm, IID_PPV_ARGS(&m_sppre)); + if (SUCCEEDED(hr)) + { + m_prpui.Start(); + hr = m_sppre->Start(); + m_prpui.Stop(); + } + m_disableCountUpdate = false; - UINT itemCount = 0; - m_spsrm->GetVisibleItemCount(&itemCount); - m_listview.SetItemCount(itemCount); + if (SUCCEEDED(hr)) + { + UINT itemCount = 0; + m_spsrm->GetItemCount(&itemCount); + m_listview.SetItemCount(itemCount); - _UpdateCounts(); + _UpdateCounts(); + } } + + return hr; } HRESULT CPowerRenameUI::_ReadSettings() @@ -607,7 +635,12 @@ void CPowerRenameUI::_OnInitDlg() if (m_dataSource) { // Populate the manager from the data object - _EnumerateItems(m_dataSource); + if (FAILED(_EnumerateItems(m_dataSource))) + { + // Failed during enumeration. Close the dialog. + _OnCloseDlg(); + return; + } } // Initialize from stored settings. Do this now in case we have @@ -1442,3 +1475,160 @@ void CPowerRenameListView::OnColumnClick(_In_ IPowerRenameManager* psrm, _In_ in psrm->GetFilter(&filter); _UpdateHeaderFilterState(filter); } + +IFACEMETHODIMP CPowerRenameProgressUI::QueryInterface(__in REFIID riid, __deref_out void** ppv) +{ + static const QITAB qit[] = { + QITABENT(CPowerRenameProgressUI, IUnknown), + { 0 }, + }; + return QISearch(this, qit, riid, ppv); +} + +IFACEMETHODIMP_(ULONG) +CPowerRenameProgressUI::AddRef() +{ + return InterlockedIncrement(&m_refCount); +} + +IFACEMETHODIMP_(ULONG) +CPowerRenameProgressUI::Release() +{ + long refCount = InterlockedDecrement(&m_refCount); + if (refCount == 0) + { + delete this; + } + return refCount; +} + +#define TIMERID_CHECKCANCELED 101 +#define CANCEL_CHECK_INTERVAL 500 + +HRESULT CPowerRenameProgressUI::Start() +{ + _Cleanup(); + m_canceled = false; + m_workerThreadHandle = CreateThread(nullptr, 0, s_workerThread, this, 0, nullptr); + return (m_workerThreadHandle) ? S_OK : E_FAIL; +} + +DWORD WINAPI CPowerRenameProgressUI::s_workerThread(_In_ void* pv) +{ + if (SUCCEEDED(CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE))) + { + CPowerRenameProgressUI* pThis = reinterpret_cast(pv); + if (pThis) + { + HWND hwndMessage = CreateMsgWindow(g_hInst, s_msgWndProc, pThis); + + SetTimer(hwndMessage, TIMERID_CHECKCANCELED, CANCEL_CHECK_INTERVAL, nullptr); + + if (SUCCEEDED(CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pThis->m_sppd)))) + { + wchar_t buff[100] = { 0 }; + LoadString(g_hInst, IDS_LOADING, buff, ARRAYSIZE(buff)); + pThis->m_sppd->SetLine(1, buff, FALSE, NULL); + LoadString(g_hInst, IDS_LOADING_MSG, buff, ARRAYSIZE(buff)); + pThis->m_sppd->SetLine(2, buff, FALSE, NULL); + LoadString(g_hInst, IDS_APP_TITLE, buff, ARRAYSIZE(buff)); + pThis->m_sppd->SetTitle(buff); + SetTimer(hwndMessage, TIMERID_CHECKCANCELED, CANCEL_CHECK_INTERVAL, nullptr); + pThis->m_sppd->StartProgressDialog(NULL, NULL, PROGDLG_MARQUEEPROGRESS, NULL); + } + + while (pThis->m_sppd && !pThis->m_canceled) + { + MSG msg; + while (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + KillTimer(hwndMessage, TIMERID_CHECKCANCELED); + DestroyWindow(hwndMessage); + } + + CoUninitialize(); + } + + return S_OK; +} + +HRESULT CPowerRenameProgressUI::Stop() +{ + _Cleanup(); + return S_OK; +} + +void CPowerRenameProgressUI::_Cleanup() +{ + if (m_sppd) + { + m_sppd->StopProgressDialog(); + m_sppd = nullptr; + } + + if (m_workerThreadHandle) + { + CloseHandle(m_workerThreadHandle); + m_workerThreadHandle = nullptr; + } +} + +void CPowerRenameProgressUI::_UpdateCancelState() +{ + m_canceled = (m_sppd && m_sppd->HasUserCancelled()); +} + +LRESULT CALLBACK CPowerRenameProgressUI::s_msgWndProc(_In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam) +{ + LRESULT lRes = 0; + + CPowerRenameProgressUI* pThis = (CPowerRenameProgressUI*)GetWindowLongPtr(hwnd, 0); + if (pThis != nullptr) + { + lRes = pThis->_WndProc(hwnd, uMsg, wParam, lParam); + if (uMsg == WM_NCDESTROY) + { + SetWindowLongPtr(hwnd, 0, NULL); + } + } + else + { + lRes = DefWindowProc(hwnd, uMsg, wParam, lParam); + } + + return lRes; +} + +LRESULT CPowerRenameProgressUI::_WndProc(_In_ HWND hwnd, _In_ UINT msg, _In_ WPARAM wParam, _In_ LPARAM lParam) +{ + LRESULT lRes = 0; + + AddRef(); + + switch (msg) + { + case WM_TIMER: + if (wParam == TIMERID_CHECKCANCELED) + { + _UpdateCancelState(); + } + break; + + case WM_DESTROY: + KillTimer(hwnd, TIMERID_CHECKCANCELED); + break; + + default: + lRes = DefWindowProc(hwnd, msg, wParam, lParam); + break; + } + + Release(); + + return lRes; +} \ No newline at end of file diff --git a/src/modules/powerrename/ui/PowerRenameUI.h b/src/modules/powerrename/ui/PowerRenameUI.h index c0ef499156..ab036b4db2 100644 --- a/src/modules/powerrename/ui/PowerRenameUI.h +++ b/src/modules/powerrename/ui/PowerRenameUI.h @@ -35,6 +35,43 @@ private: HWND m_hwndLV = nullptr; }; +class CPowerRenameProgressUI : + public IUnknown +{ +public: + CPowerRenameProgressUI() : + m_refCount(1) + { + } + + ~CPowerRenameProgressUI() = default; + + // IUnknown + IFACEMETHODIMP QueryInterface(__in REFIID riid, __deref_out void** ppv); + IFACEMETHODIMP_(ULONG) + AddRef(); + IFACEMETHODIMP_(ULONG) + Release(); + + HRESULT Start(); + HRESULT Stop(); + bool IsCanceled() { return m_canceled; } + +private: + static LRESULT CALLBACK s_msgWndProc(_In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam); + LRESULT _WndProc(_In_ HWND hwnd, _In_ UINT msg, _In_ WPARAM wParam, _In_ LPARAM lParam); + + static DWORD WINAPI s_workerThread(_In_ void* pv); + + void _UpdateCancelState(); + void _Cleanup(); + + long m_refCount = 0; + bool m_canceled = false; + HANDLE m_workerThreadHandle = nullptr; + CComPtr m_sppd; +}; + class CPowerRenameUI : public IDropTarget, public IPowerRenameUI, @@ -141,7 +178,7 @@ private: void _SetCheckboxesFromFlags(_In_ DWORD flags); void _ValidateFlagCheckbox(_In_ DWORD checkBoxId); - void _EnumerateItems(_In_ IUnknown* pdtobj); + HRESULT _EnumerateItems(_In_ IUnknown* pdtobj); void _UpdateCounts(); void _CollectItemPosition(_In_ DWORD id); @@ -164,8 +201,10 @@ private: int m_initialHeight = 0; int m_lastWidth = 0; int m_lastHeight = 0; + CPowerRenameProgressUI m_prpui; CComPtr m_spsrm; CComPtr m_dataSource; + CComPtr m_sppre; CComPtr m_spdth; CComPtr m_spSearchAC; CComPtr m_spSearchACL; diff --git a/src/modules/powerrename/ui/Resources.resx b/src/modules/powerrename/ui/Resources.resx index 4da3576bbd..28b645e29e 100644 --- a/src/modules/powerrename/ui/Resources.resx +++ b/src/modules/powerrename/ui/Resources.resx @@ -205,4 +205,10 @@ Please select from the options above to show items. Enter the criteria below to rename the items + + Loading... + + + Please wait while the selected items are enumerated. + \ No newline at end of file From 2b9ecf75b66ab2155e5a7c353e4b88fd1353ba1d Mon Sep 17 00:00:00 2001 From: ricardosantos9521 Date: Fri, 2 Apr 2021 14:06:14 +0100 Subject: [PATCH 62/82] fix workspaces not showing in vscode plugin #10530 (#10533) --- .../WorkspacesHelper/VSCodeStorageFile.cs | 8 +++ .../WorkspacesHelper/VSCodeWorkspacesApi.cs | 60 ++++++++++++++----- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/WorkspacesHelper/VSCodeStorageFile.cs b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/WorkspacesHelper/VSCodeStorageFile.cs index c323dce2db..c497342274 100644 --- a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/WorkspacesHelper/VSCodeStorageFile.cs +++ b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/WorkspacesHelper/VSCodeStorageFile.cs @@ -7,8 +7,16 @@ namespace Community.PowerToys.Run.Plugin.VSCodeWorkspaces.WorkspacesHelper public openedPathsList openedPathsList { get; set; } } + public class VSCodeWorkspaceEntry + { + public string folderUri { get; set; } + public string label { get; set; } + } + public class openedPathsList { public List workspaces3 { get; set; } + + public List entries { get; set; } } } diff --git a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/WorkspacesHelper/VSCodeWorkspacesApi.cs b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/WorkspacesHelper/VSCodeWorkspacesApi.cs index 82da3ac43f..04aa66bdb9 100644 --- a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/WorkspacesHelper/VSCodeWorkspacesApi.cs +++ b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/WorkspacesHelper/VSCodeWorkspacesApi.cs @@ -3,6 +3,7 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; +using System.Linq; using Wox.Plugin.Logger; namespace Community.PowerToys.Run.Plugin.VSCodeWorkspaces.WorkspacesHelper @@ -11,6 +12,30 @@ namespace Community.PowerToys.Run.Plugin.VSCodeWorkspaces.WorkspacesHelper { public VSCodeWorkspacesApi() { } + private VSCodeWorkspace parseVSCodeUri(string uri, VSCodeInstance vscodeInstance) + { + if (uri != null && uri is String) + { + string unescapeUri = Uri.UnescapeDataString(uri); + var typeWorkspace = ParseVSCodeUri.GetTypeWorkspace(unescapeUri); + if (typeWorkspace.TypeWorkspace.HasValue) + { + var folderName = Path.GetFileName(unescapeUri); + return new VSCodeWorkspace() + { + Path = uri, + RelativePath = typeWorkspace.Path, + FolderName = folderName, + ExtraInfo = typeWorkspace.MachineName, + TypeWorkspace = typeWorkspace.TypeWorkspace.Value, + VSCodeInstance = vscodeInstance + }; + } + } + + return null; + } + public List Workspaces { get @@ -33,27 +58,32 @@ namespace Community.PowerToys.Run.Plugin.VSCodeWorkspaces.WorkspacesHelper if (vscodeStorageFile != null) { - foreach (var workspaceUri in vscodeStorageFile.openedPathsList.workspaces3) + //for previous versions of vscode + if (vscodeStorageFile.openedPathsList.workspaces3 != null) { - if (workspaceUri != null && workspaceUri is String) + foreach (var workspaceUri in vscodeStorageFile.openedPathsList.workspaces3) { - string unescapeUri = Uri.UnescapeDataString(workspaceUri); - var typeWorkspace = ParseVSCodeUri.GetTypeWorkspace(unescapeUri); - if (typeWorkspace.TypeWorkspace.HasValue) + var uri = parseVSCodeUri(workspaceUri, vscodeInstance); + if (uri != null) { - var folderName = Path.GetFileName(unescapeUri); - results.Add(new VSCodeWorkspace() - { - Path = workspaceUri, - RelativePath = typeWorkspace.Path, - FolderName = folderName, - ExtraInfo = typeWorkspace.MachineName, - TypeWorkspace = typeWorkspace.TypeWorkspace.Value, - VSCodeInstance = vscodeInstance - }); + results.Add(uri); } } } + + //vscode v1.55.0 or later + if (vscodeStorageFile.openedPathsList.entries != null) + { + foreach (var workspaceUri in vscodeStorageFile.openedPathsList.entries.Select(x => x.folderUri)) + { + var uri = parseVSCodeUri(workspaceUri, vscodeInstance); + if (uri != null) + { + results.Add(uri); + } + } + } + } } catch (Exception ex) From 6561290bde11a069190b0961a82b27bbf39e078a Mon Sep 17 00:00:00 2001 From: Enrico Giordani Date: Fri, 2 Apr 2021 06:58:43 -0700 Subject: [PATCH 63/82] [spell checker] Add expected terms (#10544) --- .github/actions/spell-check/expect.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index b4fbec9cbb..375a764c79 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -217,6 +217,7 @@ charset chdir checkbox checkboxes +CHECKCANCELED Checkedin checknetisolation Chicklet @@ -1037,6 +1038,7 @@ ipreviewhandlertranslateaccelerator ipreviewhandlervisualssetfont IPrincipal IProgram +IProgress IProperty IPublic IQuery @@ -1056,6 +1058,7 @@ isetting isfinite IShell ISingle +ISmart ismethod isocpp IStorage @@ -1265,6 +1268,7 @@ MAPPEDTOSAMEKEY MAPTOSAMESHORTCUT MAPVK Markdig +MARQUEEPROGRESS martinchrzan martinmoene MATCHALLOCCURENCES @@ -1656,6 +1660,7 @@ Printfax prm PROCESSKEY PRODUCTVERSION +PROGDLG Progman programdata PROGRAMFILES @@ -1664,6 +1669,7 @@ Proj projectname propkey propvarutil +prpui Prt prui prvpane @@ -1955,6 +1961,8 @@ spesi spinbuttonref splitwstring spoprod +sppd +sppre spsi spsia spsrif @@ -2112,6 +2120,7 @@ thre tif TILEDWINDOW Timeline +TIMERID timeunion timeutil titlecase From bc28a3f5e3e375da1dc19df0245485098cb68d80 Mon Sep 17 00:00:00 2001 From: Davide Giacometti Date: Fri, 2 Apr 2021 16:29:48 +0200 Subject: [PATCH 64/82] disable apps for shortcut guide (#10123) --- src/modules/shortcut_guide/shortcut_guide.cpp | 88 +++++++++++++++++++ src/modules/shortcut_guide/shortcut_guide.h | 12 +++ .../ShortcutGuideProperties.cs | 4 + .../ViewModels/ShortcutGuideViewModel.cs | 20 +++++ .../Strings/en-us/Resources.resw | 11 +++ .../Views/ShortcutGuidePage.xaml | 17 ++++ 6 files changed, 152 insertions(+) diff --git a/src/modules/shortcut_guide/shortcut_guide.cpp b/src/modules/shortcut_guide/shortcut_guide.cpp index 48bf07d49d..cc7c673f04 100644 --- a/src/modules/shortcut_guide/shortcut_guide.cpp +++ b/src/modules/shortcut_guide/shortcut_guide.cpp @@ -14,8 +14,10 @@ #include #include #include +#include #include #include +#include // TODO: refactor singleton OverlayWindow* instance = nullptr; @@ -41,6 +43,7 @@ namespace { HWND hwnd = nullptr; // Handle to the top-level foreground window or nullptr if there is no such window bool snappable = false; // True, if the window can react to Windows Snap keys + bool disabled = false; }; ShortcutGuideWindowInfo GetShortcutGuideWindowInfo() @@ -52,6 +55,18 @@ namespace { return result; } + + WCHAR exePath[MAX_PATH] = L""; + instance->get_exe_path(active_window, exePath); + if (wcslen(exePath) > 0) + { + result.disabled = instance->is_disabled_app(exePath); + if (result.disabled) + { + return result; + } + } + auto style = GetWindowLong(active_window, GWL_STYLE); auto exStyle = GetWindowLong(active_window, GWL_EXSTYLE); if ((style & WS_CHILD) == WS_CHILD || @@ -193,6 +208,11 @@ void OverlayWindow::set_config(const wchar_t* config) winkey_popup->set_theme(theme.value); } } + if (auto val = _values.get_string_value(disabledApps.name)) + { + disabledApps.value = std::move(*val); + update_disabled_apps(); + } } } catch (...) @@ -343,6 +363,11 @@ intptr_t OverlayWindow::signal_event(LowlevelKeyboardEvent* event) void OverlayWindow::on_held() { auto windowInfo = GetShortcutGuideWindowInfo(); + if (windowInfo.disabled) + { + target_state->was_hidden(); + return; + } winkey_popup->show(windowInfo.hwnd, windowInfo.snappable); } @@ -391,9 +416,72 @@ void OverlayWindow::init_settings() { theme.value = std::move(*val); } + if (auto val = settings.get_string_value(disabledApps.name)) + { + disabledApps.value = std::move(*val); + update_disabled_apps(); + } } catch (std::exception&) { // Error while loading from the settings file. Just let default values stay as they are. } } + +bool OverlayWindow::is_disabled_app(wchar_t* exePath) +{ + if (exePath == nullptr) + { + return false; + } + + auto exePathUpper = std::wstring(exePath); + CharUpperBuffW(exePathUpper.data(), (DWORD)exePathUpper.length()); + + for (const auto& row : disabled_apps_array) + { + const auto pos = exePathUpper.rfind(row); + const auto last_slash = exePathUpper.rfind('\\'); + // Check that row occurs in disabled_apps_array, and its last occurrence contains in itself the first character after the last backslash. + if (pos != std::wstring::npos && pos <= last_slash + 1 && pos + row.length() > last_slash) + { + return true; + } + } + return false; +} + +void OverlayWindow::update_disabled_apps() +{ + disabled_apps_array.clear(); + auto disabledUppercase = disabledApps.value; + CharUpperBuffW(disabledUppercase.data(), (DWORD)disabledUppercase.length()); + std::wstring_view view(disabledUppercase); + view = trim(view); + while (!view.empty()) + { + auto pos = (std::min)(view.find_first_of(L"\r\n"), view.length()); + disabled_apps_array.emplace_back(view.substr(0, pos)); + view.remove_prefix(pos); + view = trim(view); + } +} + +void OverlayWindow::get_exe_path(HWND window, wchar_t* path) +{ + if (disabled_apps_array.empty()) + { + return; + } + + DWORD pid = 0; + GetWindowThreadProcessId(window, &pid); + if (pid != 0) + { + HANDLE processHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); + if (processHandle && GetProcessImageFileName(processHandle, path, MAX_PATH) > 0) + { + CloseHandle(processHandle); + } + } +} diff --git a/src/modules/shortcut_guide/shortcut_guide.h b/src/modules/shortcut_guide/shortcut_guide.h index 88b7a37a6e..52e6a76662 100644 --- a/src/modules/shortcut_guide/shortcut_guide.h +++ b/src/modules/shortcut_guide/shortcut_guide.h @@ -37,6 +37,10 @@ public: bool overlay_visible() const; + bool is_disabled_app(wchar_t* exePath); + + void get_exe_path(HWND window, wchar_t* exePath); + private: std::wstring app_name; //contains the non localized key of the powertoy @@ -46,9 +50,11 @@ private: bool _enabled = false; HHOOK hook_handle; std::unique_ptr event_waiter; + std::vector disabled_apps_array; void init_settings(); void disable(bool trace_event); + void update_disabled_apps(); struct PressTime { @@ -75,4 +81,10 @@ private: { L"dark", IDS_SETTING_DESCRIPTION_THEME_DARK } }; } theme; + + struct DisabledApps + { + PCWSTR name = L"disabled_apps"; + std::wstring value = L""; + } disabledApps; }; diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ShortcutGuideProperties.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ShortcutGuideProperties.cs index a0981dd797..eb04fc390d 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ShortcutGuideProperties.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ShortcutGuideProperties.cs @@ -13,6 +13,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library OverlayOpacity = new IntProperty(90); PressTime = new IntProperty(900); Theme = new StringProperty("system"); + DisabledApps = new StringProperty(); } [JsonPropertyName("overlay_opacity")] @@ -23,5 +24,8 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonPropertyName("theme")] public StringProperty Theme { get; set; } + + [JsonPropertyName("disabled_apps")] + public StringProperty DisabledApps { get; set; } } } diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/ShortcutGuideViewModel.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/ShortcutGuideViewModel.cs index 79072bba66..af23429e26 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/ShortcutGuideViewModel.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/ShortcutGuideViewModel.cs @@ -20,6 +20,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels private Func SendConfigMSG { get; } private string _settingsConfigFileFolder = string.Empty; + private string _disabledApps; public ShortcutGuideViewModel(ISettingsRepository settingsRepository, ISettingsRepository moduleSettingsRepository, Func ipcMSGCallBackFunc, string configFileSubfolder = "") { @@ -49,6 +50,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels _isEnabled = GeneralSettingsConfig.Enabled.ShortcutGuide; _pressTime = Settings.Properties.PressTime.Value; _opacity = Settings.Properties.OverlayOpacity.Value; + _disabledApps = Settings.Properties.DisabledApps.Value; string theme = Settings.Properties.Theme.Value; @@ -170,6 +172,24 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels } } + public string DisabledApps + { + get + { + return _disabledApps; + } + + set + { + if (value != _disabledApps) + { + _disabledApps = value; + Settings.Properties.DisabledApps.Value = value; + NotifyPropertyChanged(); + } + } + } + public string GetSettingsSubPath() { return _settingsConfigFileFolder + "\\" + ModuleName; diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw index e8a429e8f0..05d8dacb32 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw @@ -491,6 +491,16 @@ Opacity of background + + Disable for apps + + + Turn off Shortcut Guide when these applications have focus. Add one application name per line. + + + Example: outlook.exe + Don't translate outlook.exe + Image sizes @@ -793,6 +803,7 @@ Example: outlook.exe + Don't translate outlook.exe Example: %1 (%2) diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/ShortcutGuidePage.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/ShortcutGuidePage.xaml index 3e57e2164d..554f4142ab 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/ShortcutGuidePage.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/ShortcutGuidePage.xaml @@ -111,6 +111,23 @@ IsEnabled="{x:Bind Mode=OneWay, Path=ViewModel.IsEnabled}"> + + + + Date: Fri, 2 Apr 2021 07:44:12 -0700 Subject: [PATCH 65/82] [msi] remove old settings from installer (#10546) --- installer/PowerToysSetup/Product.wxs | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/installer/PowerToysSetup/Product.wxs b/installer/PowerToysSetup/Product.wxs index 5e7f5fc4bd..2ea9c9fe76 100644 --- a/installer/PowerToysSetup/Product.wxs +++ b/installer/PowerToysSetup/Product.wxs @@ -281,9 +281,6 @@ - - - @@ -315,9 +312,6 @@ - - - @@ -743,23 +737,6 @@ - - - - - - - - - - - - - - - - - INSTALLDESKTOPSHORTCUT @@ -814,11 +791,6 @@ - - - - - From 0ee034a084036bd51ade0a640f60aa8202faa228 Mon Sep 17 00:00:00 2001 From: Niels Laute Date: Mon, 5 Apr 2021 10:52:44 +0200 Subject: [PATCH 66/82] [OOBE] Bolded shortcuts / instructions (#10574) * Colorpicker keys * Key visuals added * Added highlighted text * Undo comment Co-authored-by: Niels Laute --- .../Microsoft.PowerToys.Settings.UI/App.xaml | 1 + .../Controls/KeyVisual/KeyVisual.cs | 30 +++++++++ .../Controls/KeyVisual/KeyVisual.xaml | 57 +++++++++++++++++ .../Controls/ShortcutTextControl.xaml | 11 ++++ .../Controls/ShortcutTextControl.xaml.cs | 60 ++++++++++++++++++ .../Controls/ShortcutVisualControl.xaml | 15 +++++ .../Controls/ShortcutVisualControl.xaml.cs | 62 +++++++++++++++++++ .../Microsoft.PowerToys.Settings.UI.csproj | 22 +++++++ .../OOBE/Views/OobeColorPicker.xaml | 19 +++--- .../OOBE/Views/OobeFancyZones.xaml | 12 ++-- .../OOBE/Views/OobeFileExplorer.xaml | 6 +- .../OOBE/Views/OobeImageResizer.xaml | 9 ++- .../OOBE/Views/OobeKBM.xaml | 7 +-- .../OOBE/Views/OobePowerRename.xaml | 4 +- .../OOBE/Views/OobeRun.xaml | 10 +-- .../OOBE/Views/OobeShortcutGuide.xaml | 8 +-- .../OOBE/Views/OobeVideoConference.xaml | 6 +- .../Strings/en-us/Resources.resw | 29 +++++---- .../Styles/TextBlock.xaml | 1 + 19 files changed, 313 insertions(+), 56 deletions(-) create mode 100644 src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/KeyVisual/KeyVisual.cs create mode 100644 src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/KeyVisual/KeyVisual.xaml create mode 100644 src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutTextControl.xaml create mode 100644 src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutTextControl.xaml.cs create mode 100644 src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutVisualControl.xaml create mode 100644 src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutVisualControl.xaml.cs diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/App.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/App.xaml index 2055310eb0..8427250f74 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/App.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/App.xaml @@ -8,6 +8,7 @@ + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/KeyVisual/KeyVisual.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/KeyVisual/KeyVisual.cs new file mode 100644 index 0000000000..1ef7ec2410 --- /dev/null +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/KeyVisual/KeyVisual.cs @@ -0,0 +1,30 @@ +// 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 Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; + +namespace Microsoft.PowerToys.Settings.UI.Controls +{ + public sealed class KeyVisual : Control + { + public object Content + { + get => (string)GetValue(ContentProperty); + set => SetValue(ContentProperty, value); + } + + public static readonly DependencyProperty ContentProperty = DependencyProperty.Register("Content", typeof(object), typeof(KeyVisual), new PropertyMetadata(default(string))); + + public KeyVisual() + { + this.DefaultStyleKey = typeof(KeyVisual); + } + + protected override void OnApplyTemplate() + { + base.OnApplyTemplate(); + } + } +} diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/KeyVisual/KeyVisual.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/KeyVisual/KeyVisual.xaml new file mode 100644 index 0000000000..16d9b0f4cf --- /dev/null +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/KeyVisual/KeyVisual.xaml @@ -0,0 +1,57 @@ + + + + + + #12FFFFFF + #18FFFFFF + #0FFFFFFF + + + + + #0F000000 + #29000000 + #B3FFFFFF + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutTextControl.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutTextControl.xaml new file mode 100644 index 0000000000..307515efa1 --- /dev/null +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutTextControl.xaml @@ -0,0 +1,11 @@ + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutTextControl.xaml.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutTextControl.xaml.cs new file mode 100644 index 0000000000..7767a73581 --- /dev/null +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutTextControl.xaml.cs @@ -0,0 +1,60 @@ +// 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.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Text.RegularExpressions; +using Windows.UI.Text; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Documents; + +namespace Microsoft.PowerToys.Settings.UI.Controls +{ + public sealed partial class ShortcutTextControl : UserControl + { + public string Text + { + get => (string)GetValue(TextProperty); + set => SetValue(TextProperty, value); + } + + public ShortcutTextControl() + { + this.InitializeComponent(); + } + + public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(ShortcutVisualControl), new PropertyMetadata(default(string), (s, e) => + { + var self = (ShortcutTextControl)s; + var parts = Regex.Split(e.NewValue.ToString(), @"({[\s\S]+?})").Where(l => !string.IsNullOrEmpty(l)).ToArray(); + + foreach (var seg in parts) + { + if (!string.IsNullOrWhiteSpace(seg)) + { + if (seg.Contains("{", StringComparison.InvariantCulture)) + { + Run key = new Run() + { + Text = Regex.Replace(seg, @"[{}]", string.Empty), + FontWeight = FontWeights.SemiBold, + }; + self.ContentText.Inlines.Add(key); + } + else + { + Run description = new Run() + { + Text = seg, + FontWeight = FontWeights.Normal, + }; + self.ContentText.Inlines.Add(description); + } + } + } + })); + } +} diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutVisualControl.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutVisualControl.xaml new file mode 100644 index 0000000000..0050ba6749 --- /dev/null +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutVisualControl.xaml @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutVisualControl.xaml.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutVisualControl.xaml.cs new file mode 100644 index 0000000000..90559b3e7f --- /dev/null +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/ShortcutVisualControl.xaml.cs @@ -0,0 +1,62 @@ +// 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.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Text.RegularExpressions; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; + +namespace Microsoft.PowerToys.Settings.UI.Controls +{ + public sealed partial class ShortcutVisualControl : UserControl + { + public ShortcutVisualControl() + { + InitializeComponent(); + } + + public string Text + { + get => (string)GetValue(TextProperty); + set => SetValue(TextProperty, value); + } + + public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(ShortcutVisualControl), new PropertyMetadata(default(string), (s, e) => + { + var self = (ShortcutVisualControl)s; + var parts = Regex.Split(e.NewValue.ToString(), @"({[\s\S]+?})").Where(l => !string.IsNullOrEmpty(l)).ToArray(); + + foreach (var seg in parts) + { + if (!string.IsNullOrWhiteSpace(seg)) + { + if (seg.Contains("{", StringComparison.InvariantCulture)) + { + KeyVisual k = new KeyVisual + { + Content = Regex.Replace(seg, @"[{}]", string.Empty), + VerticalAlignment = VerticalAlignment.Center, + }; + + self.contentPanel.Children.Add(k); + } + else + { + TextBlock t = new TextBlock + { + Text = seg, + TextWrapping = TextWrapping.Wrap, + VerticalAlignment = VerticalAlignment.Top, + Margin = new Thickness(0, 6, 0, 0), + }; + + self.contentPanel.Children.Add(t); + } + } + } + })); + } +} diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj index ceef74642e..2d865ca040 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj @@ -98,6 +98,13 @@ HotkeySettingsControl.xaml + + + ShortcutTextControl.xaml + + + ShortcutVisualControl.xaml + Code @@ -241,6 +248,9 @@ 6.1.1 + + 6.1.1 + 6.1.2 @@ -272,6 +282,18 @@ MSBuild:Compile Designer + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeColorPicker.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeColorPicker.xaml index 07341ea2cd..597e67482a 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeColorPicker.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeColorPicker.xaml @@ -6,7 +6,8 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" - Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> + xmlns:controls="using:Microsoft.PowerToys.Settings.UI.Controls" + Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> @@ -38,16 +39,14 @@ - - - - + + + + - - + + @@ -38,13 +39,14 @@ - + + + - + + @@ -40,9 +41,8 @@ - - + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeImageResizer.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeImageResizer.xaml index 54b57ea2e9..25f6c14d6c 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeImageResizer.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeImageResizer.xaml @@ -5,7 +5,8 @@ xmlns:local="using:Microsoft.PowerToys.Settings.UI.OOBE.Views" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - mc:Ignorable="d" + xmlns:controls="using:Microsoft.PowerToys.Settings.UI.Controls" + mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> @@ -41,14 +42,12 @@ - + - + @@ -40,14 +41,12 @@ - + - + @@ -41,8 +42,7 @@ - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeRun.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeRun.xaml index 5330d0ff17..53736a5456 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeRun.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeRun.xaml @@ -5,7 +5,8 @@ xmlns:local="using:Microsoft.PowerToys.Settings.UI.OOBE.Views" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - mc:Ignorable="d" + xmlns:controls="using:Microsoft.PowerToys.Settings.UI.Controls" + mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> @@ -42,13 +43,12 @@ - - + + - + @@ -42,9 +43,8 @@ - - + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeVideoConference.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeVideoConference.xaml index 77fd3a3f9c..4e309a3fe2 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeVideoConference.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeVideoConference.xaml @@ -5,7 +5,8 @@ xmlns:local="using:Microsoft.PowerToys.Settings.UI.OOBE.Views" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - mc:Ignorable="d" + xmlns:controls="using:Microsoft.PowerToys.Settings.UI.Controls" + mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> @@ -41,8 +42,7 @@ - + PowerToys in our release notes. - Win + Shift + C to open Color Picker. + {Win} + {Ctrl} + {C} to open Color Picker. - To select a color with more precision, scroll the mouse wheel to zoom in. + To select a color with more precision, {scroll the mouse wheel} to zoom in. - Shift + drag while dragging the window to snap a window to a zone, and release the window in the desired zone. -Win + ` to open the FancyZones editor. + {Shift} + {dragging the window} to snap a window to a zone, and release the window in the desired zone. {Win} + {`} to open the FancyZones editor. - Snap a window to multiple zones by holding the Ctrl key (while also holding Shift) when dragging a window. + Snap a window to multiple zones by holding the {Ctrl} key (while also holding {Shift}) when dragging a window. - Open Windows File Explorer, select the View tab in the File Explorer ribbon, then select Preview Pane. + Open File Explorer, {select the View tab} in the File Explorer ribbon, then {select Preview Pane}. From there, simply click on a Markdown file or SVG icon in the File Explorer and observe the content on the preview pane! @@ -1073,39 +1072,39 @@ From there, simply click on a Markdown file or SVG icon in the File Explorer and How to use - In File Explorer, right-clicking one or more image files and clicking on Resize pictures from the context menu. + In File Explorer, {right-clicking one or more image files} and {clicking on Resize pictures} from the context menu. Want a custom size? You can add them in the PowerToys Settings! - Launch PowerToys settings, navigate to the Keyboard Manager menu, and select either Remap a key or Remap a shortcut. + Launch {PowerToys settings}, navigate to the Keyboard Manager menu, and select either {Remap a key} or {Remap a shortcut}. Want to only have a shortcut work for a single application? Use the Target App field when creating the shortcut remapping. - In File Explorer, right-clicking one or more selected files and clicking on PowerRename from the context menu. + In File Explorer, {right-clicking one or more selected files} and {clicking on PowerRename} from the context menu. PowerRename supports searching for files using regular expressions to enable more advanced renaming functionalities. - Alt + Space to open PowerToys and just start typing. + {Alt} + {Space} to open Run and just start typing. - PowerToys runs supports various action keys to funnel search queries for a specific subset of results. Typing < searches for running processes only, ? will search only for file, or . for installed applications! See PowerToys documentation for the complete set of 'Action Keys' available. + PowerToys Run supports various action keys to funnel search queries for a specific subset of results. Typing {<} searches for running processes only, {?} will search only for file, or {.} for installed applications! See PowerToys documentation for the complete set of 'Action Keys' available. - Win + ? to open Shortcut Guide, press it again to close or press Esc. You can also launch it by holding the Win key for one second! + {Win} + {?} to open Shortcut Guide, press it again to close or press {Esc}. You can also launch it by holding the {Win} key for one second! Tips & tricks - Win + N to toggle both your microphone and video -Win + Shift + A to toggle your microphone -Win + Shift + O to toggle your video + {Win} + {N} to toggle both your microphone and video +{Win} + {Shift} + {A} to toggle your microphone +{Win} + {Shift} + {O} to toggle your video Color Picker diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Styles/TextBlock.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Styles/TextBlock.xaml index e8ee207831..782c1b675e 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Styles/TextBlock.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Styles/TextBlock.xaml @@ -31,6 +31,7 @@ \ No newline at end of file From b0465bb50043e108b74a46501783d3f023e030c8 Mon Sep 17 00:00:00 2001 From: Niels Laute Date: Mon, 5 Apr 2021 11:15:08 +0200 Subject: [PATCH 67/82] [OOBE] UX fixes (#10583) * Updated OOBE * String fix Co-authored-by: Niels Laute --- .../OOBE/Enums/PowerToysModulesEnum.cs | 2 +- .../OOBE/Views/OobeOverview.xaml | 4 ++-- .../OOBE/Views/OobeShellPage.xaml.cs | 24 +++++++++---------- .../Strings/en-us/Resources.resw | 6 ++--- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Enums/PowerToysModulesEnum.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Enums/PowerToysModulesEnum.cs index aba36bea37..83ca42c99f 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Enums/PowerToysModulesEnum.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Enums/PowerToysModulesEnum.cs @@ -12,8 +12,8 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Enums FileExplorer, ImageResizer, KBM, - Run, PowerRename, + Run, ShortcutGuide, VideoConference, } diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeOverview.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeOverview.xaml index cec039d9e9..61d9aa2c9a 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeOverview.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/OOBE/Views/OobeOverview.xaml @@ -31,7 +31,7 @@ - + - +
PowerToys General Settings
\ No newline at end of file diff --git a/src/settings/settings-html/index.html b/src/settings/settings-html/index.html deleted file mode 100644 index 4dc946c8a5..0000000000 --- a/src/settings/settings-html/index.html +++ /dev/null @@ -1,13 +0,0 @@ -PowerToys Settings
PowerToys General Settings
\ No newline at end of file diff --git a/src/settings/settings.rc b/src/settings/settings.rc deleted file mode 100644 index 2fb9b12b92f70df47bb970e1087ed30013d64989..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2198 zcmb`HZ)+Ms5XR?qq2J-SylJ4QN%N*q3R+JaVsfGvL!cm5FIKRpc-p34zU^;zy_|bq zq=vHS?Vs7_nR#Yr|NK6YnItlnxol)2v3T-9eww|BESRNIk#F)*Udt=lxAkSkofOLr zvoUkE_Mf$`a9+i3A>SDbn5*)GTPrYTrRy9|J*Z2UaVei9lpB1_XFkXk`NCM?OTti8 zU8gWi`Pcc(a3@&Wne|kW&p;bUAU)}Ws_2*eTFmsc#j3-pYvDcZ4+|%HrwdjnO}WL} zsBrETPRs6RoGqB^(#EfAzJ0kep7v!3yV~g2dbe+>erVPnOl}{zImDwt8hF)qBFpcp z4jFpU`UF+yXc<3ywS@eBkYH;RSo`Zc0#}z-t)~Zoo8lbfer>?y1Xn+}#FV)z`k2N)<{V_%3 z8Ii}_NKkXJt?~R`8Crh2i&~Ql6nf9^Lca3v!&PN?_^G-ChHnmEN-ufx1{>AX-a3`H z#xmht`^ffeZqvZ>6pJx;N2af0qS%cw_v(<(nbm-r>)@Gc@1u-%?h@ogexc=vRm{Hn zq&;~}mg?-^o4nRp2c_KQ=$Xb%FjFE>?U#6OUk1yPW!qL}AJ!f@>5_NbwPleWW*fkk zzduD5x8sLoC^C#U+y2S0i(gkat(vvrNziOwP)=W(2&H;_Rc-BwW3}smJ~h~yqb1o< z^`=z8dM7_!GNXF6S>BG1tP7*o`G$&E zgSX4$zOgUS%|$P(g(AnX6%pWb)9Hf!9rxWC5aa4e*_XUHZuLc=X~(AIYgFhbeOv6y XqCI@ZyIW)Yj~6M!I{X^tTI938MA9Rq diff --git a/src/settings/trace.cpp b/src/settings/trace.cpp deleted file mode 100644 index 1a29620665..0000000000 --- a/src/settings/trace.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include "pch.h" -#include "trace.h" - -TRACELOGGING_DEFINE_PROVIDER( - g_hProvider, - "Microsoft.PowerToys", - // {38e8889b-9731-53f5-e901-e8a7c1753074} - (0x38e8889b, 0x9731, 0x53f5, 0xe9, 0x01, 0xe8, 0xa7, 0xc1, 0x75, 0x30, 0x74), - TraceLoggingOptionProjectTelemetry()); - -const char* settingsInitErrorCauseAsString(Trace::SettingsInitErrorCause error_case) -{ - switch (error_case) - { - case Trace::SettingsInitErrorCause::WebViewInitAsyncError: - return "WebViewInitAsyncError"; - case Trace::SettingsInitErrorCause::WebViewInitWinRTException: - return "WebViewInitWinRTException"; - case Trace::SettingsInitErrorCause::FailedToDropPrivileges: - return "FailedToDropPrivileges"; - default: - return "UnknownError"; - }; -} - -void Trace::SettingsInitError(const Trace::SettingsInitErrorCause error_cause) -{ - TraceLoggingWrite( - g_hProvider, - "PowerToysSettings_SettingsInitError", - TraceLoggingString(settingsInitErrorCauseAsString(error_cause), "Cause"), - ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), - TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), - TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); -} - -void Trace::RegisterProvider() noexcept -{ - TraceLoggingRegister(g_hProvider); -} - -void Trace::UnregisterProvider() noexcept -{ - TraceLoggingUnregister(g_hProvider); -} diff --git a/src/settings/trace.h b/src/settings/trace.h deleted file mode 100644 index 366b3fbda8..0000000000 --- a/src/settings/trace.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -class Trace -{ -public: - enum class SettingsInitErrorCause : int32_t - { - WebViewInitAsyncError, - WebViewInitWinRTException, - FailedToDropPrivileges, - }; - - static void SettingsInitError(const SettingsInitErrorCause error_cause); - - static void RegisterProvider() noexcept; - static void UnregisterProvider() noexcept; -}; From 38bc0bab3dcd2fb7066b97256e0c48daa4626a81 Mon Sep 17 00:00:00 2001 From: Niels Laute Date: Mon, 5 Apr 2021 11:35:33 +0200 Subject: [PATCH 69/82] [FZ Editor] Added resolution to monitor (#10567) * Added resolution * Added resolution * Fontsize fix Co-authored-by: Niels Laute --- .../editor/FancyZonesEditor/MainWindow.xaml | 20 +++++++++++++++++-- .../ViewModels/MonitorViewModel.cs | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml b/src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml index d80e528727..8636c438a2 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml +++ b/src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml @@ -84,6 +84,9 @@ + + + + + + + @@ -329,7 +347,6 @@ - - diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/ViewModels/MonitorViewModel.cs b/src/modules/fancyzones/editor/FancyZonesEditor/ViewModels/MonitorViewModel.cs index eff99c9aa1..739ec53ec2 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/ViewModels/MonitorViewModel.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/ViewModels/MonitorViewModel.cs @@ -48,7 +48,7 @@ namespace FancyZonesEditor.ViewModels double maxMultiplier = MaxPreviewDisplaySize / maxDimension; double minMultiplier = MinPreviewDisplaySize / minDimension; - DesktopPreviewMultiplier = (minMultiplier + maxMultiplier) / 3.5; + DesktopPreviewMultiplier = (minMultiplier + maxMultiplier) / 2.5; } private void RaisePropertyChanged(string propertyName) From 8e7889271215739438c78056904ad384e5bf7378 Mon Sep 17 00:00:00 2001 From: csigs Date: Mon, 5 Apr 2021 06:23:18 -0700 Subject: [PATCH 70/82] LEGO: check in for master to temporary branch. (#10588) --- .../bootstrapper/Resources.resx.lcl | 9 ++++ .../Properties/Resources.resx.lcl | 15 ++---- .../Properties/Resources.resx.lcl | 15 ++---- .../Properties/Resources.resx.lcl | 3 ++ .../Properties/Resources.resx.lcl | 18 +++---- .../Properties/Resources.resx.lcl | 15 ++---- .../Properties/Resources.resx.lcl | 15 ++---- .../Properties/Resources.resx.lcl | 15 ++---- .../Properties/Resources.resx.lcl | 15 ++---- .../Properties/Resources.resx.lcl | 15 ++---- .../Properties/Resources.resx.lcl | 5 +- .../Properties/Resources.resx.lcl | 15 ++---- .../Properties/Resources.resx.lcl | 20 +++----- .../Properties/Resources.resx.lcl | 3 ++ .../Properties/Resources.resx.lcl | 30 ++++++----- .../Properties/Resources.resx.lcl | 15 ++---- .../modules/fancyzones/lib/Resources.resx.lcl | 18 +++++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 +++++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 +++++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 +++++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 +++++++ .../modules/fancyzones/lib/Resources.resx.lcl | 18 +++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 18 +++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../modules/powerrename/ui/Resources.resx.lcl | 15 ++++++ .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- .../Strings/en-us/Resources.resw.lcl | 32 +++++++++++- .../Strings/en-us/Resources.resw.lcl | 32 +++++++++++- .../Strings/en-us/Resources.resw.lcl | 29 ++++++++++- .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- .../Strings/en-us/Resources.resw.lcl | 50 ++++++++++++++++++- .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- .../Strings/en-us/Resources.resw.lcl | 34 ++++++++++++- .../Strings/en-us/Resources.resw.lcl | 42 ++++++++++++++-- .../Strings/en-us/Resources.resw.lcl | 42 ++++++++++++++-- .../Strings/en-us/Resources.resw.lcl | 23 ++++++++- 56 files changed, 912 insertions(+), 168 deletions(-) diff --git a/installer/PowerToysBootstrapper/bootstrapper/loc/zh-Hans/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl b/installer/PowerToysBootstrapper/bootstrapper/loc/zh-Hans/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl index fa62bcbaa7..68f3ba7f92 100644 --- a/installer/PowerToysBootstrapper/bootstrapper/loc/zh-Hans/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl +++ b/installer/PowerToysBootstrapper/bootstrapper/loc/zh-Hans/installer/PowerToysBootstrapper/bootstrapper/Resources.resx.lcl @@ -283,6 +283,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/cs/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/cs/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 3fe9beaefc..477af2f215 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/cs/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/cs/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/de/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/de/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 414d4b8f5b..4eb3890b1e 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/de/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/de/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/fr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/fr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index b57090fab3..32c2335c22 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/fr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/fr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -517,6 +517,9 @@ + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/hu/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/hu/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 40f3ab6708..c932898cb9 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/hu/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/hu/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - @@ -517,6 +508,9 @@ + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/it/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/it/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 93eee40b13..3f551e0de1 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/it/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/it/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ja/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ja/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 93035b7c45..ad38f2648c 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ja/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ja/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ko/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ko/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index f682afec4d..43b3cfc3f4 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ko/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ko/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/nl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/nl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 788ab2241f..44ad08ea5d 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/nl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/nl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index bd89d0f795..cc4aab6b3f 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pl/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-BR/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-BR/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 12fda01f9f..71bc02a4f5 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-BR/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/pt-BR/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -517,6 +517,9 @@ + + + @@ -524,7 +527,7 @@ - + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ru/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ru/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 7bbe68f561..ea8473d7eb 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/ru/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/ru/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/sv/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/sv/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 962d3d896c..3b4a0e920b 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/sv/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/sv/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - @@ -517,6 +508,9 @@ + + + @@ -524,7 +518,7 @@ - + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/tr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/tr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 3f4fdddfbb..1918f3e91e 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/tr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/tr/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -517,6 +517,9 @@ + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hans/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hans/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 4464980607..c3a4a5777d 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hans/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hans/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - @@ -454,12 +445,18 @@ + + + + + + @@ -511,6 +508,9 @@ + + + @@ -583,12 +583,18 @@ + + + + + + diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hant/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl b/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hant/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl index 931d2fdc5b..9e0c906c00 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hant/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl +++ b/src/modules/fancyzones/editor/FancyZonesEditor/loc/zh-Hant/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx.lcl @@ -334,11 +334,11 @@ - + - + - + @@ -352,15 +352,6 @@ - - - - - - - - - diff --git a/src/modules/fancyzones/lib/loc/fr/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/fr/src/modules/fancyzones/lib/Resources.resx.lcl index 7f5a792baf..2f5e8cc392 100644 --- a/src/modules/fancyzones/lib/loc/fr/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/fr/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/hu/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/hu/src/modules/fancyzones/lib/Resources.resx.lcl index eb2978502d..1449f06ea5 100644 --- a/src/modules/fancyzones/lib/loc/hu/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/hu/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/pt-BR/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/pt-BR/src/modules/fancyzones/lib/Resources.resx.lcl index 1107038180..1ef96d5836 100644 --- a/src/modules/fancyzones/lib/loc/pt-BR/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/pt-BR/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/sv/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/sv/src/modules/fancyzones/lib/Resources.resx.lcl index 2aeeb5c00b..e353e54ff7 100644 --- a/src/modules/fancyzones/lib/loc/sv/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/sv/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/tr/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/tr/src/modules/fancyzones/lib/Resources.resx.lcl index be7a3bf858..1b95b84e21 100644 --- a/src/modules/fancyzones/lib/loc/tr/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/tr/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/fancyzones/lib/loc/zh-Hans/src/modules/fancyzones/lib/Resources.resx.lcl b/src/modules/fancyzones/lib/loc/zh-Hans/src/modules/fancyzones/lib/Resources.resx.lcl index b38570441c..82fae5a660 100644 --- a/src/modules/fancyzones/lib/loc/zh-Hans/src/modules/fancyzones/lib/Resources.resx.lcl +++ b/src/modules/fancyzones/lib/loc/zh-Hans/src/modules/fancyzones/lib/Resources.resx.lcl @@ -127,6 +127,15 @@ + + + + + + + + + @@ -181,6 +190,15 @@ + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/cs/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/cs/src/modules/powerrename/ui/Resources.resx.lcl index 032c40d122..4d3db124d3 100644 --- a/src/modules/powerrename/ui/loc/cs/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/cs/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/de/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/de/src/modules/powerrename/ui/Resources.resx.lcl index 838483566c..4da04093a2 100644 --- a/src/modules/powerrename/ui/loc/de/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/de/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/es/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/es/src/modules/powerrename/ui/Resources.resx.lcl index b2cc8778ff..d5f63f7664 100644 --- a/src/modules/powerrename/ui/loc/es/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/es/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/fr/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/fr/src/modules/powerrename/ui/Resources.resx.lcl index 6e2f74d524..b0b9598637 100644 --- a/src/modules/powerrename/ui/loc/fr/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/fr/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/hu/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/hu/src/modules/powerrename/ui/Resources.resx.lcl index 3964f1fa6a..200ad13ee6 100644 --- a/src/modules/powerrename/ui/loc/hu/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/hu/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/it/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/it/src/modules/powerrename/ui/Resources.resx.lcl index 4215974c3f..87845efc61 100644 --- a/src/modules/powerrename/ui/loc/it/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/it/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/ja/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/ja/src/modules/powerrename/ui/Resources.resx.lcl index f5d15bcef0..2a2551aae5 100644 --- a/src/modules/powerrename/ui/loc/ja/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/ja/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/ko/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/ko/src/modules/powerrename/ui/Resources.resx.lcl index 6be2df18c1..aedefe13dc 100644 --- a/src/modules/powerrename/ui/loc/ko/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/ko/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/nl/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/nl/src/modules/powerrename/ui/Resources.resx.lcl index 01dfbad905..94be2d5573 100644 --- a/src/modules/powerrename/ui/loc/nl/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/nl/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/pl/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/pl/src/modules/powerrename/ui/Resources.resx.lcl index 87903b28f8..c84b43d54a 100644 --- a/src/modules/powerrename/ui/loc/pl/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/pl/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/pt-BR/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/pt-BR/src/modules/powerrename/ui/Resources.resx.lcl index 7c4de3491c..167b38f9e5 100644 --- a/src/modules/powerrename/ui/loc/pt-BR/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/pt-BR/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/pt-PT/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/pt-PT/src/modules/powerrename/ui/Resources.resx.lcl index eab1e76390..47774644d7 100644 --- a/src/modules/powerrename/ui/loc/pt-PT/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/pt-PT/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/ru/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/ru/src/modules/powerrename/ui/Resources.resx.lcl index dc9bfe8a67..2caa1a967e 100644 --- a/src/modules/powerrename/ui/loc/ru/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/ru/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/sv/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/sv/src/modules/powerrename/ui/Resources.resx.lcl index 5222ec021c..141a37fc55 100644 --- a/src/modules/powerrename/ui/loc/sv/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/sv/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/tr/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/tr/src/modules/powerrename/ui/Resources.resx.lcl index 0a049e4953..2f8d3e8fb3 100644 --- a/src/modules/powerrename/ui/loc/tr/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/tr/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/zh-Hans/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/zh-Hans/src/modules/powerrename/ui/Resources.resx.lcl index 461b6948d9..3ab95203cd 100644 --- a/src/modules/powerrename/ui/loc/zh-Hans/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/zh-Hans/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/powerrename/ui/loc/zh-Hant/src/modules/powerrename/ui/Resources.resx.lcl b/src/modules/powerrename/ui/loc/zh-Hant/src/modules/powerrename/ui/Resources.resx.lcl index d520b17748..6ed9815d90 100644 --- a/src/modules/powerrename/ui/loc/zh-Hant/src/modules/powerrename/ui/Resources.resx.lcl +++ b/src/modules/powerrename/ui/loc/zh-Hant/src/modules/powerrename/ui/Resources.resx.lcl @@ -157,6 +157,21 @@ + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/cs/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/cs/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index ac6f923487..e84bc20e7c 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/cs/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/cs/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/de/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/de/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 52bf283e76..99165e0229 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/de/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/de/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/es/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/es/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index c660058033..d46c40328d 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/es/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/es/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/fr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/fr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 12b7d52522..604ee42f95 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/fr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/fr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -436,6 +436,9 @@ + + + @@ -607,12 +610,18 @@ + + + + + + @@ -2875,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/hu/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/hu/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index d3be99c5a0..f5aec0aa0a 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/hu/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/hu/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -436,6 +436,9 @@ + + + @@ -607,12 +610,18 @@ + + + + + + @@ -2875,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/it/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/it/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index ccc49ee9e0..870730d792 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/it/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/it/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ja/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ja/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 24b096d659..a83445ca00 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ja/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ja/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ko/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ko/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index f5da45e20b..4f90384157 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ko/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ko/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/nl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/nl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 023ffa6717..5c9fd49bc8 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/nl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/nl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 47910905a0..ca4f8cddb4 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pl/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-BR/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-BR/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 89628b1717..d4e9f221f8 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-BR/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-BR/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -433,6 +433,15 @@ + + + + + + + + + @@ -598,6 +607,24 @@ + + + + + + + + + + + + + + + + + + @@ -2857,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-PT/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-PT/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index c016ae79b6..abb4171e13 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-PT/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/pt-PT/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ru/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ru/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index d8268e24d3..593431f99f 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ru/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/ru/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/sv/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/sv/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 8fce4a428f..7ce4a589c5 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/sv/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/sv/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -436,6 +436,9 @@ + + + @@ -455,7 +458,7 @@ - + @@ -607,12 +610,18 @@ + + + + + + @@ -2875,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/tr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/tr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index f8f46fe3b6..faba75cea1 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/tr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/tr/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -211,12 +211,18 @@ + + + + + + @@ -232,8 +238,8 @@ - - + + @@ -418,7 +424,7 @@ - + @@ -430,6 +436,9 @@ + + + @@ -601,12 +610,18 @@ + + + + + + @@ -2869,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hans/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hans/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index f0af6410c1..043c92045c 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hans/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hans/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -211,12 +211,18 @@ + + + + + + @@ -232,8 +238,8 @@ - - + + @@ -418,7 +424,7 @@ - + @@ -430,6 +436,9 @@ + + + @@ -601,12 +610,18 @@ + + + + + + @@ -2869,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hant/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hant/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl index 295ee1f59d..fb37184d16 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hant/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/loc/zh-Hant/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw.lcl @@ -424,7 +424,7 @@ - + @@ -2884,6 +2884,27 @@ + + + + + + + + + + + + + + + + + + + + + From ed21dba8f0afe30cfbdd7ead2dc6a3f7cba9bd8d Mon Sep 17 00:00:00 2001 From: Niels Laute Date: Mon, 5 Apr 2021 16:26:24 +0200 Subject: [PATCH 71/82] Removed manual cleartype (#10568) Co-authored-by: Niels Laute --- .../PowerLauncher/LauncherControl.xaml | 8 +------- .../launcher/PowerLauncher/MainWindow.xaml | 2 -- .../launcher/PowerLauncher/ResultList.xaml | 18 ++++++------------ 3 files changed, 7 insertions(+), 21 deletions(-) diff --git a/src/modules/launcher/PowerLauncher/LauncherControl.xaml b/src/modules/launcher/PowerLauncher/LauncherControl.xaml index 82e0843d70..8788a2ce28 100644 --- a/src/modules/launcher/PowerLauncher/LauncherControl.xaml +++ b/src/modules/launcher/PowerLauncher/LauncherControl.xaml @@ -55,9 +55,7 @@ + Background="{Binding Background, ElementName=PART_ContentHost}"> @@ -113,7 +111,6 @@ FontSize="24" Style="{StaticResource QueryTextBoxStyle}" Tag="{x:Static p:Resources.startTyping}" - RenderOptions.ClearTypeHint="Enabled" /> diff --git a/src/modules/launcher/PowerLauncher/MainWindow.xaml b/src/modules/launcher/PowerLauncher/MainWindow.xaml index fda097c54e..6a267a733c 100644 --- a/src/modules/launcher/PowerLauncher/MainWindow.xaml +++ b/src/modules/launcher/PowerLauncher/MainWindow.xaml @@ -10,8 +10,6 @@ Topmost="True" SizeToContent="Height" ResizeMode="NoResize" - TextOptions.TextRenderingMode="ClearType" - RenderOptions.ClearTypeHint="Enabled" WindowStyle="None" WindowStartupLocation="Manual" AllowDrop="True" diff --git a/src/modules/launcher/PowerLauncher/ResultList.xaml b/src/modules/launcher/PowerLauncher/ResultList.xaml index 320044ee71..e805e10476 100644 --- a/src/modules/launcher/PowerLauncher/ResultList.xaml +++ b/src/modules/launcher/PowerLauncher/ResultList.xaml @@ -209,13 +209,11 @@ Style="{DynamicResource CollapsableTextblock}" FontWeight="Bold" Text="{Binding Result.ToolTipData.Title}" - TextWrapping="Wrap" - RenderOptions.ClearTypeHint="Enabled" /> + TextWrapping="Wrap" /> + TextWrapping="Wrap" /> @@ -235,8 +233,7 @@ FontWeight="SemiBold" FontSize="20" Margin="0,0,0,-2" - VerticalAlignment="Bottom" - RenderOptions.ClearTypeHint="Enabled"/> + VerticalAlignment="Bottom"/> + VerticalAlignment="Top"/> + Text="{Binding Title}"/> @@ -293,8 +288,7 @@ AutomationProperties.Name="{x:Static p:Resources.ContextMenuIcon}" FontFamily="{Binding FontFamily}" FontSize="16" - Text="{Binding Glyph}" - RenderOptions.ClearTypeHint="Enabled"/> + Text="{Binding Glyph}"/> From 1c8b7a5ae5a6aa27f86adab3c5eddfd20dbf38c4 Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Mon, 5 Apr 2021 17:57:22 +0300 Subject: [PATCH 72/82] Do not load plugin when it is disabled (#10515) --- .../launcher/PowerLauncher/App.xaml.cs | 7 +- .../PowerLauncher/Plugin/PluginManager.cs | 34 +++-- .../PowerLauncher/Plugin/PluginsLoader.cs | 91 ----------- .../Properties/Resources.Designer.cs | 18 +++ .../PowerLauncher/Properties/Resources.resx | 6 + .../{SettingsWatcher.cs => SettingsReader.cs} | 38 ++--- src/modules/launcher/Wox.Plugin/PluginPair.cs | 142 ++++++++++++++++++ .../Properties/Resources.Designer.cs | 18 +++ .../Wox.Plugin/Properties/Resources.resx | 6 + .../launcher/Wox.Test/PluginManagerTest.cs | 4 +- .../launcher/Wox.Test/QueryBuilderTest.cs | 21 ++- 11 files changed, 238 insertions(+), 147 deletions(-) delete mode 100644 src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs rename src/modules/launcher/PowerLauncher/{SettingsWatcher.cs => SettingsReader.cs} (87%) diff --git a/src/modules/launcher/PowerLauncher/App.xaml.cs b/src/modules/launcher/PowerLauncher/App.xaml.cs index 3398f3bc45..25daee7578 100644 --- a/src/modules/launcher/PowerLauncher/App.xaml.cs +++ b/src/modules/launcher/PowerLauncher/App.xaml.cs @@ -37,7 +37,7 @@ namespace PowerLauncher private ThemeManager _themeManager; private SettingWindowViewModel _settingsVM; private StringMatcher _stringMatcher; - private SettingsWatcher _settingsWatcher; + private SettingsReader _settingsReader; [STAThread] public static void Main() @@ -103,6 +103,9 @@ namespace PowerLauncher _mainVM = new MainViewModel(_settings); _mainWindow = new MainWindow(_settings, _mainVM); API = new PublicAPIInstance(_settingsVM, _mainVM, _themeManager); + _settingsReader = new SettingsReader(_settings, _themeManager); + _settingsReader.ReadSettings(); + PluginManager.InitializePlugins(API); Current.MainWindow = _mainWindow; @@ -113,7 +116,7 @@ namespace PowerLauncher RegisterExitEvents(); - _settingsWatcher = new SettingsWatcher(_settings, _themeManager); + _settingsReader.ReadSettingsOnChange(); _mainVM.MainWindowVisibility = Visibility.Visible; _mainVM.ColdStartFix(); diff --git a/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs b/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs index 12e2a3cfd7..9b70756d61 100644 --- a/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs +++ b/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs @@ -10,6 +10,7 @@ using System.IO.Abstractions; using System.Linq; using System.Reflection; using System.Threading.Tasks; +using PowerLauncher.Properties; using Wox.Infrastructure; using Wox.Infrastructure.Storage; using Wox.Plugin; @@ -49,7 +50,10 @@ namespace PowerLauncher.Plugin { if (_allPlugins == null) { - _allPlugins = PluginsLoader.Plugins(PluginConfig.Parse(Directories)); + _allPlugins = PluginConfig.Parse(Directories) + .Where(x => x.Language.ToUpperInvariant() == AllowedLanguage.CSharp) + .Select(x => new PluginPair(x)) + .ToList(); } } } @@ -119,23 +123,15 @@ namespace PowerLauncher.Plugin var failedPlugins = new ConcurrentQueue(); Parallel.ForEach(AllPlugins, pair => { - try + if (pair.Metadata.Disabled) { - var milliseconds = Stopwatch.Debug($"PluginManager.InitializePlugins - Init method time cost for <{pair.Metadata.Name}>", () => - { - pair.Plugin.Init(new PluginInitContext - { - CurrentPluginMetadata = pair.Metadata, - API = API, - }); - }); - pair.Metadata.InitTime += milliseconds; - Log.Info($"Total init cost for <{pair.Metadata.Name}> is <{pair.Metadata.InitTime}ms>", MethodBase.GetCurrentMethod().DeclaringType); + return; } - catch (Exception e) + + pair.LoadPlugin(API); + + if (!pair.IsPluginLoaded) { - Log.Exception($"Fail to Init plugin: {pair.Metadata.Name}", e, MethodBase.GetCurrentMethod().DeclaringType); - pair.Metadata.Disabled = true; failedPlugins.Enqueue(pair); } }); @@ -145,7 +141,8 @@ namespace PowerLauncher.Plugin if (failedPlugins.Any()) { var failed = string.Join(",", failedPlugins.Select(x => x.Metadata.Name)); - API.ShowMsg($"Fail to Init Plugins", $"Plugins: {failed} - fail to load and would be disabled, please contact plugin creator for help", string.Empty, false); + var description = string.Format(CultureInfo.CurrentCulture, Resources.FailedToInitializePluginsDescription, failed); + API.ShowMsg(Resources.FailedToInitializePluginsTitle, description, string.Empty, false); } } @@ -162,6 +159,11 @@ namespace PowerLauncher.Plugin throw new ArgumentNullException(nameof(pair)); } + if (!pair.IsPluginLoaded) + { + return new List(); + } + try { List results = null; diff --git a/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs b/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs deleted file mode 100644 index 2b51e114e0..0000000000 --- a/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs +++ /dev/null @@ -1,91 +0,0 @@ -// 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 System.Reflection; -using System.Runtime.Loader; -using Wox.Infrastructure; -using Wox.Plugin; -using Wox.Plugin.Logger; - -namespace PowerLauncher.Plugin -{ - public static class PluginsLoader - { - public const string PATH = "PATH"; - - public static List Plugins(List metadatas) - { - var csharpPlugins = CSharpPlugins(metadatas).ToList(); - return csharpPlugins; - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Suppressing this to enable FxCop. We are logging the exception, and going forward general exceptions should not be caught")] - public static IEnumerable CSharpPlugins(List source) - { - var plugins = new List(); - var metadatas = source - .Where(o => o.Language.ToUpperInvariant() == AllowedLanguage.CSharp) - .ToList(); - - foreach (var metadata in metadatas) - { - var milliseconds = Stopwatch.Debug($"PluginsLoader.CSharpPlugins - Constructor init cost for {metadata.Name}", () => - { -#if DEBUG - var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath); - var types = assembly.GetTypes(); - var type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin))); - var plugin = (IPlugin)Activator.CreateInstance(type); -#else - Assembly assembly; - try - { - assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath); - } - catch (Exception e) - { - Log.Exception($"Couldn't load assembly for {metadata.Name}", e, MethodBase.GetCurrentMethod().DeclaringType); - return; - } - - var types = assembly.GetTypes(); - Type type; - try - { - type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin))); - } - catch (InvalidOperationException e) - { - Log.Exception($"Can't find class implement IPlugin for <{metadata.Name}>", e, MethodBase.GetCurrentMethod().DeclaringType); - return; - } - - IPlugin plugin; - try - { - plugin = (IPlugin)Activator.CreateInstance(type); - } - catch (Exception e) - { - Log.Exception($"Can't create instance for <{metadata.Name}>", e, MethodBase.GetCurrentMethod().DeclaringType); - return; - } -#endif - PluginPair pair = new PluginPair - { - Plugin = plugin, - Metadata = metadata, - }; - plugins.Add(pair); - }); - metadata.InitTime += milliseconds; - } - - return plugins; - } - } -} diff --git a/src/modules/launcher/PowerLauncher/Properties/Resources.Designer.cs b/src/modules/launcher/PowerLauncher/Properties/Resources.Designer.cs index 589dffd5ca..e67df7b86b 100644 --- a/src/modules/launcher/PowerLauncher/Properties/Resources.Designer.cs +++ b/src/modules/launcher/PowerLauncher/Properties/Resources.Designer.cs @@ -132,6 +132,24 @@ namespace PowerLauncher.Properties { } } + /// + /// Looks up a localized string similar to Plugins: {0} - fail to load and would be disabled, please contact plugins creator for help. + /// + public static string FailedToInitializePluginsDescription { + get { + return ResourceManager.GetString("FailedToInitializePluginsDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Fail to initialize plugins. + /// + public static string FailedToInitializePluginsTitle { + get { + return ResourceManager.GetString("FailedToInitializePluginsTitle", resourceCulture); + } + } + /// /// Looks up a localized string similar to Last execution time: {0}. /// diff --git a/src/modules/launcher/PowerLauncher/Properties/Resources.resx b/src/modules/launcher/PowerLauncher/Properties/Resources.resx index e0b6647201..6353c2dea9 100644 --- a/src/modules/launcher/PowerLauncher/Properties/Resources.resx +++ b/src/modules/launcher/PowerLauncher/Properties/Resources.resx @@ -185,4 +185,10 @@ Settings will be reset to default and program will continue to function. + + Plugins: {0} - fail to load and would be disabled, please contact plugins creator for help + + + Fail to initialize plugins + \ No newline at end of file diff --git a/src/modules/launcher/PowerLauncher/SettingsWatcher.cs b/src/modules/launcher/PowerLauncher/SettingsReader.cs similarity index 87% rename from src/modules/launcher/PowerLauncher/SettingsWatcher.cs rename to src/modules/launcher/PowerLauncher/SettingsReader.cs index 31bcaaf4d8..632334f1ba 100644 --- a/src/modules/launcher/PowerLauncher/SettingsWatcher.cs +++ b/src/modules/launcher/PowerLauncher/SettingsReader.cs @@ -22,29 +22,23 @@ using JsonException = System.Text.Json.JsonException; namespace PowerLauncher { // Watch for /Local/Microsoft/PowerToys/Launcher/Settings.json changes - public class SettingsWatcher : BaseModel + public class SettingsReader : BaseModel { private readonly ISettingsUtils _settingsUtils; private const int MaxRetries = 10; - private static readonly object _watcherSyncObject = new object(); - private readonly IFileSystemWatcher _watcher; + private static readonly object _readSyncObject = new object(); private readonly PowerToysRunSettings _settings; - private readonly ThemeManager _themeManager; - public SettingsWatcher(PowerToysRunSettings settings, ThemeManager themeManager) + private IFileSystemWatcher _watcher; + + public SettingsReader(PowerToysRunSettings settings, ThemeManager themeManager) { _settingsUtils = new SettingsUtils(); _settings = settings; _themeManager = themeManager; - // Set up watcher - _watcher = Microsoft.PowerToys.Settings.UI.Library.Utilities.Helper.GetFileWatcher(PowerLauncherSettings.ModuleName, "settings.json", OverloadSettings); - - // Load initial settings file - OverloadSettings(); - // Apply theme at startup _themeManager.ChangeTheme(_settings.Theme, true); } @@ -61,9 +55,14 @@ namespace PowerLauncher } } - public void OverloadSettings() + public void ReadSettingsOnChange() { - Monitor.Enter(_watcherSyncObject); + _watcher = Microsoft.PowerToys.Settings.UI.Library.Utilities.Helper.GetFileWatcher(PowerLauncherSettings.ModuleName, "settings.json", ReadSettings); + } + + public void ReadSettings() + { + Monitor.Enter(_readSyncObject); var retry = true; var retryCount = 0; while (retry) @@ -86,16 +85,7 @@ namespace PowerLauncher foreach (var setting in overloadSettings.Plugins) { var plugin = PluginManager.AllPlugins.FirstOrDefault(x => x.Metadata.ID == setting.Id); - if (plugin != null) - { - plugin.Metadata.Disabled = setting.Disabled; - plugin.Metadata.ActionKeyword = setting.ActionKeyword; - plugin.Metadata.IsGlobal = setting.IsGlobal; - if (plugin.Plugin is ISettingProvider) - { - (plugin.Plugin as ISettingProvider).UpdateSettings(setting); - } - } + plugin?.Update(setting, App.API); } } @@ -168,7 +158,7 @@ namespace PowerLauncher } } - Monitor.Exit(_watcherSyncObject); + Monitor.Exit(_readSyncObject); } private static string ConvertHotkey(HotkeySettings hotkey) diff --git a/src/modules/launcher/Wox.Plugin/PluginPair.cs b/src/modules/launcher/Wox.Plugin/PluginPair.cs index 6bb94815b0..2fe4a821ce 100644 --- a/src/modules/launcher/Wox.Plugin/PluginPair.cs +++ b/src/modules/launcher/Wox.Plugin/PluginPair.cs @@ -3,6 +3,14 @@ // See the LICENSE file in the project root for more information. using System; +using System.Diagnostics; +using System.Globalization; +using System.Linq; +using System.Reflection; +using System.Runtime.Loader; +using Microsoft.PowerToys.Settings.UI.Library; +using Wox.Plugin.Logger; +using Wox.Plugin.Properties; namespace Wox.Plugin { @@ -12,6 +20,76 @@ namespace Wox.Plugin public PluginMetadata Metadata { get; internal set; } + public PluginPair(PluginMetadata metadata) + { + this.Metadata = metadata; + } + + public bool IsPluginLoaded { get; set; } + + public void LoadPlugin(IPublicAPI api) + { + if (Metadata.Disabled) + { + Log.Info($"Do not load {Metadata.Name} as it is disabled.", GetType()); + return; + } + + if (IsPluginLoaded) + { + Log.Info($"Plugin {Metadata.Name} is already loaded", GetType()); + return; + } + + var stopWatch = new Stopwatch(); + stopWatch.Start(); + if (!CreatePluginInstance()) + { + return; + } + + if (!InitPlugin(api)) + { + return; + } + + stopWatch.Stop(); + IsPluginLoaded = true; + Metadata.InitTime += stopWatch.ElapsedMilliseconds; + Log.Info($"Total load cost for <{Metadata.Name}> is <{Metadata.InitTime}ms>", GetType()); + return; + } + + public void Update(PowerLauncherPluginSettings setting, IPublicAPI api) + { + if (setting == null || api == null) + { + return; + } + + if (Metadata.Disabled && !setting.Disabled) + { + Metadata.Disabled = false; + LoadPlugin(api); + if (!IsPluginLoaded) + { + var title = string.Format(CultureInfo.CurrentCulture, Resources.FailedToLoadPluginTitle, Metadata.Name); + api.ShowMsg(title, Resources.FailedToLoadPluginDescription, string.Empty, false); + } + } + else + { + Metadata.Disabled = setting.Disabled; + } + + Metadata.ActionKeyword = setting.ActionKeyword; + Metadata.IsGlobal = setting.IsGlobal; + if (Plugin is ISettingProvider) + { + (Plugin as ISettingProvider).UpdateSettings(setting); + } + } + public override string ToString() { return Metadata.Name; @@ -36,5 +114,69 @@ namespace Wox.Plugin var hashcode = Metadata.ID?.GetHashCode(StringComparison.Ordinal) ?? 0; return hashcode; } + + private bool CreatePluginInstance() + { + try + { + _assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(Metadata.ExecuteFilePath); + } +#pragma warning disable CA1031 // Do not catch general exception types + catch (Exception e) +#pragma warning restore CA1031 // Do not catch general exception types + { + Log.Exception($"Couldn't load assembly for {Metadata.Name}", e, MethodBase.GetCurrentMethod().DeclaringType); + return false; + } + + var types = _assembly.GetTypes(); + Type type; + try + { + type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin))); + } + catch (InvalidOperationException e) + { + Log.Exception($"Can't find class implement IPlugin for <{Metadata.Name}>", e, MethodBase.GetCurrentMethod().DeclaringType); + return false; + } + + try + { + Plugin = (IPlugin)Activator.CreateInstance(type); + } +#pragma warning disable CA1031 // Do not catch general exception types + catch (Exception e) +#pragma warning restore CA1031 // Do not catch general exception types + { + Log.Exception($"Can't create instance for <{Metadata.Name}>", e, MethodBase.GetCurrentMethod().DeclaringType); + return false; + } + + return true; + } + + private bool InitPlugin(IPublicAPI api) + { + try + { + Plugin.Init(new PluginInitContext + { + CurrentPluginMetadata = Metadata, + API = api, + }); + } +#pragma warning disable CA1031 // Do not catch general exception types + catch (Exception e) +#pragma warning restore CA1031 // Do not catch general exception types + { + Log.Exception($"Fail to Init plugin: {Metadata.Name}", e, GetType()); + return false; + } + + return true; + } + + private Assembly _assembly; } } diff --git a/src/modules/launcher/Wox.Plugin/Properties/Resources.Designer.cs b/src/modules/launcher/Wox.Plugin/Properties/Resources.Designer.cs index 9d6b31a320..13e4320c1e 100644 --- a/src/modules/launcher/Wox.Plugin/Properties/Resources.Designer.cs +++ b/src/modules/launcher/Wox.Plugin/Properties/Resources.Designer.cs @@ -59,5 +59,23 @@ namespace Wox.Plugin.Properties { resourceCulture = value; } } + + /// + /// Looks up a localized string similar to Please contact plugin creator for help. + /// + public static string FailedToLoadPluginDescription { + get { + return ResourceManager.GetString("FailedToLoadPluginDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Fail to Load {0} Plugin. + /// + public static string FailedToLoadPluginTitle { + get { + return ResourceManager.GetString("FailedToLoadPluginTitle", resourceCulture); + } + } } } diff --git a/src/modules/launcher/Wox.Plugin/Properties/Resources.resx b/src/modules/launcher/Wox.Plugin/Properties/Resources.resx index 1af7de150c..469e7716b1 100644 --- a/src/modules/launcher/Wox.Plugin/Properties/Resources.resx +++ b/src/modules/launcher/Wox.Plugin/Properties/Resources.resx @@ -117,4 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Please contact plugin creator for help + + + Fail to Load {0} Plugin + \ No newline at end of file diff --git a/src/modules/launcher/Wox.Test/PluginManagerTest.cs b/src/modules/launcher/Wox.Test/PluginManagerTest.cs index ac8b093384..ae0bfb47fc 100644 --- a/src/modules/launcher/Wox.Test/PluginManagerTest.cs +++ b/src/modules/launcher/Wox.Test/PluginManagerTest.cs @@ -45,10 +45,10 @@ namespace Wox.Test var results = new List() { result }; var pluginMock = new Mock(); pluginMock.Setup(r => r.Query(query)).Returns(results); - var pluginPair = new PluginPair + var pluginPair = new PluginPair(metadata) { Plugin = pluginMock.Object, - Metadata = metadata, + IsPluginLoaded = true, }; // Act diff --git a/src/modules/launcher/Wox.Test/QueryBuilderTest.cs b/src/modules/launcher/Wox.Test/QueryBuilderTest.cs index fee8756909..40707822d3 100644 --- a/src/modules/launcher/Wox.Test/QueryBuilderTest.cs +++ b/src/modules/launcher/Wox.Test/QueryBuilderTest.cs @@ -28,10 +28,7 @@ namespace Wox.Test // Arrange PluginManager.SetAllPlugins(new List() { - new PluginPair - { - Metadata = new PluginMetadata() { ActionKeyword = ">" }, - }, + new PluginPair(new PluginMetadata() { ActionKeyword = ">" }), }); string searchQuery = "> file.txt file2 file3"; @@ -51,7 +48,7 @@ namespace Wox.Test string searchQuery = "file.txt file2 file3"; PluginManager.SetAllPlugins(new List() { - new PluginPair { Metadata = new PluginMetadata() { Disabled = false, IsGlobal = true } }, + new PluginPair(new PluginMetadata() { Disabled = false, IsGlobal = true }), }); // Act @@ -66,7 +63,7 @@ namespace Wox.Test public void QueryBuildShouldGenerateSameSearchQueryWithOrWithoutSpaceAfterActionKeyword() { // Arrange - var plugin = new PluginPair { Metadata = new PluginMetadata() { ActionKeyword = "a" } }; + var plugin = new PluginPair(new PluginMetadata() { ActionKeyword = "a" }); PluginManager.SetAllPlugins(new List() { plugin, @@ -93,8 +90,8 @@ namespace Wox.Test { // Arrange string searchQuery = "abcdefgh"; - var firstPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "ab", ID = "plugin1" } }; - var secondPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "abcd", ID = "plugin2" } }; + var firstPlugin = new PluginPair(new PluginMetadata { ActionKeyword = "ab", ID = "plugin1" }); + var secondPlugin = new PluginPair(new PluginMetadata { ActionKeyword = "abcd", ID = "plugin2" }); PluginManager.SetAllPlugins(new List() { firstPlugin, @@ -117,8 +114,8 @@ namespace Wox.Test { // Arrange string searchQuery = "abcd efgh"; - var firstPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "ab", ID = "plugin1" } }; - var secondPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "abcd", ID = "plugin2" } }; + var firstPlugin = new PluginPair(new PluginMetadata { ActionKeyword = "ab", ID = "plugin1" }); + var secondPlugin = new PluginPair(new PluginMetadata { ActionKeyword = "abcd", ID = "plugin2" }); PluginManager.SetAllPlugins(new List() { firstPlugin, @@ -142,8 +139,8 @@ namespace Wox.Test { // Arrange string searchQuery = "!efgh"; - var firstPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "!", ID = "plugin1" } }; - var secondPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "!", ID = "plugin2" } }; + var firstPlugin = new PluginPair(new PluginMetadata { ActionKeyword = "!", ID = "plugin1" }); + var secondPlugin = new PluginPair(new PluginMetadata { ActionKeyword = "!", ID = "plugin2" }); PluginManager.SetAllPlugins(new List() { firstPlugin, From 68e00ed2085cdf711420165b8aeeb1035338f68f Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Mon, 5 Apr 2021 10:44:16 -0700 Subject: [PATCH 73/82] Tweaking bug report template (#10558) * Tweaking bug report template Tracking #10450 * Update bug_report.yml * Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 36 +++++++++++++-------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index c19387ebd3..29e960b5c9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,4 +1,4 @@ -name: "Bug report 🐛" +name: "🐛 Bug report" description: Report errors or unexpected behavior title: '' labels: @@ -23,15 +23,12 @@ body: validations: required: true -- type: dropdown +- type: checkboxes attributes: label: Running as admin description: Are you running PowerToys as Admin? options: - - 'No' - - 'Yes' - validations: - required: true + - label: Yes - type: dropdown attributes: @@ -51,22 +48,12 @@ body: - Shortcut Guide - SVG Preview - SVG Thumbnail - - Installer + - Settings + - Welcome / PowerToys Tour window - System tray interaction - - Settings window + - Installer validations: required: true - -- type: textarea - attributes: - label: Other Software - description: If you're reporting a bug about our interaction with other software, what software? What versions? - placeholder: | - vim 8.2 (inside WSL) - OpenSSH_for_Windows_8.1p1 - My Cool Application v0.3 (include a code snippet if it would help!) - validations: - required: false - type: textarea attributes: @@ -88,3 +75,14 @@ body: placeholder: What happened instead? validations: required: true + +- type: textarea + attributes: + label: Other Software + description: If you're reporting a bug about our interaction with other software, what software? What versions? + placeholder: | + vim 8.2 (inside WSL) + OpenSSH_for_Windows_8.1p1 + My Cool Application v0.3 (include a code snippet if it would help!) + validations: + required: false From bb5deffdd4af8b529abde6b159530a7cd5bcc38a Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Mon, 5 Apr 2021 10:45:54 -0700 Subject: [PATCH 74/82] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 29e960b5c9..c998e0c8fb 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -28,7 +28,7 @@ body: label: Running as admin description: Are you running PowerToys as Admin? options: - - label: Yes + - label: "Yes" - type: dropdown attributes: From fc2189fe0ae043333f8496eda98185a755d5a2d3 Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Mon, 5 Apr 2021 10:47:28 -0700 Subject: [PATCH 75/82] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index c998e0c8fb..ceb5eef2e1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -11,8 +11,6 @@ body: attributes: value: | Please make sure to [search for existing issues](https://github.com/microsoft/PowerToys/issues) before filing a new one! - - We highly suggest including a screenshots and a bug report log (System tray->Report bug). To include, paste them into the markdown editor below the form or follow up with a separate comment. - type: input attributes: label: Microsoft PowerToys version @@ -58,6 +56,7 @@ body: - type: textarea attributes: label: Steps to reproduce + description: We highly suggest including a screenshots and a bug report log (System tray->Report bug). To include, paste them into the markdown editor below the form or follow up with a separate comment. placeholder: Tell us the steps required to trigger your bug. validations: required: true From e36f08db3a22c1a653eee0a59a15b9f42310012d Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Mon, 5 Apr 2021 12:48:02 -0700 Subject: [PATCH 76/82] More targetted links (#10604) --- .../Microsoft.PowerToys.Settings.UI/Views/GeneralPage.xaml | 4 ++-- .../Views/PowerPreviewPage.xaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/GeneralPage.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/GeneralPage.xaml index 50d9348408..0103991272 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/GeneralPage.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/GeneralPage.xaml @@ -195,11 +195,11 @@ - + - + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/PowerPreviewPage.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/PowerPreviewPage.xaml index 44f592e57e..2f2097f3d0 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/PowerPreviewPage.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Views/PowerPreviewPage.xaml @@ -123,7 +123,7 @@ - + From 29ed73ba92b18528dd57a9bd8bef10966a54331b Mon Sep 17 00:00:00 2001 From: Aaron Junker Date: Tue, 6 Apr 2021 01:36:11 +0200 Subject: [PATCH 77/82] Dev/aaron junker/localisation GitHub template (#10443) * Create translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml * Create test.yml * Update test.yml * Update test.yml * Update test.yml * Update test.yml * Delete test.yml * Delete translation_issue.md * Update translation_issue.yml * Update translation_issue.yml * Update translation_issue.yml Co-authored-by: Clint Rutkas --- .github/ISSUE_TEMPLATE/translation_issue.md | 30 --------- .github/ISSUE_TEMPLATE/translation_issue.yml | 71 ++++++++++++++++++++ 2 files changed, 71 insertions(+), 30 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/translation_issue.md create mode 100644 .github/ISSUE_TEMPLATE/translation_issue.yml diff --git a/.github/ISSUE_TEMPLATE/translation_issue.md b/.github/ISSUE_TEMPLATE/translation_issue.md deleted file mode 100644 index 9aede82c0f..0000000000 --- a/.github/ISSUE_TEMPLATE/translation_issue.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -name: 📖 Localization/Translation issue -about: Report incorrect translations. -title: '' -labels: Issue-Bug,Area-Localization,Issue-Translation,Triage-Needed -assignees: '' - ---- - -## ℹ Computer information - -- PowerToys version: -- PowerToy utility: -- Language: - -## 📝 Provide where the issue is / 📷 Screenshots - -_Are there any useful screenshots? WinKey+Shift+S and then just paste them directly into the form_ - -### ❌ Actual phrase(s) - -_What is there?_ - -### ✔️ Expected phrase(s) - -_What do you expect?_ - -### ℹ Why is the current translation wrong - -_If it is opinion based issue, why do you feel this is incorrect? Example: term is outdated_ diff --git a/.github/ISSUE_TEMPLATE/translation_issue.yml b/.github/ISSUE_TEMPLATE/translation_issue.yml new file mode 100644 index 0000000000..05f9289fc4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/translation_issue.yml @@ -0,0 +1,71 @@ +name: "🌐 Localization/Translation issue" +description: Report incorrect translations. +title: '' +labels: +- Issue-Bug +- Area-Localization +- Issue-Translation +- Triage-Needed +assignees: '' +issue_body: true +body: +- type: markdown + attributes: + value: | + Please make sure to [search for existing issues](https://github.com/microsoft/PowerTOys/issues) before filing a new one! +- type: input + attributes: + label: Microsoft PowerToys version + placeholder: "0.33.1" + description: | + Hover over system tray icon or look at Settings + validations: + required: true +- type: dropdown + attributes: + label: Utility with translation issue + description: | + Please include a screenshot as that is extremely helpful. To include, paste them into the markdown editor below the form or follow up with a separate comment. + options: + - General + - ColorPicker + - FancyZones + - FancyZones Editor + - Image Resizer + - Keyboard Manager + - MD Preview + - PowerRename + - PowerToys Run + - Shortcut Guide + - SVG Preview + - SVG Thumbnail + - Settings + - Welcome / PowerToys Tour window + - System tray interaction + - Installer + validations: + required: true +- type: input + attributes: + label: 🌐 Language affected + placeholder: "German" + validations: + required: true +- type: textarea + attributes: + label: ❌ Actual phrase(s) + placeholder: What is there? + validations: + required: true +- type: textarea + attributes: + label: ✔️ Expected phrase(s) + placeholder: What was expected? + validations: + required: true +- type: textarea + attributes: + label: ℹ Why is the current translation wrong + placeholder: Why do you feel this is incorrect? + validations: + required: true From bb5d4dfbf0456d4096c884ff54a1f4c130283ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Sto=C5=A1i=C4=87?= Date: Wed, 7 Apr 2021 09:30:35 +0200 Subject: [PATCH 78/82] Fixed an issue with zone sizes (#10609) --- src/modules/fancyzones/lib/ZoneSet.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/fancyzones/lib/ZoneSet.cpp b/src/modules/fancyzones/lib/ZoneSet.cpp index 4ce1f28fe8..1f4dd7376a 100644 --- a/src/modules/fancyzones/lib/ZoneSet.cpp +++ b/src/modules/fancyzones/lib/ZoneSet.cpp @@ -882,9 +882,9 @@ bool ZoneSet::CalculateGridZones(Rect workArea, FancyZonesDataTypes::GridLayoutI long bottom = rowInfo[maxRow].End; top += row == 0 ? spacing : spacing / 2; - bottom -= row == gridLayoutInfo.rows() - 1 ? spacing : spacing / 2; + bottom -= maxRow == gridLayoutInfo.rows() - 1 ? spacing : spacing / 2; left += col == 0 ? spacing : spacing / 2; - right -= col == gridLayoutInfo.columns() - 1 ? spacing : spacing / 2; + right -= maxCol == gridLayoutInfo.columns() - 1 ? spacing : spacing / 2; auto zone = MakeZone(RECT{ left, top, right, bottom }, i); if (zone) From 304ba8c6bbf274696bc891775de2899463aa492c Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Wed, 7 Apr 2021 02:53:45 -0700 Subject: [PATCH 79/82] file explorer comments (#10628) --- .../Strings/en-us/Resources.resw | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw index 6638419d68..90b78b431a 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw @@ -135,7 +135,7 @@ File Explorer add-ons - Product name: Navigation view item name for File Explorer Preview + Product name: Navigation view item name for File Explorer. Please use File Explorer as in the context of File Explorer in Windows FancyZones @@ -668,6 +668,7 @@ File Explorer + Use same translation as Windows does for File Explorer About Image Resizer From 353ca842ad55ae653262695fc9f50b05e6d99f46 Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Wed, 7 Apr 2021 02:54:15 -0700 Subject: [PATCH 80/82] Shift to detect nullable (#10627) --- src/settings-ui/PowerToys.Settings/MainWindow.xaml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/settings-ui/PowerToys.Settings/MainWindow.xaml.cs b/src/settings-ui/PowerToys.Settings/MainWindow.xaml.cs index f1ed6a9345..be9fdb55a8 100644 --- a/src/settings-ui/PowerToys.Settings/MainWindow.xaml.cs +++ b/src/settings-ui/PowerToys.Settings/MainWindow.xaml.cs @@ -79,7 +79,7 @@ namespace PowerToys.Settings // send IPC Message ShellPage.SetRestartAdminSndMessageCallback(msg => { - Program.GetTwoWayIPCManager().Send(msg); + Program.GetTwoWayIPCManager()?.Send(msg); isOpen = false; System.Windows.Application.Current.Shutdown(); // close application }); @@ -87,7 +87,7 @@ namespace PowerToys.Settings // send IPC Message ShellPage.SetCheckForUpdatesMessageCallback(msg => { - Program.GetTwoWayIPCManager().Send(msg); + Program.GetTwoWayIPCManager()?.Send(msg); }); // open oobe From 675ae91c29d53f1e75d67c785f86f8efb5bc6392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Sto=C5=A1i=C4=87?= Date: Wed, 7 Apr 2021 11:59:41 +0200 Subject: [PATCH 81/82] [ColorPicker] Ensure that the hotkey always works (#10542) * Fix multiple instances running * Make ColorPicker invokable from the runner * Use a local mutex * Enable running ColorPicker as standalone as well as a in PT * Add some logging * Remove newline This will happen sooner or later and is not needed in the PR * Update mutex name * Update names * Add logging --- PowerToys.sln | 3 + .../ColorPicker/ColorPicker.vcxproj | 4 + .../colorPicker/ColorPicker/dllmain.cpp | 153 ++++++++++++++++-- .../colorPicker/ColorPickerUI/App.xaml.cs | 25 ++- .../ColorPickerUI/Keyboard/KeyboardMonitor.cs | 58 +++---- 5 files changed, 194 insertions(+), 49 deletions(-) diff --git a/PowerToys.sln b/PowerToys.sln index b2be00f609..95f118b49f 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -221,6 +221,9 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SvgThumbnailProvider", "src\modules\previewpane\SvgThumbnailProvider\SvgThumbnailProvider.csproj", "{8FFE09DA-FA4F-4EE1-B3A2-AD5497FBD1AD}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ColorPicker", "src\modules\colorPicker\ColorPicker\ColorPicker.vcxproj", "{655C9AF2-18D3-4DA6-80E4-85504A7722BA}" + ProjectSection(ProjectDependencies) = postProject + {D9B8FC84-322A-4F9F-BBB9-20915C47DDFD} = {D9B8FC84-322A-4F9F-BBB9-20915C47DDFD} + EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ColorPickerUI", "src\modules\colorPicker\ColorPickerUI\ColorPickerUI.csproj", "{BA58206B-1493-4C75-BFEA-A85768A1E156}" EndProject diff --git a/src/modules/colorPicker/ColorPicker/ColorPicker.vcxproj b/src/modules/colorPicker/ColorPicker/ColorPicker.vcxproj index 49eadd424c..85728370d6 100644 --- a/src/modules/colorPicker/ColorPicker/ColorPicker.vcxproj +++ b/src/modules/colorPicker/ColorPicker/ColorPicker.vcxproj @@ -54,6 +54,9 @@ + + {d9b8fc84-322a-4f9f-bbb9-20915c47ddfd} + {6955446d-23f7-4023-9bb3-8657f904af99} @@ -69,6 +72,7 @@ + diff --git a/src/modules/colorPicker/ColorPicker/dllmain.cpp b/src/modules/colorPicker/ColorPicker/dllmain.cpp index 73e9853a2d..68f1628b6b 100644 --- a/src/modules/colorPicker/ColorPicker/dllmain.cpp +++ b/src/modules/colorPicker/ColorPicker/dllmain.cpp @@ -4,6 +4,7 @@ #include #include "trace.h" #include "Generated Files/resource.h" +#include #include #include #include @@ -29,6 +30,17 @@ BOOL APIENTRY DllMain(HMODULE hModule, return TRUE; } +namespace +{ + const wchar_t JSON_KEY_PROPERTIES[] = L"properties"; + const wchar_t JSON_KEY_WIN[] = L"win"; + const wchar_t JSON_KEY_ALT[] = L"alt"; + const wchar_t JSON_KEY_CTRL[] = L"ctrl"; + const wchar_t JSON_KEY_SHIFT[] = L"shift"; + const wchar_t JSON_KEY_CODE[] = L"code"; + const wchar_t JSON_KEY_ACTIVATION_SHORTCUT[] = L"ActivationShortcut"; +} + struct ModuleSettings { } g_settings; @@ -50,12 +62,101 @@ private: HANDLE send_telemetry_event; + Hotkey m_hotkey; + + // Handle to event used to invoke ColorPicker + HANDLE m_hInvokeEvent; + + void parse_hotkey(PowerToysSettings::PowerToyValues& settings) + { + auto settingsObject = settings.get_raw_json(); + if (settingsObject.GetView().Size()) + { + try + { + auto jsonHotkeyObject = settingsObject.GetNamedObject(JSON_KEY_PROPERTIES).GetNamedObject(JSON_KEY_ACTIVATION_SHORTCUT); + m_hotkey.win = jsonHotkeyObject.GetNamedBoolean(JSON_KEY_WIN); + m_hotkey.alt = jsonHotkeyObject.GetNamedBoolean(JSON_KEY_ALT); + m_hotkey.shift = jsonHotkeyObject.GetNamedBoolean(JSON_KEY_SHIFT); + m_hotkey.ctrl = jsonHotkeyObject.GetNamedBoolean(JSON_KEY_CTRL); + m_hotkey.key = static_cast(jsonHotkeyObject.GetNamedNumber(JSON_KEY_CODE)); + } + catch (...) + { + Logger::error("Failed to initialize ColorPicker start shortcut"); + } + } + else + { + Logger::info("ColorPicker settings are empty"); + } + + if (!m_hotkey.key) + { + Logger::info("ColorPicker is going to use default shortcut"); + m_hotkey.win = true; + m_hotkey.alt = false; + m_hotkey.shift = true; + m_hotkey.ctrl = false; + m_hotkey.key = 'C'; + } + } + + bool is_process_running() + { + return WaitForSingleObject(m_hProcess, 0) == WAIT_TIMEOUT; + } + + void launch_process() + { + Logger::trace(L"Launching ColorPicker process"); + unsigned long powertoys_pid = GetCurrentProcessId(); + + std::wstring executable_args = L""; + executable_args.append(std::to_wstring(powertoys_pid)); + + SHELLEXECUTEINFOW sei{ sizeof(sei) }; + sei.fMask = { SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI }; + sei.lpFile = L"modules\\ColorPicker\\ColorPickerUI.exe"; + sei.nShow = SW_SHOWNORMAL; + sei.lpParameters = executable_args.data(); + if (!ShellExecuteExW(&sei)) + { + DWORD error = GetLastError(); + std::wstring message = L"ColorPicker failed to start with error = "; + message += std::to_wstring(error); + Logger::error(message); + } + + m_hProcess = sei.hProcess; + } + + // Load the settings file. + void init_settings() + { + try + { + // Load and parse the settings file for this PowerToy. + PowerToysSettings::PowerToyValues settings = + PowerToysSettings::PowerToyValues::load_from_settings_file(get_key()); + + parse_hotkey(settings); + } + catch (std::exception ex) + { + Logger::warn(L"An exception occurred while loading the settings file"); + // Error while loading from the settings file. Let default values stay as they are. + } + } + public: ColorPicker() { app_name = GET_RESOURCE_STRING(IDS_COLORPICKER_NAME); app_key = ColorPickerConstants::ModuleKey; send_telemetry_event = CreateDefaultEvent(CommonSharedConstants::COLOR_PICKER_SEND_SETTINGS_TELEMETRY_EVENT); + m_hInvokeEvent = CreateDefaultEvent(CommonSharedConstants::SHOW_COLOR_PICKER_SHARED_EVENT); + init_settings(); } ~ColorPicker() @@ -109,6 +210,7 @@ public: PowerToysSettings::PowerToyValues values = PowerToysSettings::PowerToyValues::from_json_string(config, get_key()); + parse_hotkey(values); // If you don't need to do any custom processing of the settings, proceed // to persists the values calling: values.save_to_settings_file(); @@ -124,23 +226,11 @@ public: virtual void enable() { ResetEvent(send_telemetry_event); + ResetEvent(m_hInvokeEvent); // use only with new settings? if (UseNewSettings()) { - unsigned long powertoys_pid = GetCurrentProcessId(); - - std::wstring executable_args = L""; - executable_args.append(std::to_wstring(powertoys_pid)); - - SHELLEXECUTEINFOW sei{ sizeof(sei) }; - sei.fMask = { SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI }; - sei.lpFile = L"modules\\ColorPicker\\ColorPickerUI.exe"; - sei.nShow = SW_SHOWNORMAL; - sei.lpParameters = executable_args.data(); - ShellExecuteExW(&sei); - - m_hProcess = sei.hProcess; - + launch_process(); m_enabled = true; } }; @@ -150,12 +240,47 @@ public: if (m_enabled) { ResetEvent(send_telemetry_event); + ResetEvent(m_hInvokeEvent); TerminateProcess(m_hProcess, 1); } m_enabled = false; } + virtual bool on_hotkey(size_t hotkeyId) override + { + if (m_enabled) + { + Logger::trace(L"ColorPicker hotkey pressed"); + if (!is_process_running()) + { + launch_process(); + } + + SetEvent(m_hInvokeEvent); + return true; + } + + return false; + } + + virtual size_t get_hotkeys(Hotkey* hotkeys, size_t buffer_size) override + { + if (m_hotkey.key) + { + if (hotkeys && buffer_size >= 1) + { + hotkeys[0] = m_hotkey; + } + + return 1; + } + else + { + return 0; + } + } + virtual bool is_enabled() override { return m_enabled; diff --git a/src/modules/colorPicker/ColorPickerUI/App.xaml.cs b/src/modules/colorPicker/ColorPickerUI/App.xaml.cs index 98ba5fc9f7..0bbe839751 100644 --- a/src/modules/colorPicker/ColorPickerUI/App.xaml.cs +++ b/src/modules/colorPicker/ColorPickerUI/App.xaml.cs @@ -18,7 +18,7 @@ namespace ColorPickerUI { private Mutex _instanceMutex; private static string[] _args; - private int _powerToysPid; + private int _powerToysRunnerPid; private bool disposedValue; private ThemeManager _themeManager; @@ -27,23 +27,27 @@ namespace ColorPickerUI _args = e?.Args; // allow only one instance of color picker - _instanceMutex = new Mutex(true, @"Global\ColorPicker", out bool createdNew); + _instanceMutex = new Mutex(true, @"Local\PowerToys_ColorPicker_InstanceMutex", out bool createdNew); if (!createdNew) { _instanceMutex = null; - Application.Current.Shutdown(); + Environment.Exit(0); return; } if (_args?.Length > 0) { - _ = int.TryParse(_args[0], out _powerToysPid); - } + _ = int.TryParse(_args[0], out _powerToysRunnerPid); - RunnerHelper.WaitForPowerToysRunner(_powerToysPid, () => + RunnerHelper.WaitForPowerToysRunner(_powerToysRunnerPid, () => + { + Environment.Exit(0); + }); + } + else { - Environment.Exit(0); - }); + _powerToysRunnerPid = -1; + } _themeManager = new ThemeManager(this); base.OnStartup(e); @@ -83,5 +87,10 @@ namespace ColorPickerUI Dispose(disposing: true); GC.SuppressFinalize(this); } + + public bool IsRunningDetachedFromPowerToys() + { + return _powerToysRunnerPid == -1; + } } } diff --git a/src/modules/colorPicker/ColorPickerUI/Keyboard/KeyboardMonitor.cs b/src/modules/colorPicker/ColorPickerUI/Keyboard/KeyboardMonitor.cs index f16423d00c..f18f9acb02 100644 --- a/src/modules/colorPicker/ColorPickerUI/Keyboard/KeyboardMonitor.cs +++ b/src/modules/colorPicker/ColorPickerUI/Keyboard/KeyboardMonitor.cs @@ -76,36 +76,40 @@ namespace ColorPicker.Keyboard return; } - var name = Helper.GetKeyName((uint)virtualCode); - - // If the last key pressed is a modifier key, then currentlyPressedKeys cannot possibly match with _activationKeys - // because _activationKeys contains exactly 1 non-modifier key. Hence, there's no need to check if `name` is a - // modifier key or to do any additional processing on it. - if (e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyDown || e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyDown) + if ((System.Windows.Application.Current as ColorPickerUI.App).IsRunningDetachedFromPowerToys()) { - // Check pressed modifier keys. - AddModifierKeys(currentlyPressedKeys); + var name = Helper.GetKeyName((uint)virtualCode); - currentlyPressedKeys.Add(name); - } - - currentlyPressedKeys.Sort(); - - if (currentlyPressedKeys.Count == 0 && _previouslyPressedKeys.Count != 0) - { - // no keys pressed, we can enable activation shortcut again - _activationShortcutPressed = false; - } - - _previouslyPressedKeys = currentlyPressedKeys; - - if (ArraysAreSame(currentlyPressedKeys, _activationKeys)) - { - // avoid triggering this action multiple times as this will be called nonstop while keys are pressed - if (!_activationShortcutPressed) + // If the last key pressed is a modifier key, then currentlyPressedKeys cannot possibly match with _activationKeys + // because _activationKeys contains exactly 1 non-modifier key. Hence, there's no need to check if `name` is a + // modifier key or to do any additional processing on it. + if (e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyDown || e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyDown) { - _activationShortcutPressed = true; - _appStateHandler.StartUserSession(); + // Check pressed modifier keys. + AddModifierKeys(currentlyPressedKeys); + + currentlyPressedKeys.Add(name); + } + + currentlyPressedKeys.Sort(); + + if (currentlyPressedKeys.Count == 0 && _previouslyPressedKeys.Count != 0) + { + // no keys pressed, we can enable activation shortcut again + _activationShortcutPressed = false; + } + + _previouslyPressedKeys = currentlyPressedKeys; + + if (ArraysAreSame(currentlyPressedKeys, _activationKeys)) + { + // avoid triggering this action multiple times as this will be called nonstop while keys are pressed + if (!_activationShortcutPressed) + { + _activationShortcutPressed = true; + + _appStateHandler.StartUserSession(); + } } } } From 55a851e5f2071c7c857e16399a3bc0418630cc29 Mon Sep 17 00:00:00 2001 From: Seraphima Zykova Date: Wed, 7 Apr 2021 14:43:35 +0100 Subject: [PATCH 82/82] [FancyZones] Place log files in subfolders with the version number. (#10549) --- PowerToys.sln | 1 + src/common/logger/logger_settings.h | 4 +- src/common/utils/logger_helper.h | 55 ++++++++++++++++++++++++++ src/modules/fancyzones/dll/dllmain.cpp | 13 +++++- 4 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/common/utils/logger_helper.h diff --git a/PowerToys.sln b/PowerToys.sln index 95f118b49f..21179a3f5d 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -287,6 +287,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "utils", "utils", "{B39DC643 src\common\utils\elevation.h = src\common\utils\elevation.h src\common\utils\exec.h = src\common\utils\exec.h src\common\utils\json.h = src\common\utils\json.h + src\common\utils\logger_helper.h = src\common\utils\logger_helper.h src\common\utils\os-detect.h = src\common\utils\os-detect.h src\common\utils\process_path.h = src\common\utils\process_path.h src\common\utils\resources.h = src\common\utils\resources.h diff --git a/src/common/logger/logger_settings.h b/src/common/logger/logger_settings.h index fdbcc5a80e..5398e2e39b 100644 --- a/src/common/logger/logger_settings.h +++ b/src/common/logger/logger_settings.h @@ -7,13 +7,15 @@ struct LogSettings inline const static std::wstring defaultLogLevel = L"trace"; inline const static std::wstring logLevelOption = L"logLevel"; inline const static std::string runnerLoggerName = "runner"; + inline const static std::wstring logPath = L"Logs\\"; inline const static std::wstring runnerLogPath = L"RunnerLogs\\runner-log.txt"; inline const static std::string actionRunnerLoggerName = "action-runner"; inline const static std::wstring actionRunnerLogPath = L"RunnerLogs\\action-runner-log.txt"; inline const static std::string launcherLoggerName = "launcher"; inline const static std::wstring launcherLogPath = L"LogsModuleInterface\\launcher-log.txt"; inline const static std::string fancyZonesLoggerName = "fancyzones"; - inline const static std::wstring fancyZonesLogPath = L"FancyZonesLogs\\fancyzones-log.txt"; + inline const static std::wstring fancyZonesLogPath = L"fancyzones-log.txt"; + inline const static std::wstring fancyZonesOldLogPath = L"FancyZonesLogs\\"; // needed to clean up old logs inline const static std::string shortcutGuideLoggerName = "shortcut-guide"; inline const static std::wstring shortcutGuideLogPath = L"ShortcutGuideLogs\\shortcut-guide-log.txt"; inline const static std::string keyboardManagerLoggerName = "keyboard-manager"; diff --git a/src/common/utils/logger_helper.h b/src/common/utils/logger_helper.h new file mode 100644 index 0000000000..852b6d9816 --- /dev/null +++ b/src/common/utils/logger_helper.h @@ -0,0 +1,55 @@ +#pragma once + +#include +#include + +namespace LoggerHelpers +{ + inline std::filesystem::path get_log_folder_path(std::wstring_view appPath) + { + std::filesystem::path logFolderPath(appPath); + logFolderPath.append(LogSettings::logPath); + logFolderPath.append(get_product_version()); + return logFolderPath; + } + + inline bool delete_old_log_folder(const std::filesystem::path& logFolderPath) + { + try + { + std::filesystem::remove_all(logFolderPath); + return true; + } + catch (std::filesystem::filesystem_error& e) + { + Logger::error("Failed to delete old log folder: {}", e.what()); + } + + return false; + } + + inline bool delete_other_versions_log_folders(std::wstring_view appPath, const std::filesystem::path& currentVersionLogFolder) + { + bool result = true; + std::filesystem::path logFolderPath(appPath); + logFolderPath.append(LogSettings::logPath); + + for (const auto& dir : std::filesystem::directory_iterator(logFolderPath)) + { + if (dir != currentVersionLogFolder) + { + try + { + std::filesystem::remove_all(dir); + } + catch (std::filesystem::filesystem_error& e) + { + Logger::error("Failed to delete previous version log folder: {}", e.what()); + result = false; + } + } + } + + return result; + } +} diff --git a/src/modules/fancyzones/dll/dllmain.cpp b/src/modules/fancyzones/dll/dllmain.cpp index 7d8ed15c7e..56aa268ffd 100644 --- a/src/modules/fancyzones/dll/dllmain.cpp +++ b/src/modules/fancyzones/dll/dllmain.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -156,9 +157,19 @@ public: { app_name = GET_RESOURCE_STRING(IDS_FANCYZONES); app_key = NonLocalizable::FancyZonesStr; - std::filesystem::path logFilePath(PTSettingsHelper::get_module_save_folder_location(app_key)); + const auto appFolder = PTSettingsHelper::get_module_save_folder_location(app_key); + const std::filesystem::path logFolder = LoggerHelpers::get_log_folder_path(appFolder); + + std::filesystem::path logFilePath(logFolder); logFilePath.append(LogSettings::fancyZonesLogPath); Logger::init(LogSettings::fancyZonesLoggerName, logFilePath.wstring(), PTSettingsHelper::get_log_settings_file_location()); + + std::filesystem::path oldLogFolder(appFolder); + oldLogFolder.append(LogSettings::fancyZonesOldLogPath); + LoggerHelpers::delete_old_log_folder(oldLogFolder); + + LoggerHelpers::delete_other_versions_log_folders(appFolder, logFolder); + m_settings = MakeFancyZonesSettings(reinterpret_cast(&__ImageBase), FancyZonesModule::get_name(), FancyZonesModule::get_key()); FancyZonesDataInstance().LoadFancyZonesData(); s_instance = this;