Compare commits

..

57 Commits

Author SHA1 Message Date
Gleb Khmyznikov
8efd9bc361 fix neatpicks 2025-07-01 13:23:27 +02:00
Gleb Khmyznikov
6e9a5c2673 Merge branch 'main' into docs-overhaul 2025-07-01 13:11:28 +02:00
Gleb Khmyznikov
7beea60256 update newplus debug steps 2025-06-25 21:05:47 +02:00
Gleb Khmyznikov
4513882108 small mouse tools debug addition 2025-06-25 18:19:14 +02:00
Gleb Khmyznikov
e3a3373f13 update the file locksmith debug steps 2025-06-25 17:09:22 +02:00
Gleb Khmyznikov
aaeb3f9822 Add missing step 2025-06-25 13:14:25 +02:00
Gleb Khmyznikov
82343aee7f Merge branch 'docs-overhaul' of https://github.com/microsoft/PowerToys into docs-overhaul 2025-06-25 13:09:21 +02:00
Gleb Khmyznikov
70c4324612 Fix filelocksmith doc 2025-06-25 13:08:40 +02:00
Mengyuan
04e8eb3bf3 Update filelocksmith.md 2025-06-25 13:56:06 +08:00
Gleb Khmyznikov
03ddde98d8 initial fix of the locksmith 2025-06-24 18:18:27 +02:00
Jaylyn Barbee
7a1e906e9b Update zoomit.md
Updated ZoomIt docs to add Debug instructions.
2025-06-24 10:01:01 -04:00
Gleb Khmyznikov
6ffce05f8c Add quick accent debug 2025-06-24 15:16:08 +02:00
Gleb Khmyznikov
7cd88a0602 add debug doc for kb manager 2025-06-23 21:43:01 +02:00
zhaopeng wang
79c52c7a32 Update cropandlock.md 2025-06-23 21:53:27 +08:00
zhaopeng wang
012d87eabd Update alwaysontop.md 2025-06-23 21:49:59 +08:00
Gleb Khmyznikov
4dc97cf44d Add debug info 2025-06-23 13:59:53 +02:00
Gleb Khmyznikov
244997db8b Add overview and links hat to all modules 2025-06-20 22:26:16 +02:00
Gleb Khmyznikov
9ab92bc5b7 Add awake and imageresizer docs 2025-06-20 15:10:56 +02:00
Gleb Khmyznikov
a753d86819 add text extractor basics 2025-06-20 14:23:32 +02:00
Gleb Khmyznikov
d0d8a5ad46 Update power rename doc 2025-06-20 13:20:03 +02:00
Gleb Khmyznikov
e056454535 add settings new steps, add command not found module 2025-06-20 13:11:38 +02:00
Gleb Khmyznikov
5eb74dd59a Add Color Picker doc 2025-06-20 12:33:36 +02:00
Gleb Khmyznikov
f9afda5190 update documentation links 2025-06-20 11:58:44 +02:00
Gleb Khmyznikov
fd037a9d97 add AOT and Crop docs 2025-06-20 11:31:33 +02:00
Gleb Khmyznikov
7b1a9cf275 update fuzzing test doc 2025-06-20 11:13:08 +02:00
Mengyuan
1dfc7a8fcf Update fuzzingtesting.md 2025-06-20 10:53:46 +08:00
Gleb Khmyznikov
df4f863529 Add UI tests link 2025-06-19 21:05:07 +02:00
Gleb Khmyznikov
b5ff8f748a add mouse utilities doc 2025-06-19 18:32:58 +02:00
Gleb Khmyznikov
e7aba2202e move and rename settingsv2 2025-06-19 18:11:18 +02:00
Gleb Khmyznikov
71da4b254e add links and diagrams 2025-06-19 15:18:23 +02:00
Gleb Khmyznikov
f0cbb20ba5 add filelocksmith doc 2025-06-19 15:15:06 +02:00
Gleb Khmyznikov
941ef05e69 Add links for editor 2025-06-19 14:41:35 +02:00
Gleb Khmyznikov
04eebad845 add hosts editor doc 2025-06-19 14:26:30 +02:00
Gleb Khmyznikov
e9741c8fc4 revamp fuzzing doc 2025-06-19 12:33:03 +02:00
Peiyao Zhao
d41109ec98 Update environmentvariables.md
Add checklist link for environment variables
2025-06-19 16:32:55 +08:00
Peiyao Zhao
e346601328 Update registrypreview.md
Add release checklist for registry preview
2025-06-19 16:26:33 +08:00
Peiyao Zhao
2d10298240 Update monaco-editor.md
Add peek to the Monaco usage
2025-06-19 16:20:47 +08:00
Hao Liu
2d15bf9b28 Update quickaccent.md 2025-06-19 13:19:05 +08:00
Gleb Khmyznikov
6eea58fe70 add diagram 2025-06-18 21:17:24 +02:00
Gleb Khmyznikov
a018f47b7a update shortcut_guide 2025-06-18 21:12:19 +02:00
Gleb Khmyznikov
d25fb664a6 add screen ruller doc 2025-06-18 20:54:23 +02:00
Gleb Khmyznikov
ef455521ce add quick accent doc 2025-06-18 19:10:32 +02:00
Gleb Khmyznikov
7aa26aec5b remove duplicates for FZ 2025-06-18 16:23:43 +02:00
Zhaopeng Wang (from Dev Box)
c7b885bf03 add fancyzone doc 2025-06-18 20:14:15 +08:00
Gleb Khmyznikov
b3d2a5a1f8 add env variables 2025-06-17 15:10:52 +02:00
Gleb Khmyznikov
d24b535a0a add quick links 2025-06-17 14:46:46 +02:00
Gleb Khmyznikov
4ef58f1695 Add registry preview and monaco editor 2025-06-17 13:46:50 +02:00
Gleb Khmyznikov
663c3555d3 Add new plus and context menus docs 2025-06-16 19:05:21 +02:00
Gleb Khmyznikov
3895538a06 update settings doc 2025-06-16 17:34:40 +02:00
Gleb Khmyznikov
34532a6350 update runner 2025-06-16 17:12:08 +02:00
Gleb Khmyznikov
3f4b0acae7 update zoomit 2025-06-16 17:00:21 +02:00
Gleb Khmyznikov
22d1fd4d53 update fancyzones 2025-06-16 16:38:27 +02:00
Gleb Khmyznikov
d0e16049a6 add links to issues 2025-06-16 16:17:15 +02:00
Gleb Khmyznikov
a1e10e6410 fancyzones images 2025-06-16 15:23:23 +02:00
Gleb Khmyznikov
afe5c2e27c zoomit doc 2025-06-16 14:25:43 +02:00
Gleb Khmyznikov
ea50dd6d79 update fancyzones doc 2025-06-13 16:23:31 +02:00
Gleb Khmyznikov
9ee9ad3fa6 initial 2025-06-13 16:10:31 +02:00
20 changed files with 167 additions and 307 deletions

View File

@@ -55,7 +55,6 @@ clayton
Coplen
craigloewen
crutkas
Chubercik
damienleroy
daverayment
davidegiacometti

234
README.md
View File

@@ -35,19 +35,19 @@ Microsoft PowerToys is a set of utilities for power users to tune and streamline
Go to the [Microsoft PowerToys GitHub releases page][github-release-link] and click on `Assets` at the bottom to show the files available in the release. Please use the appropriate PowerToys installer that matches your machine's architecture and install scope. For most, it is `x64` and per-user.
<!-- items that need to be updated release to release -->
[github-next-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.93%22
[github-current-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.92%22
[ptUserX64]: https://github.com/microsoft/PowerToys/releases/download/v0.92.0/PowerToysUserSetup-0.92.0-x64.exe
[ptUserArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.92.0/PowerToysUserSetup-0.92.0-arm64.exe
[ptMachineX64]: https://github.com/microsoft/PowerToys/releases/download/v0.92.0/PowerToysSetup-0.92.0-x64.exe
[ptMachineArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.92.0/PowerToysSetup-0.92.0-arm64.exe
[github-next-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.92%22
[github-current-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.91%22
[ptUserX64]: https://github.com/microsoft/PowerToys/releases/download/v0.91.1/PowerToysUserSetup-0.91.1-x64.exe
[ptUserArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.91.1/PowerToysUserSetup-0.91.1-arm64.exe
[ptMachineX64]: https://github.com/microsoft/PowerToys/releases/download/v0.91.1/PowerToysSetup-0.91.1-x64.exe
[ptMachineArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.91.1/PowerToysSetup-0.91.1-arm64.exe
| Description | Filename |
|----------------|----------|
| Per user - x64 | [PowerToysUserSetup-0.92.0-x64.exe][ptUserX64] |
| Per user - ARM64 | [PowerToysUserSetup-0.92.0-arm64.exe][ptUserArm64] |
| Machine wide - x64 | [PowerToysSetup-0.92.0-x64.exe][ptMachineX64] |
| Machine wide - ARM64 | [PowerToysSetup-0.92.0-arm64.exe][ptMachineArm64] |
| Description | Filename | sha256 hash |
|----------------|----------|-------------|
| Per user - x64 | [PowerToysUserSetup-0.91.1-x64.exe][ptUserX64] | 42EA4A3E8C79A5456476D19E72B3E2AB9393A89C4DC7442EB7EE5A1E3490D38A |
| Per user - ARM64 | [PowerToysUserSetup-0.91.1-arm64.exe][ptUserArm64] | F3F433FE04049F9197411D792AADEBF34E3BE7FE16327BD8B73D2A046ED8BAF6 |
| Machine wide - x64 | [PowerToysSetup-0.91.1-x64.exe][ptMachineX64] | EC4BC3A8625775866B0ED4577CCF83E6EC7B1A0AD267379DDBAF4FE49C7B5BDD |
| Machine wide - ARM64 | [PowerToysSetup-0.91.1-arm64.exe][ptMachineArm64] | 9CB8911008420D0E446AE3D5CE365E447FA4DF9DCF9337F3A80F933C00FC3689 |
This is our preferred method.
@@ -85,7 +85,7 @@ We ask that **before you start work on a feature that you would like to contribu
Most contributions require you to agree to a [Contributor License Agreement (CLA)][oss-CLA] declaring that you grant us the rights to use your contribution and that you have permission to do so.
For guidance on developing for PowerToys, please read the [developer docs](./doc/devdocs) for a detailed breakdown. This includes how to setup your computer to compile.
For guidance on developing for PowerToys, please read the [developer docs](/doc/devdocs) for a detailed breakdown. This includes how to setup your computer to compile.
## What's Happening
@@ -93,138 +93,166 @@ 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.92 - June 2025 Update
### 0.91 - May 2025 Update
In this release, we focused on new features, stability, optimization improvements, and automation.
In this release, we focused on new features, stability, and automation.
**✨Highlights**
- PowerToys settings now has a toggle for the system tray icon, giving users control over its visibility based on personal preference. Thanks [@BLM16](https://github.com/BLM16)!
- Command Palette now has Ahead-of-Time ([AOT](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot)) compatibility for all first-party extensions, improved extensibility, and core UX fixes, resulting in better performance and stability across commands.
- Color Picker now has customizable mouse button actions, enabling more personalized workflows by assigning functions to left, right, and middle clicks. Thanks [@PesBandi](https://github.com/PesBandi)!
- Bug Report Tool now has a faster and clearer reporting process, with progress indicators, improved compression, auto-cleanup of old trace logs, and inclusion of MSIX installer logs for more efficient diagnostics.
- File Explorer add-ons now have improved rendering stability, resolving issues with PDF previews, blank thumbnails, and text file crashes during file browsing.
- We focused on greatly improving the Command Palette's performance and fixing a large number of bugs. Some new features we've added are:
- Added the ability for Command Palette to search any file using a fallback command.
- Added the ability to make the Command Palette global hotkey a low-level keyboard hook.
- Added open URL fallback command for the WebSearch extension, enabling users to directly open URLs in the browser from Command Palette.
- You can now define custom formats in the Date and Time plugins of PT Run and Command Palette. Thanks [@htcfreek](https://github.com/htcfreek)!
### Advanced Paste
- Fixed an issue where Advanced Paste failed to create the OCR engine for certain English language tags (e.g., en-CA) by initializing the OCR engine with the user profile language. Thanks [@cryolithic](https://github.com/cryolithic)!
### Color Picker
- Added mouse button actions so you can choose what left, right, or middle click does. Thanks [@PesBandi](https://github.com/PesBandi)!
- Fixed an issue where a resource leak caused hangs or crashes by properly disposing of the Graphics object. Thanks [@dcog989](https://github.com/dcog989)!
- Fixed an issue where Color Picker exited on Backspace keypress by ensuring it only closes when focused and aligning Escape/Backspace behavior. Thanks [@PesBandi](https://github.com/PesBandi)!
- Added support for Oklab and Oklch color formats in Color Picker. Thanks [@lemonyte](https://github.com/lemonyte)!
### Crop & Lock
### Command Not Found
- Aligned window styling with current Windows theme for a cleaner look. Thanks [@sadirano](https://github.com/sadirano)!
- Updated the WinGet Command Not Found script to only enable the experimental features if they exist.
### Command Palette
- Enhanced performance by resolving a regression in page loading.
- Applied consistent hotkey handling across all Command Palette commands for a smoother user experience.
- Improved graceful closing of Command Palette. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
- Fixed consistency issue for extensions' alias with "Direct" setting and enabled localization for "Direct" and "Indirect" for better user understanding. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
- Improved visual clarity by styling critical context items correctly.
- Automatically focused the field when only one is present on the content page.
- Improved stability and efficiency when loading file icons in SDK ThumbnailHelper.cs by removing unnecessary operations. Thanks [@OldUser101](https://github.com/OldUser101)!
- Enhanced details view with commands implementation. (See [Extension sample](./src/modules/cmdpal/ext/SamplePagesExtension/Pages/SampleListPageWithDetails.cs))
- Updated bug template to include Command Palette module.
- Fixed an issue where the toast window was not scaled for DPI, causing layout issues under display scaling.
- Fixed an issue where Up/Down keyboard navigation didn't move selection when the caret was at position 0, and added continuous navigation like PT Run v1. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
- Updated the Time and Date extension code to simplify it and improve clarity.
- Fixed an issue where capitalization in the command causes failure when trying to go to the mouse pointer, resolved by adjusting the command to lowercase.
- Added open URL fallback command for the WebSearch extension, enabling users to directly open URLs in the browser from the Command Palette. Thanks [@htcfreek](https://github.com/htcfreek)!
- Added setting to enable/disable system tray icon in CmdPal and aligned terminology with Windows 11. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
- Fixed an alias update issue by removing the old alias when a new one is set.
- Resolved GitHub casing conflict by migrating Exts and exts into a new ext directory, ensuring consistent structure across platforms and preventing path fragmentation.
- Fix an issue where the 'Create New Extension' command generated empty file names.
- Added the ability to make the global hotkey a low-level keyboard hook.
- Added support for JUMBO thumbnails, enabling access to high-resolution icons.
- Fixed crashes when CmdPal auto-hid itself while an MSAL dialog was opened, by preventing CmdPal from hiding if it's disabled.
- Added support for immediately selecting search text when a page is loaded.
- Fixed a bug where extension settings pages failed to reload on reopen by updating the settings form when extension settings are saved.
- Fixed an issue where the Command Palette failed to launch from the runner.
- Refactored and ported the PowerToys Run v1 calculator logic into Command Palette, added settings support, and improved fallback behavior.
- Re-added support for list item keyboard shortcuts.
- Enhanced accessibility in Command Palette by adding proper labels, refining animations, improving localization, and fixed a11y related issues.
- Ported custom format support to the Time and Date plugin, reordered and cleaned up settings, improved error messaging, and fixed edge-case crashes for more robust and user-friendly behavior. Thanks [@htcfreek](https://github.com/htcfreek)!
- Added fallback item for system command.
- Fixed a bug in Windows System Command where the key prompt incorrectly displayed "Empty" for the "Open Recycle Bin" action. Thanks [@jironemo](https://github.com/jironemo)!
- Fixed an issue where the 'more commands' list showed commands that shouldn't be visible. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
- Fixed an issue where the details view in Command Palette displayed an oversized icon and misaligned text, aligning it with Windows Search behavior.
- Fixed a bug where empty screen content and command bar commands were cut off when using long labels, ensuring proper layout and visibility.
- Improved CmdPals WinGet integration by fixing version display for installed packages, enabling updates with icons, and migrating the preview winget API to a stable version.
- Fixed a bug where commands for ContentPage didn't update until after exit, by ensuring context menus are fully initialized when they change.
- Added fallback support to the TimeDate extension, enabling direct date/time queries without pre-selecting the command.
- Added import of Common.Dotnet.AotCompatibility.props across multiple CmdPal project files to enhance AOT compilation support.
- Fixed a crash in CmdPal settings caused by a null HotKey when settings.json is missing or lacks a defined hotkey. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
- Added support for filterable, nested context menus in CmdPal, including a search box to maintain focus behavior.
- Refactored CmdPal classes to improve JSON serialization and introduced new serialization contexts for better performance and maintainability.
- Added support for ahead-of-time (AoT) compilation.
- Added retry mechanism for CmdPal launch.
- Removed some unused files from CmdPal.Common to simplify the codebase and facilitate marking it as AoT-compatible.
- Fixed a bug where a race condition in the update of SearchText caused the cursor in the input box to automatically jump to the end of the line, ensuring SearchText is only updated after it has actually been changed.
- Added support for searching any file in the fallback command.
- Cleaned up AoT-related code to prevent duplicate operations during testing.
- Reduced CmdPal load time by parallelizing extension startup and adding timeouts to prevent misbehaving extensions from blocking others.
- Enhanced UI behavior by dismissing the details pane when the list gets emptied, avoiding inconsistent visual states.
- Added support to unset the fallback command in CmdPal when no matching command is found, ensuring cleaner reload behavior.
- Fixed a leak in the CmdPal extension template by addressing improper ComServer use.
- Prevented CmdPal window from maximizing on title bar double-click to maintain intended window behavior. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
- Fixed an issue where the Settings UI launched too small by making window dimensions DPI-aware and enforcing minimum width and height using WinUIEx.
- Fixed white flash and one-time animation issues in CmdPal by cloaking the window instead of hiding it.
- Fixed a bug where all extension settings were fetched on startup by lazy-loading extension settings, reducing initialization overhead.
- Added support for protecting CmdPal from crashes on Adaptive Card parse failure.
- Replaced shell:AppsFolder with URI activation in CmdPal to improve reliability.
- Added ability to open CmdPal settings from PowerToys Settings.
- Added ability for CmdPal to observe and dynamically update extension details by tracking property changes on the selected item.
- Bumped the toolkit version used in the CmdPal extension template to 0.2.0.
### Command Palette extensions
### Image Resizer
- Added "Copy Path" command to *App* search results for convenience. Thanks [@PesBandi](https://github.com/PesBandi)!
- Improved *Calculator* input experience by ignoring leading equal signs. Thanks [@PesBandi](https://github.com/PesBandi)!
- Corrected input handling in the *Calculator* extension to avoid showing errors for input with only leading whitespace.
- Improved *New Extension* wizard by validating names to prevent namespace errors.
- Ensured consistent context items display for the *Run* extension between fallback and top-level results.
- Fixed missing *Time & Date* commands in fallback results. Thanks [@htcfreek](https://github.com/htcfreek)!
- Fixed outdated results in the *Time & Date* extension. Thanks [@htcfreek](https://github.com/htcfreek)!
- Fixed an issue where *Web Search* always opened Microsoft Edge instead of the user's default browser on Windows 11 24H2 and later. Thanks [@RuggMatt](https://github.com/RuggMatt)!
- Improved ordering of *Windows Settings* extension search results from alphabetical to relevance-based for quicker access.
- Added "Restart Windows Explorer" command to the *Windows System Commands* provider for gracefully terminate and relaunch explorer.exe. Thanks [@jiripolasek](https://github.com/jiripolasek)!
- Fixed an issue where deleting an Image Resizer preset removed the wrong preset.
### Command Palette Ahead-of-Time (AOT) readiness
### Keyboard Manager
- Weve made foundational changes to prepare the Command Palette for future Ahead-of-Time (AOT) publishing. This includes replacing the calculator library with ExprTk, improving COM object handling, refining Win32 interop, and correcting trimming behavior—all to ensure compatibility, performance, and reliability under AOT constraints. All first-party extensions are now AOT-compatible. These improvements lay the groundwork for publishing Command Palette as an AOT application in the next release.
- Special thanks to [@Sergio0694](https://github.com/Sergio0694) for guidance on making COM APIs AOT-compatible, [@jtschuster](https://github.com/jtschuster) for fixing COM object handling, [@ArashPartow](https://github.com/ArashPartow) from ExprTk for integration suggestions, and [@tian-lt](https://github.com/tian-lt) from the Windows Calculator team for valuable suggestion throughout the migration journey and review.
- As part of the upcoming release, were also enabling AOT compatibility for key dependencies, including markdown rendering, Adaptive Cards, internal logging and telemetry library, and the core Command Palette UX.
### FancyZones
- Fixed DPI-scaling issues to ensure FancyZones Editor displays crisply on high-resolution monitors. Thanks [@HO-COOH](https://github.com/HO-COOH)! This inspired us a broader review across other PowerToys modules, leading to DPI display optimizations in Awake, Color Picker, PowerAccent, and more.
### File Explorer add-ons
- Fixed potential failures in PDF previewer and thumbnail generation, improving reliability when browsing PDF files. Thanks [@mohiuddin-khan-shiam](https://github.com/mohiuddin-khan-shiam)!
- Prevented Monaco Preview Handler crash when opening UTF-8-BOM text files.
### Hosts File Editor
- Added an in-app *“Learn more”* link to warning dialogs for quick guidance. Thanks [@PesBandi](https://github.com/PesBandi)!
### Mouse Without Borders
- Fixed firewall rule so MWB now accepts connections from IPs outside your local subnet.
- Cleaned legacy logs to reduce disk usage and noise.
### Peek
- Updated QOI reader so 3-channel QOI images preview correctly in Peek and File Explorer. Thanks [@mbartlett21](https://github.com/mbartlett21)!
- Added codec detection with a clear warning when a video cant be previewed, along with a link to the Microsoft Store to download the required codec.
- Fixed an issue where a modifier key, when set without specifying left or right, would get stuck due to incorrect key handling by tracking the pressed keys and sending the correct key accordingly. Thanks [@mantaionut](https://github.com/mantaionut)!
### PowerRename
- Added support for $YY-$MM-$DD in ModificationTime and AccessTime to enable flexible date-based renaming.
- Enhanced PowerRename's time formatting capabilities by adding 12-hour time format patterns with AM/PM support. Thanks [@bitmap4](https://github.com/bitmap4)!
### PowerToys Run
- Suppressed error UI for known WPF-related crashes to reduce user confusion, while retaining diagnostic logging for analysis. This targets COMException 0xD0000701 and 0x80263001 caused by temporary DWM unavailability.
- Added support for custom formats in the "Time and Date" plugin and improved error messages for invalid input formats. Thanks [@htcfreek](https://github.com/htcfreek)!
- Fix two crashes: one for WFT on very early dates and another for calculating the week of the month on very late dates (e.g., 31.12.9999), and reorder UI settings. Thanks [@htcfreek](https://github.com/htcfreek)!
- Fix an issue where capitalization in the command causes failure when trying to go to the mouse pointer, resolved by adjusting the command to lowercase.
- Added version details to plugin error messages for 'Loading error' and 'Init error'. Thanks [@htcfreek](https://github.com/htcfreek)!
- Enhanced result model by adding support for preventing usage-based ordering, giving plugin developers greater control over sorting behavior. Thanks [@CoreyHayward](https://github.com/CoreyHayward) and [@htcfreek](https://github.com/htcfreek)!
### Quick Accent
- Updated the letter mapping in GetDefaultLetterKeyEPO, replacing "ǔ" with "ŭ" for the VK_U key to accurately reflect Esperanto phonetics. Thanks [@OlegKharchevkin](https://github.com/OlegKharchevkin)!
- Fixed an issue where Quick Accent did not work properly when using the on-screen keyboard. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
### Registry Preview
- Added "Extended data preview" via magnifier icon and context menu in the Data Grid, enabled easier inspection of complex registry types like REG_BINARY, REG_EXPAND_SZ, and REG_MULTI_SZ, etc. Thanks [@htcfreek](https://github.com/htcfreek)!
- Improved file-saving experience in Registry Preview by aligning with Notepad-like behavior, enhancing user prompts, error handling, and preventing crashes during unsaved or interrupted actions. Thanks [@htcfreek](https://github.com/htcfreek)!
- Enhanced Registry Preview to support pasting registry keys and values without manually writing the file header, and added a new button for resetting the app. Thanks [@htcfreek](https://github.com/htcfreek)!
### Settings
- Added an option to hide or show the PowerToys system tray icon. Thanks [@BLM16](https://github.com/BLM16)!
- Improved settings to show progress while a bug report package is being generated.
- Fix an issue where the Settings app randomly showed a blank icon in the taskbar by deferring icon assignment until the window is activated.
- Added the ability to maximize the "What's New" window for a more comfortable reading experience.
### Workspaces
- Stored Workspaces icons in user AppData to ensure profile portability and prevent loss during temporary folder cleanup.
- Enabled capture and launch of PWAs on non-default Edge or Chrome profiles, ensuring consistent behavior during creation and execution.
- Fixed bugs where Steam games were not captured or launched correctly by updating window filtering and integrating Steam URL protocol handling.
### Documentation
- Added SpeedTest and Dictionary Definition to the third-party plugins documentation for PowerToys Run. Thanks [@ruslanlap](https://github.com/ruslanlap)!
- Corrected sample links and typo in Command Palette documentation. Thanks [@daverayment](https://github.com/daverayment) and [@roycewilliams](https://github.com/roycewilliams)!
- Added QuickNotes to the third-party plugins documentation for PowerToys Run. Thanks [@ruslanlap](https://github.com/ruslanlap)!
- Added Weather and Pomodoro plugins to the PowerToys Run third-party plugin documentation. Thanks [@ruslanlap](https://github.com/ruslanlap)!
- Added the Linear plugin to PowerToys Run's third-party plugin documentation. Thanks [@vednig](https://github.com/vednig)!
- Fixed formatting issues in documentation files and updated contributor and team member information. Thanks [@DanielEScherzer](https://github.com/DanielEScherzer) and [@RokyZevon](https://github.com/RokyZevon)!
### Development
- Updated .NET libraries to 9.0.6 for performance and security. Thanks [@snickler](https://github.com/snickler)!
- Updated WinAppSDK to 1.7.2 for better stability and Windows support.
- Introduced a one-step local build script that generates a signed installer, enhancing developer productivity.
- Generated portable PDBs so cross-platform debuggers can read symbol files, improving debugging experience in VSCode and other tools.
- Simplified WinGet configuration files by using the [Microsoft.Windows.Settings](https://www.powershellgallery.com/packages/Microsoft.Windows.Settings) module to enable Developer Mode. Thanks [@mdanish-kh](https://github.com/mdanish-kh)!
- Adjusted build scripts for the latest Az.Accounts module to keep CI green.
- Streamlined release pipeline by removing hard-coded telemetry version numbers, and unified Command Palette versioning with Windows Terminal's versioning method for consistent updates.
- Enhanced the build validation step to show detailed differences between NOTICE.md and actual package dependencies and versions.
- Improved spell-checking accuracy across the repo. Thanks [@rovercoder](https://github.com/rovercoder)!
- Upgraded CI to TouchdownBuild v5 for faster pipelines.
- Added context comments to *Resources.resw* to help translators.
- Expanded fuzz testing coverage to include FancyZones.
- Integrated all unit tests into the CI pipeline, increasing from ~3,000 to ~5,000 tests.
- Enabled daily UI test automation on the main branch, now covering over 370 UI tests for end-to-end validation.
- Newly added unit tests for WorkspacesLib to improve reliability and maintainability.
- Updated GitHub Action to install .NET 9 for MSStore release support.
- Updated version placeholder in bug_report.yml to prevent incorrect v0.70.0 versioning in issue reports.
- Updated GitHub Action to upgrade actions/setup-dotnet from version 3 to version 4 for MSStore release.
- Added securityContext to WinGet configuration files, allowing invocation from user context and prompting a single UAC for elevated resources in a separate process. Thanks [@mdanish-kh](https://github.com/mdanish-kh)!
- Changed log file extensions from .txt to .log to support proper file associations and tooling compatibility, and added logs for Workspace. Thanks [@benwa](https://github.com/benwa)!
- Upgraded testing framework dependencies and aligned package versions across components.
- Upgraded dependencies to fix vulnerabilities.
- Enhanced repository security by pinning GitHub Actions and Docker tags to immutable full-length commits and integrating automated dependency vulnerability scanning via Dependency Review Workflow. Thanks [@Nick2bad4u](https://github.com/Nick2bad4u)!
- Upgraded Boost dependencies to a newer version.
- Upgraded toolkit to the latest version, suppressed AoT-related warnings.
- Fixed an issue where missing signing for newly added files caused build failures.
- Update release pipeline to prevent publishing private symbols for 100 years.
- Introduced fuzzing for PowerRename to improve reliability and added setup guidance for extending fuzzing to other C++ modules.
- Added centralized pre-creation of generated folders for all .csproj projects to prevent build failures.
- Updated WinAppSDK to the latest 1.7 version.
- Upgraded Boost dependencies to the latest version for the PowerRename Fuzzing project.
- Updated the ADO area path in tsa.json to resolve TSA pipeline errors caused by a deprecated path.
- Initiated AoT support for CmdPal with foundational work in progress.
### Tool/General
### General
- Added support for automating bug report creation by generating a pre-filled GitHub issue URL with system and diagnostic information. Thanks [@donlaci](https://github.com/donlaci)!
- Added scripts to locally build the installer, ensuring the CmdPal can also be launched in a local environment.
- Removed export PFX logic to eliminate hardcoded password usage and resolve PSScriptAnalyzer security warning.
- Added PowerShell script and CI integration to enforce consistent use of Common.Dotnet.CsWinRT.props across all C# projects under the src folder.
### What is being planned for version 0.92
- Updated bug report compression library (cziplib 0.3.3) for faster and more reliable package creation. Thanks [@Chubercik](https://github.com/Chubercik)!
- Included App Installer (“AppX Deployment Server”) event logs in bug reports for more thorough diagnostics.
### What is being planned for version 0.93
For [v0.93][github-next-release-work], we'll work on the items below:
For [v0.92][github-next-release-work], we'll work on the items below:
- Continued Command Palette polish
- New UI automation tests
- New UI Automation tests
- Working on installer upgrades
- Working on shortcut conflict detection
- Upgrading Keyboard Manager's editor UI
- Stability, bug fixes

View File

@@ -55,7 +55,7 @@ The `OneFuzzConfig.json` file provides critical information for deploying fuzzin
],
"adoTemplate": [
{
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"jobNotificationEmail": "PowerToys@microsoft.com"
}
],

View File

@@ -16,7 +16,7 @@
// project, where bugs will be filed
"org": "microsoft",
"project": "OS",
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"AreaPath": "OS\\Windows Client and Services\\WinPD\\DFX-Developer Fundamentals and Experiences\\DEFT\\SALT",
"IterationPath": "OS\\Future"
},

View File

@@ -16,7 +16,7 @@
// project, where bugs will be filed
"org": "microsoft",
"project": "OS",
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"AreaPath": "OS\\Windows Client and Services\\WinPD\\DFX-Developer Fundamentals and Experiences\\DEFT\\SALT",
"IterationPath": "OS\\Future"
},
@@ -57,7 +57,7 @@
// project, where bugs will be filed
"org": "microsoft",
"project": "OS",
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"AreaPath": "OS\\Windows Client and Services\\WinPD\\DFX-Developer Fundamentals and Experiences\\DEFT\\SALT",
"IterationPath": "OS\\Future"
},
@@ -98,7 +98,7 @@
// project, where bugs will be filed
"org": "microsoft",
"project": "OS",
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"AreaPath": "OS\\Windows Client and Services\\WinPD\\DFX-Developer Fundamentals and Experiences\\DEFT\\SALT",
"IterationPath": "OS\\Future"
},
@@ -139,7 +139,7 @@
// project, where bugs will be filed
"org": "microsoft",
"project": "OS",
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"AreaPath": "OS\\Windows Client and Services\\WinPD\\DFX-Developer Fundamentals and Experiences\\DEFT\\SALT",
"IterationPath": "OS\\Future"
},

View File

@@ -264,17 +264,6 @@ public partial class ContentPageViewModel : PageViewModel, ICommandBarContext
if (model != null)
{
model.ItemsChanged -= Model_ItemsChanged;
if (model is IDisposable disposableModel)
{
try
{
disposableModel.Dispose();
}
catch
{
// Ignore exceptions during cleanup
}
}
}
}
}

View File

@@ -571,17 +571,6 @@ public partial class ListViewModel : PageViewModel, IDisposable
if (model != null)
{
model.ItemsChanged -= Model_ItemsChanged;
if (model is IDisposable disposableModel)
{
try
{
disposableModel.Dispose();
}
catch
{
// Ignore exceptions during cleanup
}
}
}
}
}

View File

@@ -243,17 +243,6 @@ public partial class PageViewModel : ExtensionObjectViewModel, IPageContext
if (model != null)
{
model.PropChanged -= Model_PropChanged;
if (model is IDisposable disposableModel)
{
try
{
disposableModel.Dispose();
}
catch
{
// Ignore exceptions during cleanup
}
}
}
}
}

View File

@@ -18,7 +18,7 @@ using WinRT;
namespace Microsoft.CmdPal.UI.ViewModels;
public partial class ShellViewModel(IServiceProvider _serviceProvider, TaskScheduler _scheduler) : ObservableObject, IDisposable
public partial class ShellViewModel(IServiceProvider _serviceProvider, TaskScheduler _scheduler) : ObservableObject
{
[ObservableProperty]
public partial bool IsLoaded { get; set; } = false;
@@ -31,8 +31,6 @@ public partial class ShellViewModel(IServiceProvider _serviceProvider, TaskSched
private PageViewModel _currentPage = new LoadingPageViewModel(null, _scheduler);
private bool _isDisposed;
public PageViewModel CurrentPage
{
get => _currentPage;
@@ -203,48 +201,6 @@ public partial class ShellViewModel(IServiceProvider _serviceProvider, TaskSched
SetActiveExtension(null);
}
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)
{
_isDisposed = true;
if (disposing)
{
// Dispose managed resources
if (_mainListPage is IDisposable disposable)
{
try
{
disposable.Dispose();
}
catch (Exception)
{
}
}
if (_currentPage is IDisposable disposablePage)
{
try
{
disposablePage.Dispose();
}
catch
{
}
}
_mainListPage = null;
_activeExtension = null;
}
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// You may ask yourself, why aren't we using CsWin32 for this?
// The CsWin32 projected version includes some object marshalling, like so:
//

View File

@@ -82,7 +82,7 @@ public static class CalculateEngine
return default;
}
var decimalResult = Convert.ToDecimal(result, new CultureInfo("en-US"));
var decimalResult = Convert.ToDecimal(result, cultureInfo);
var roundedResult = FormatMax15Digits(decimalResult, cultureInfo);

View File

@@ -21,8 +21,6 @@ internal sealed partial class FallbackOpenFileItem : FallbackCommandItem, System
private uint _queryCookie = 10;
private bool _isDisposed;
public FallbackOpenFileItem()
: base(new NoOpCommand(), Resources.Indexer_Find_Path_fallback_display_title)
{
@@ -122,17 +120,9 @@ internal sealed partial class FallbackOpenFileItem : FallbackCommandItem, System
}
}
protected override void Dispose(bool disposing)
public void Dispose()
{
if (!_isDisposed)
{
_isDisposed = true;
if (disposing)
{
_searchEngine?.Dispose();
}
}
base.Dispose(disposing);
_searchEngine.Dispose();
GC.SuppressFinalize(this);
}
}

View File

@@ -21,7 +21,6 @@ internal sealed partial class ActionsListContextItem : CommandContextItem, IDisp
{
private readonly string fullPath;
private readonly List<CommandContextItem> actions = [];
private bool _isDisposed;
private static readonly Lock UpdateMoreCommandsLock = new();
private static ActionRuntime actionRuntime;
@@ -98,24 +97,14 @@ internal sealed partial class ActionsListContextItem : CommandContextItem, IDisp
}
}
protected override void Dispose(bool disposing)
public void Dispose()
{
if (!_isDisposed)
lock (UpdateMoreCommandsLock)
{
_isDisposed = true;
if (disposing)
if (actionRuntime != null)
{
lock (UpdateMoreCommandsLock)
{
if (actionRuntime != null)
{
actionRuntime.ActionCatalog.Changed -= ActionCatalog_Changed;
actionRuntime = null;
}
}
actionRuntime.ActionCatalog.Changed -= ActionCatalog_Changed;
}
}
base.Dispose(disposing);
}
}

View File

@@ -21,8 +21,6 @@ internal sealed partial class IndexerPage : DynamicListPage, IDisposable
private string initialQuery = string.Empty;
private bool _isDisposed;
public IndexerPage()
{
Id = "com.microsoft.indexer.fileSearch";
@@ -35,7 +33,6 @@ internal sealed partial class IndexerPage : DynamicListPage, IDisposable
public IndexerPage(string query, SearchEngine searchEngine, uint queryCookie, IList<IListItem> firstPageData)
{
disposeSearchEngine = false;
Icon = Icons.FileExplorer;
Name = Resources.Indexer_Title;
_searchEngine = searchEngine;
@@ -43,6 +40,7 @@ internal sealed partial class IndexerPage : DynamicListPage, IDisposable
_indexerListItems.AddRange(firstPageData);
initialQuery = query;
SearchText = query;
disposeSearchEngine = false;
}
public override void UpdateSearchText(string oldSearch, string newSearch)
@@ -78,21 +76,12 @@ internal sealed partial class IndexerPage : DynamicListPage, IDisposable
_searchEngine.Query(query, _queryCookie);
}
protected override void Dispose(bool disposing)
public void Dispose()
{
if (!_isDisposed)
if (disposeSearchEngine)
{
_isDisposed = true;
if (disposing)
{
if (disposeSearchEngine)
{
_searchEngine?.Dispose();
}
}
_searchEngine.Dispose();
GC.SuppressFinalize(this);
}
base.Dispose(disposing);
}
}

View File

@@ -34,8 +34,6 @@ internal sealed partial class WinGetExtensionPage : DynamicListPage, IDisposable
private IEnumerable<CatalogPackage>? _results;
private bool _disposed;
public static IconInfo WinGetIcon { get; } = IconHelpers.FromRelativePath("Assets\\WinGet.svg");
public static IconInfo ExtensionsIcon { get; } = IconHelpers.FromRelativePath("Assets\\Extension.svg");
@@ -191,7 +189,7 @@ internal sealed partial class WinGetExtensionPage : DynamicListPage, IDisposable
return [];
}
var searchDebugText = $"{query}{(HasTag ? "+" : string.Empty)}{_tag}";
string searchDebugText = $"{query}{(HasTag ? "+" : string.Empty)}{_tag}";
Logger.LogDebug($"Starting search for '{searchDebugText}'");
HashSet<CatalogPackage> results = new(new PackageIdCompare());
@@ -273,19 +271,7 @@ internal sealed partial class WinGetExtensionPage : DynamicListPage, IDisposable
return results;
}
protected override void Dispose(bool disposing)
{
if (!_disposed)
{
_disposed = true;
if (disposing)
{
_cancellationTokenSource?.Dispose();
}
}
base.Dispose(disposing);
}
public void Dispose() => throw new NotImplementedException();
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "I just like it")]

View File

@@ -46,17 +46,21 @@ internal sealed partial class WindowWalkerListPage : DynamicListPage, IDisposabl
public override IListItem[] GetItems() => Query(SearchText).ToArray();
protected override void Dispose(bool disposing)
public void Dispose()
{
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
public void Dispose(bool disposing)
{
if (!_disposed)
{
_disposed = true;
if (disposing)
{
_cancellationTokenSource?.Dispose();
_disposed = true;
}
}
base.Dispose(disposing);
}
}

View File

@@ -10,39 +10,12 @@ namespace Microsoft.CommandPalette.Extensions.Toolkit;
// asynchronously, so as to not block the extension app while it's being
// processed in the host app.
// (also consider this for ItemsChanged in ListPage)
public partial class BaseObservable : INotifyPropChanged, IDisposable
public partial class BaseObservable : INotifyPropChanged
{
private bool _isDisposed;
public event TypedEventHandler<object, IPropChangedEventArgs>? PropChanged;
// Protected implementation of Dispose pattern.
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)
{
_isDisposed = true;
if (disposing)
{
PropChanged = null;
}
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected void OnPropertyChanged(string propertyName)
{
if (_isDisposed)
{
return;
}
try
{
// TODO #181 - This is dangerous! If the original host goes away,

View File

@@ -6,7 +6,7 @@ using Windows.Foundation;
namespace Microsoft.CommandPalette.Extensions.Toolkit;
public partial class ListPage : Page, IListPage, IDisposable
public partial class ListPage : Page, IListPage
{
private string _placeholderText = string.Empty;
private string _searchText = string.Empty;
@@ -15,7 +15,6 @@ public partial class ListPage : Page, IListPage, IDisposable
private IFilters? _filters;
private IGridProperties? _gridProperties;
private ICommandItem? _emptyContent;
private bool _isDisposed;
public event TypedEventHandler<object, IItemsChangedEventArgs>? ItemsChanged;
@@ -95,28 +94,8 @@ public partial class ListPage : Page, IListPage, IDisposable
{
}
protected override void Dispose(bool disposing)
{
if (!_isDisposed)
{
_isDisposed = true;
if (disposing)
{
ItemsChanged = null;
}
}
base.Dispose(disposing);
}
protected void RaiseItemsChanged(int totalItems = -1)
{
if (_isDisposed)
{
return;
}
try
{
// TODO #181 - This is the same thing that BaseObservable has to deal with.

View File

@@ -16,7 +16,7 @@
// project, where bugs will be filed
"org": "microsoft",
"project": "OS",
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"AreaPath": "OS\\Windows Client and Services\\WinPD\\DFX-Developer Fundamentals and Experiences\\DEFT\\SALT",
"IterationPath": "OS\\Future"
},

View File

@@ -11,7 +11,7 @@
// project, where bugs will be filed
"org": "microsoft",
"project": "OS",
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"AreaPath": "OS\\Windows Client and Services\\WinPD\\DFX-Developer Fundamentals and Experiences\\DEFT\\SALT",
"IterationPath": "OS\\Future"
},

View File

@@ -19,7 +19,7 @@
// project, where bugs will be filed
"org": "microsoft",
"project": "OS",
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"AreaPath": "OS\\Windows Client and Services\\WinPD\\DFX-Developer Fundamentals and Experiences\\DEFT\\SALT",
"IterationPath": "OS\\Future"
},
@@ -60,7 +60,7 @@
// project, where bugs will be filed
"org": "microsoft",
"project": "OS",
"AssignedTo": "leilzh@microsoft.com",
"AssignedTo": "PowerToys@microsoft.com",
"AreaPath": "OS\\Windows Client and Services\\WinPD\\DFX-Developer Fundamentals and Experiences\\DEFT\\SALT",
"IterationPath": "OS\\Future"
},