mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-01-05 03:47:01 +01:00
Compare commits
7 Commits
releaseChe
...
leilzh/fin
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0befdaed5d | ||
|
|
bd333ffc29 | ||
|
|
693a131036 | ||
|
|
fc87f03fd5 | ||
|
|
9850a19aac | ||
|
|
9c3df634b4 | ||
|
|
13731e8af1 |
1
.github/actions/spell-check/expect.txt
vendored
1
.github/actions/spell-check/expect.txt
vendored
@@ -1315,6 +1315,7 @@ PRODUCTVERSION
|
||||
Progman
|
||||
programdata
|
||||
projectname
|
||||
projitems
|
||||
PROPERTYKEY
|
||||
Propset
|
||||
PROPVARIANT
|
||||
|
||||
196
README.md
196
README.md
@@ -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.94%22
|
||||
[github-current-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.93%22
|
||||
[ptUserX64]: https://github.com/microsoft/PowerToys/releases/download/v0.93.0/PowerToysUserSetup-0.93.0-x64.exe
|
||||
[ptUserArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.93.0/PowerToysUserSetup-0.93.0-arm64.exe
|
||||
[ptMachineX64]: https://github.com/microsoft/PowerToys/releases/download/v0.93.0/PowerToysSetup-0.93.0-x64.exe
|
||||
[ptMachineArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.93.0/PowerToysSetup-0.93.0-arm64.exe
|
||||
[github-next-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.95%22
|
||||
[github-current-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.94%22
|
||||
[ptUserX64]: https://github.com/microsoft/PowerToys/releases/download/v0.94.0/PowerToysUserSetup-0.94.0-wix5-x64.exe
|
||||
[ptUserArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.94.0/PowerToysUserSetup-0.94.0-wix5-arm64.exe
|
||||
[ptMachineX64]: https://github.com/microsoft/PowerToys/releases/download/v0.94.0/PowerToysSetup-0.94.0-wix5-x64.exe
|
||||
[ptMachineArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.94.0/PowerToysSetup-0.94.0-wix5-arm64.exe
|
||||
|
||||
| Description | Filename |
|
||||
|----------------|----------|
|
||||
| Per user - x64 | [PowerToysUserSetup-0.93.0-x64.exe][ptUserX64] |
|
||||
| Per user - ARM64 | [PowerToysUserSetup-0.93.0-arm64.exe][ptUserArm64] |
|
||||
| Machine wide - x64 | [PowerToysSetup-0.93.0-x64.exe][ptMachineX64] |
|
||||
| Machine wide - ARM64 | [PowerToysSetup-0.93.0-arm64.exe][ptMachineArm64] |
|
||||
| Per user - x64 | [PowerToysUserSetup-0.94.0-wix5-x64.exe][ptUserX64] |
|
||||
| Per user - ARM64 | [PowerToysUserSetup-0.94.0-wix5-arm64.exe][ptUserArm64] |
|
||||
| Machine wide - x64 | [PowerToysSetup-0.94.0-wix5-x64.exe][ptMachineX64] |
|
||||
| Machine wide - ARM64 | [PowerToysSetup-0.94.0-wix5-arm64.exe][ptMachineArm64] |
|
||||
|
||||
This is our preferred method.
|
||||
|
||||
@@ -93,118 +93,142 @@ 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.93 - Aug 2025 Update
|
||||
### 0.94 - Sep 2025 Update
|
||||
|
||||
In this release, we focused on new features, stability, optimization improvements, and automation.
|
||||
|
||||
**✨Highlights**
|
||||
|
||||
- PowerToys settings debuts a modern, card-based dashboard with clearer descriptions and faster navigation for a streamlined user experience.
|
||||
- Command Palette had over 99 issues resolved, including bringing back Clipboard History, adding context menu shortcuts, pinning favorite apps, and supporting history in Run.
|
||||
- Command Palette reduced its startup memory usage by ~15%, load time by ~40%, built-in extensions loading time by ~70%, and installation size by ~55%—all due to using the full Ahead-of-Time (AOT) compilation mode in Windows App SDK.
|
||||
- Peek now supports instant previews and embedded thumbnails for Binary G-code (.bgcode) 3D printing files, making it easy to inspect models at a glance. Thanks [@pedrolamas](https://github.com/pedrolamas)!
|
||||
- Mouse Utilities introduces a new spotlight highlighting mode that dims the screen and draws attention to your cursor, perfect for presentations.
|
||||
- Test coverage improvements for multiple PowerToys modules including Command Palette, Advanced Paste, Peek, Text Extractor, and PowerRename — ensuring better reliability and quality, with over 600 new unit tests (mostly for Command Palette) and doubled UI automation coverage.
|
||||
- The installer was upgraded to WiX 5 after WiX 3 reached end-of-life; this move improved installer security, reliability, and community support.
|
||||
- PowerToys Settings added a Settings search with fuzzy matching, suggestions, a results page, and UX polish to make finding options faster.
|
||||
- A comprehensive hotkey conflict detection system was introduced in Settings to surface and help resolve conflicting shortcuts.
|
||||
- Command Palette received stability, accessibility, and UX improvements — fixed single‑click activation; added support for path shortcuts (~, /, \\) in file search; fixed race conditions and cancellation issues; and improved diagnostics to reduce memory leaks.
|
||||
- Peek added XML syntax support for .shproj and .projitems in its Monaco preview. Thanks [@rezanid](https://github.com/rezanid)!
|
||||
- Context menu registration was moved from the installer to runtime to avoid loading disabled modules (runtime registrations).
|
||||
- Mouse Utilities added a “Gliding cursor” accessibility feature to Mouse Pointer Crosshairs for single‑button cursor movement and clicking. Thanks [@mikehall-ms](https://github.com/mikehall-ms)!
|
||||
|
||||
### Always On Top
|
||||
|
||||
- Fixed the border hover cursor so it shows the arrow instead of the wait cursor. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
|
||||
|
||||
### Command Palette
|
||||
|
||||
- Ensured screen readers are notified when the selected item in the list changes for better accessibility.
|
||||
- Fixed command title changes not being properly notified to screen readers. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Made icon controls excluded from keyboard navigation by default for better accessibility. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Improved UI design with better text sizing and alignment.
|
||||
- Fixed keyboard shortcuts to work better in text boxes and context menus.
|
||||
- Added right-click context menus with critical command styling and separators.
|
||||
- Improved various context menu issues, improving item selection, handling of long titles, search bar text scaling, initial item behavior, and primary button functionality.
|
||||
- Fixed context menu crashes with better type handling.
|
||||
- Fixed "Reload" command to work with both uppercase and lowercase letters.
|
||||
- Added mouse back button support for easier navigation. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Fixed Alt+Left Arrow navigation not working when search box contains text. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Updated back button tooltip to show keyboard shortcut information. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Fixed Command Palette window not appearing properly when activated. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Fixed Command Palette window staying hidden from taskbar after File Explorer restarts. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Fixed window focus not returning to previous app properly.
|
||||
- Fixed Command Palette window to always appear on top when shown and move to bottom when hidden. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Fixed window hiding to properly work on UI thread. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Fixed crashes and improved stability with better synchronization of Command list updates. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Improved extension disposal with better error handling to prevent crashes. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Improved stability by fixing a UI threading issue when loading more results, preventing possible crashes and ensuring the loading state resets if loading fails. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Enhanced icon loading stability with better exception handling. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Added thread safety to recent commands to prevent crashes. Thanks [@MaoShengelia](https://github.com/MaoShengelia)!
|
||||
- Fixed acrylic (frosted glass) system backdrop display issues by ensuring proper UI thread handling. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Applied single-click activation only to pointer input; keyboard always activates immediately. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Let context menus open at the cursor by removing window-bound constraints. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Made error messages clearer with timestamps, HRESULTs, and full details for easier diagnosis. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Prevented crashes and improved robustness when updating providers without commands. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Ensured the Settings window reliably comes to the front when opened. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Replaced the Clipboard History icon with a colorful Fluent icon. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Hardened ContentIcon to avoid duplicate parenting and improve diagnostics. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Standardized null checks using C# pattern matching for safer behavior.
|
||||
- Improved accessibility by focusing the activation shortcut dialog and making text reachable. Thanks [@chatasweetie](https://github.com/chatasweetie)!
|
||||
- Moved the extension SDK to a stable Windows SDK and cleaned up message namespaces.
|
||||
- Added path shortcuts: ~ to home, and / or \\ to system root, plus UNC support. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
|
||||
- Fixed a race in cancellation handling to avoid InvalidOperationException. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Aligned separator styling with WinUI 3 for consistent visuals. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Added ARM64 PDBs to the Extensions SDK NuGet for better debugging.
|
||||
- Added single-select filters to DynamicListPage and updated Windows Services sample.
|
||||
- Updated main page placeholder text to better describe what can be searched. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Removed explicit WinAppSDK/WebView2 dependencies from toolkit and API. Thanks [@rluengen](https://github.com/rluengen)!
|
||||
- Added a local keyboard hook to handle the GoBack key reliably. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Propagated alias changes safely and resolved conflicts across view models.
|
||||
- Allowed providers to override Dispose with a virtual method.
|
||||
- Fixed memory leaks by cleaning up removed or cancelled list items.
|
||||
- Sorted DateTime extension results by relevance for better usability.
|
||||
- Reduced search text “jiggling” by avoiding redundant change notifications.
|
||||
- Centralized automation notifications in a UIHelper for better accessibility. Thanks [@chatasweetie](https://github.com/chatasweetie)!
|
||||
- Preserved Adaptive Card action types during trimming via DynamicDependency.
|
||||
- Added an acrylic backdrop and refined styling to the context menu. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Prevented disposed pages and Settings windows from handling stale messages. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Made the extension API easier to evolve without breaking clients.
|
||||
- Added “evil” sample pages to help reproduce tricky bugs.
|
||||
- Fixed WinGet trim-safety issues by replacing LINQ with manual iteration.
|
||||
- Cancelled stale list fetches to avoid older results overwriting newer ones in CmdPal.
|
||||
|
||||
### Command Palette extensions
|
||||
|
||||
- Added settings to each provider to control which fallback commands are enabled. Thanks [@jiripolasek](https://github.com/jiripolasek)! for fixing a regression in this feature.
|
||||
- Added sample code showing how Command Palette extensions can track when their pages are loaded or unloaded. [Check it out here](./src/modules/cmdpal/ext/SamplePagesExtension/OnLoadPage.cs).
|
||||
- Fixed *Calculator* to accept regular spaces in numbers that use space separators. Thanks [@PesBandi](https://github.com/PesBandi)!
|
||||
- Added a new setting to *Calculator* to make "Copy" the primary button (replacing “Save”) and enable "Close on Enter", streamlining the workflow. Thanks [@PesBandi](https://github.com/PesBandi)!
|
||||
- Improved *Apps* indexing error handling and removed obsolete code. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
|
||||
- Prevented apps from showing in search when the *Apps* extension is disabled. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Added ability to pin/unpin *Apps* using Ctrl+P shortcut.
|
||||
- Added keyboard shortcuts to the *Apps* context menu items for faster access.
|
||||
- Added all file context menu options to the *Apps* items context menu, making all file actions available there for better functionality.
|
||||
- Streamlined All *Apps* extension settings by removing redundant descriptions, making the UI clearer.
|
||||
- Added command history to the *Run* page for easier access to previous commands.
|
||||
- Fixed directory path handling in *Run* fallback for better file navigation.
|
||||
- Fixed URL fallback item hiding properly in *Web Search* extension when search query becomes invalid. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Added proper empty state message for *Web Search* extension when no results found. Thanks [@jiripolasek](https://github.com/jiripolasek)!
|
||||
- Added fallback command to *Windows Settings* extension for better search results.
|
||||
- Re-enabled *Clipboard History* feature with proper window handling.
|
||||
- Improved *Add Bookmark* extension to automatically detect file, folder, or URL types without manual input.
|
||||
- Updated terminology from "Kill process" to "End task" in *Window Walker* for consistency with Windows.
|
||||
- Fixed minor grammar error in SamplePagesExtension code comments. Thanks [@purofle](https://github.com/purofle)!
|
||||
- Improved empty states and ranking logic for multiple extensions. Thanks [@htcfreek](https://github.com/htcfreek)!
|
||||
- Added app icons to the All Apps "Run" context command when available.
|
||||
- Restored missing builtin icons by standardizing extension dependencies.
|
||||
- Unblocked local deployment by adding WinAppSDK to two sample extensions.
|
||||
|
||||
### Hosts File Editor
|
||||
|
||||
- Added a "No leading spaces" option so active hosts entries can start at column 0 even when others are disabled. Thanks [@mohammed-saalim](https://github.com/mohammed-saalim)!
|
||||
|
||||
### Image Resizer
|
||||
|
||||
- Fixed Image Resizer localization by installing satellite resources under the WinUI 3 apps culture path.
|
||||
|
||||
### Mouse Utilities
|
||||
|
||||
- Added a new spotlight highlighting mode that creates a large transparent circle around your cursor with a backdrop effect, providing an alternative to the traditional circle highlight. Perfect for presentations where you want to focus attention on a specific area while dimming the rest of the screen.
|
||||
- Introduced "Gliding cursor" to control the pointer and click with a single hotkey for better accessibility. Thanks [@mikehall-ms](https://github.com/mikehall-ms)!
|
||||
|
||||
### Mouse Without Borders
|
||||
|
||||
- Blocked Easy Mouse from switching machines during fullscreen apps, with an allow-list for exceptions. Thanks [@dot-tb](https://github.com/dot-tb)!
|
||||
|
||||
### Peek
|
||||
|
||||
- Added preview and thumbnail support for Binary G-code (.bgcode) files used in 3D printing. You can now see embedded thumbnails and preview these compressed 3D printing files directly in Peek and File Explorer. Thanks [@pedrolamas](https://github.com/pedrolamas)!
|
||||
- Added Visual Studio shared project file types to XML preview and fixed bgcode handler registration. Thanks [@rezanid](https://github.com/rezanid)!
|
||||
- Fixes bgcode preview handler registration and events for reliable previews. Thanks [@pedrolamas](https://github.com/pedrolamas)!
|
||||
|
||||
### PowerRename
|
||||
|
||||
- Changed the Explorer accelerator key to PowErRename to avoid clashing with the New menu. Thanks [@aaron-ni](https://github.com/aaron-ni)!
|
||||
|
||||
### Quick Accent
|
||||
|
||||
- Added Vietnamese language support to Quick Accent, mappings for Vietnamese vowels (a, e, i, o, u, y) and the letter d. Thanks [@octastylos-pseudodipteros](https://github.com/octastylos-pseudodipteros)!
|
||||
- Remembered character usage across sessions so frequently used accents appear first. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
|
||||
- Added Maltese language support with specific characters and the Euro symbol. Thanks [@rovercoder](https://github.com/rovercoder)!
|
||||
- Reduced GPU usage issues by making the window Topmost only when the picker is visible. Thanks [@daverayment](https://github.com/daverayment)!
|
||||
|
||||
### Settings
|
||||
|
||||
- Completely redesigned the Settings dashboard with a modern card-based layout featuring organized sections for quick actions and shortcuts overview, replacing the old module list.
|
||||
- Rewrote setting descriptions to be more concise and follow Windows writing style guidelines, making them easier to understand.
|
||||
- Improved formatting and readability of release notes in the "What's New" section with better typography and spacing.
|
||||
- Added missing deep link support for various settings pages (Peek, Quick Accent, PowerToys Run, etc.) so you can jump directly to specific settings.
|
||||
- Resolved an issue where the settings page header would drift away from its position when resizing the settings window.
|
||||
- Resolved a settings crash related to incompatible property names in ZoomIt configuration.
|
||||
- Added telemetry to track usage of the new shortcut conflict detection workflow.
|
||||
- Moved the shutdown action from the title bar to a footer menu item with confirmation. Thanks [@davidegiacometti](https://github.com/davidegiacometti)!
|
||||
- Implemented comprehensive hotkey conflict detection with a dedicated resolution dialog.
|
||||
- Added branded visuals for Office and Copilot keys in the KeyVisual control.
|
||||
- Introduced Settings search with fuzzy matching and navigation to specific controls.
|
||||
- Corrected Spanish localization so product names like Awake remain in English across Settings and OOBE.
|
||||
- Simplified the Advanced Paste description in Settings for quicker reading and consistent capitalization. Thanks [@OldUser101](https://github.com/OldUser101)!
|
||||
- Localized conflict messages in the conflict window and dialog.
|
||||
|
||||
### Installer
|
||||
|
||||
- Upgraded the installer to WiX 5 with silent "Files in Use" handling for smoother winget installs.
|
||||
- Switched Win10 context menu modules to runtime registration and added cleanup on uninstall to avoid stale entries.
|
||||
|
||||
### Documentation
|
||||
|
||||
- Added detailed step-by-step instructions for first-time developers building the Command Palette module, including prerequisites and Visual Studio setup guidance. Thanks [@chatasweetie](https://github.com/chatasweetie)!
|
||||
- **Fixed Broken SDK Link**: Corrected a broken markdown link in the Command Palette SDK README that was pointing to an incorrect directory path. Thanks [@ChrisGuzak](https://github.com/ChrisGuzak)!
|
||||
- Added documentation for the "Open With Cursor" plugin that enables opening Visual Studio and VS Code recent files using Cursor AI. Thanks [@VictorNoxx](https://github.com/VictorNoxx)!
|
||||
- Added documentation for two new community plugins - Hotkeys plugin for creating custom keyboard shortcuts, and RandomGen plugin for generating random data like passwords, colors, and placeholder text. Thanks [@ruslanlap](https://github.com/ruslanlap)!
|
||||
- Adds docs for building the installer locally and testing winget installs.
|
||||
- Fixed a broken style guide link in developer documentation. Thanks [@denizmaral](https://github.com/denizmaral)!
|
||||
|
||||
### Development
|
||||
|
||||
- Updated .NET libraries to 9.0.8 for performance and security. Thanks [@snickler](https://github.com/snickler)!
|
||||
- Updated the spell check system to version 0.0.25 with better GitHub integration and SARIF reporting, plus fixed numerous spelling errors throughout the codebase including property names and documentation. Thanks [@jsoref](https://github.com/jsoref)!
|
||||
- Cleaned up spelling check configuration to eliminate false positives and excessive noise that was appearing in every pull request, making the development process smoother.
|
||||
- Replaced NuGet feed with Azure Artifacts for better package management.
|
||||
- Implemented configurable UI test pipeline that can use pre-built official releases instead of building everything from scratch, reducing test execution time from 2+ hours.
|
||||
- Replaced brittle pixel-by-pixel image comparison with perceptual hash (pHash) technology that's more robust to minor rendering differences - no more test failures due to anti-aliasing or compression artifacts.
|
||||
- Reduced CI/fuzzing/UI test timeouts from 4 hours to 90 minutes, dramatically improving developer feedback loops and preventing long waits when builds get stuck.
|
||||
- Standardized test project naming across the entire codebase and improved pipeline result identification by adding platform/install mode context to test run titles. Thanks [@khmyznikov](https://github.com/khmyznikov)!
|
||||
- Added comprehensive UI test suites for multiple PowerToys modules including Command Palette, Advanced Paste, Peek, Text Extractor, and PowerRename - ensuring better reliability and quality.
|
||||
- Enhanced UI test automation with command-line argument support, better session management, and improved element location methods using pattern matching to avoid failures from minor differences in exact matches.
|
||||
- Excluded test and coverage DLLs from BinSkim scans to cut false positives and speed up security analysis.
|
||||
- Simplified NOTICE maintenance by removing version numbers and filtering out Microsoft/System packages.
|
||||
- Improved NuGet dependency validation to prevent package downgrades and catch issues during restore.
|
||||
- Updated UTF.Unknown to a modern version to improve compatibility without breaking changes. Thanks [@304NotModified](https://github.com/304NotModified)!
|
||||
- Refreshed package catalog in CI before installing dependencies to prevent Linux workflow failures.
|
||||
- Refactored CmdPal tests with dependency injection and added coverage for queries and settings.
|
||||
- Added unit tests to verify Close on Enter swaps Copy/Save as expected. Thanks [@mohammed-saalim](https://github.com/mohammed-saalim)!
|
||||
- Added accessibility IDs to CmdPal UI for stable UI tests.
|
||||
- Rewrote system command tests with a new test base and cleaner patterns.
|
||||
- Added unit tests for WebSearch and Shell extensions with mockable settings.
|
||||
- Added unit tests and abstractions for Apps and Bookmarks extensions.
|
||||
- Cleans up AI‑generated tests; adds meaningful query tests across extensions.
|
||||
- Removed the obsolete debug dialog from Settings for a smoother developer loop.
|
||||
|
||||
### What is being planned over the next few releases
|
||||
|
||||
For [v0.94][github-next-release-work], we'll work on the items below:
|
||||
For [v0.95][github-next-release-work], we'll work on the items below:
|
||||
|
||||
- Continued Command Palette polish
|
||||
- Working on Shortcut Guide v2 (Thanks [@noraa-junker](https://github.com/noraa-junker)!)
|
||||
- Working on upgrading the installer to WiX 5
|
||||
- Working on shortcut conflict detection
|
||||
- Working on setting search
|
||||
- Upgrading Keyboard Manager's editor UI
|
||||
- UI tweaking utility with day/night theme switcher
|
||||
- DSC v3 support for top utilities
|
||||
- New UI automation tests
|
||||
- Stability, bug fixes
|
||||
|
||||
|
||||
211
combine_pr_with_ai_overview.ps1
Normal file
211
combine_pr_with_ai_overview.ps1
Normal file
@@ -0,0 +1,211 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]$StartCommit
|
||||
)
|
||||
|
||||
Write-Host "Combining PR data with AI Pull Request Overview..." -ForegroundColor Green
|
||||
Write-Host "Start commit: $StartCommit" -ForegroundColor Yellow
|
||||
|
||||
# Check if required files exist
|
||||
$prFile = "stable_branch_prs_filtered.txt"
|
||||
$copilotFile = "stable_branch_copilot_reviews.json"
|
||||
|
||||
if (-not (Test-Path $prFile)) {
|
||||
Write-Host "Error: $prFile not found. Please run get_stable_branch_prs.ps1 first." -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not (Test-Path $copilotFile)) {
|
||||
Write-Host "Error: $copilotFile not found. Please run get_copilot_reviews.ps1 first." -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Read the Copilot reviews data
|
||||
$copilotData = Get-Content $copilotFile -Raw | ConvertFrom-Json
|
||||
Write-Host "Loaded $($copilotData.reviews.Count) Copilot reviews" -ForegroundColor Cyan
|
||||
|
||||
# Create a hashtable to store PR Overview by PR number
|
||||
$prOverviews = @{}
|
||||
|
||||
# Extract Pull Request Overview from Copilot reviews
|
||||
Write-Host "Processing $($copilotData.reviews.Count) reviews..." -ForegroundColor Yellow
|
||||
$reviewCount = 0
|
||||
foreach ($review in $copilotData.reviews) {
|
||||
$reviewCount++
|
||||
if ($reviewCount % 20 -eq 0) {
|
||||
Write-Host " Processed $reviewCount reviews..." -ForegroundColor Gray
|
||||
}
|
||||
|
||||
$prNumber = $review.pr_number
|
||||
$reviewBody = $review.review_body
|
||||
$commentBody = $review.comment_body
|
||||
|
||||
# Look for "## Pull Request Overview" in review body
|
||||
if ($reviewBody -and $reviewBody.Contains("## Pull Request Overview")) {
|
||||
# Extract content after "## Pull Request Overview"
|
||||
$startIndex = $reviewBody.IndexOf("## Pull Request Overview") + "## Pull Request Overview".Length
|
||||
$remaining = $reviewBody.Substring($startIndex).Trim()
|
||||
|
||||
# Find the end of the overview section
|
||||
$endPatterns = @("### ", "## ", "---", "<details>")
|
||||
$endIndex = $remaining.Length
|
||||
foreach ($pattern in $endPatterns) {
|
||||
$index = $remaining.IndexOf($pattern)
|
||||
if ($index -gt 0 -and $index -lt $endIndex) {
|
||||
$endIndex = $index
|
||||
}
|
||||
}
|
||||
|
||||
$overview = $remaining.Substring(0, $endIndex).Trim()
|
||||
if ($overview -and -not $prOverviews.ContainsKey($prNumber)) {
|
||||
Write-Host "Found overview for PR $prNumber" -ForegroundColor Green
|
||||
$prOverviews[$prNumber] = @{
|
||||
Content = $overview
|
||||
Source = "Review"
|
||||
Reviewer = $review.reviewer
|
||||
SubmittedAt = $review.submitted_at
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Also check comment body if no overview found yet
|
||||
if (-not $prOverviews.ContainsKey($prNumber) -and $commentBody -and $commentBody -match "## Pull Request Overview\\n\\n(.*?)(?=\\n###|\\n##|\\n---|\z)") {
|
||||
$overview = $matches[1].Trim() -replace '\\n', "`n"
|
||||
if ($overview) {
|
||||
$prOverviews[$prNumber] = @{
|
||||
Content = $overview
|
||||
Source = "Comment"
|
||||
Reviewer = $review.reviewer
|
||||
CreatedAt = $review.created_at
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "Found Pull Request Overviews for $($prOverviews.Count) PRs" -ForegroundColor Cyan
|
||||
|
||||
# Read PR data from filtered file
|
||||
$prContent = Get-Content $prFile -Raw
|
||||
|
||||
# Extract PR information using simpler approach
|
||||
$prBlocks = $prContent -split "={80}" | Where-Object { $_.Trim() -and $_.Contains("PR #") }
|
||||
|
||||
Write-Host "Processing $($prBlocks.Count) PR blocks..." -ForegroundColor Yellow
|
||||
|
||||
foreach ($block in $prBlocks) {
|
||||
if ($block -match "PR #(\d+) \[MERGED\]") {
|
||||
$prNumber = [int]$matches[1]
|
||||
|
||||
# Extract other fields
|
||||
if ($block -match "Title: (.*?)(?=\r?\n|\r)") { $title = $matches[1].Trim() }
|
||||
if ($block -match "Author: (.*?)(?=\r?\n|\r)") { $author = $matches[1].Trim() }
|
||||
if ($block -match "Created: (.*?)(?=\r?\n|\r)") { $created = $matches[1].Trim() }
|
||||
if ($block -match "Base: (.*?) \| Head: (.*?)(?=\r?\n|\r)") {
|
||||
$base = $matches[1].Trim()
|
||||
$head = $matches[2].Trim()
|
||||
}
|
||||
if ($block -match "URL: (.*?)(?=\r?\n|\r)") { $url = $matches[1].Trim() }
|
||||
|
||||
# Extract description
|
||||
if ($block -match "Description:\r?\n(.*?)$") {
|
||||
$description = $matches[1].Trim()
|
||||
} else {
|
||||
$description = ""
|
||||
}
|
||||
|
||||
$prInfo = @{
|
||||
PRNumber = $prNumber
|
||||
Title = $title
|
||||
Author = $author
|
||||
Created = $created
|
||||
Base = $base
|
||||
Head = $head
|
||||
URL = $url
|
||||
Description = $description
|
||||
AIOverview = $null
|
||||
HasAIOverview = $false
|
||||
}
|
||||
|
||||
# Check if we have AI overview for this PR
|
||||
if ($prOverviews.ContainsKey($prNumber)) {
|
||||
$overview = $prOverviews[$prNumber]
|
||||
$prInfo.AIOverview = $overview.Content
|
||||
$prInfo.HasAIOverview = $true
|
||||
}
|
||||
|
||||
$combinedData += $prInfo
|
||||
}
|
||||
}
|
||||
|
||||
$combinedData = @()
|
||||
Write-Host "Processed $($combinedData.Count) PRs total" -ForegroundColor Cyan
|
||||
$prsWithOverview = ($combinedData | Where-Object { $_.HasAIOverview }).Count
|
||||
Write-Host "PRs with AI Overview: $prsWithOverview" -ForegroundColor Green
|
||||
|
||||
# Generate combined output
|
||||
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
||||
$outputContent = @"
|
||||
PowerToys PRs with AI Pull Request Overview from stable branch after $StartCommit
|
||||
Generated: $timestamp
|
||||
Total PRs: $($combinedData.Count)
|
||||
PRs with AI Overview: $prsWithOverview
|
||||
================================================================================
|
||||
|
||||
"@
|
||||
|
||||
foreach ($pr in $combinedData) {
|
||||
$outputContent += @"
|
||||
PR #$($pr.PRNumber): $($pr.Title)
|
||||
URL: $($pr.URL)
|
||||
Author: $($pr.Author)
|
||||
Created: $($pr.Created)
|
||||
|
||||
## Original PR Description
|
||||
$($pr.Description)
|
||||
|
||||
"@
|
||||
|
||||
if ($pr.HasAIOverview) {
|
||||
$outputContent += @"
|
||||
## AI Pull Request Overview
|
||||
Reviewer: $($pr.AIReviewer)
|
||||
Review Date: $($pr.AIReviewDate)
|
||||
|
||||
$($pr.AIOverview)
|
||||
|
||||
"@
|
||||
} else {
|
||||
$outputContent += @"
|
||||
## AI Pull Request Overview
|
||||
(No AI overview available for this PR)
|
||||
|
||||
"@
|
||||
}
|
||||
|
||||
$outputContent += "`n" + "="*80 + "`n`n"
|
||||
}
|
||||
|
||||
# Save outputs
|
||||
$jsonFile = "combined_prs_with_ai_overview.json"
|
||||
$txtFile = "combined_prs_with_ai_overview.txt"
|
||||
|
||||
$combinedData | ConvertTo-Json -Depth 10 | Out-File -FilePath $jsonFile -Encoding UTF8
|
||||
$outputContent | Out-File -FilePath $txtFile -Encoding UTF8
|
||||
|
||||
Write-Host "`nFiles generated:" -ForegroundColor Green
|
||||
Write-Host "JSON: $(Resolve-Path $jsonFile)" -ForegroundColor Yellow
|
||||
Write-Host "TXT: $(Resolve-Path $txtFile)" -ForegroundColor Yellow
|
||||
|
||||
Write-Host "`nSummary:" -ForegroundColor Green
|
||||
Write-Host "--------"
|
||||
Write-Host "Start commit: $StartCommit"
|
||||
Write-Host "Total PRs processed: $($combinedData.Count)"
|
||||
Write-Host "PRs with AI Overview: $prsWithOverview"
|
||||
|
||||
if ($prsWithOverview -gt 0) {
|
||||
Write-Host "`nSample PRs with AI Overview:" -ForegroundColor Cyan
|
||||
$samplesWithOverview = $combinedData | Where-Object { $_.HasAIOverview } | Select-Object -First 3
|
||||
foreach ($sample in $samplesWithOverview) {
|
||||
Write-Host " PR #$($sample.PRNumber): $($sample.Title)"
|
||||
}
|
||||
}
|
||||
1044
combined_prs_with_ai_overview.json
Normal file
1044
combined_prs_with_ai_overview.json
Normal file
File diff suppressed because it is too large
Load Diff
367
get_stable_branch_prs.ps1
Normal file
367
get_stable_branch_prs.ps1
Normal file
@@ -0,0 +1,367 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]$StartCommit
|
||||
)
|
||||
|
||||
Write-Host "Getting PR data from stable branch after commit: $StartCommit" -ForegroundColor Green
|
||||
|
||||
# Check if we're in a git repository
|
||||
if (-not (Test-Path ".git")) {
|
||||
Write-Host "Error: This script must be run from a git repository root" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Check if stable branch exists
|
||||
$stableBranchExists = git branch -r | Where-Object { $_ -match "origin/stable" }
|
||||
if (-not $stableBranchExists) {
|
||||
Write-Host "Error: stable branch not found in remote" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Fetch latest changes
|
||||
Write-Host "Fetching latest changes..." -ForegroundColor Yellow
|
||||
git fetch origin
|
||||
|
||||
# Get commits from stable branch after the start commit
|
||||
Write-Host "Getting commits from stable branch after $StartCommit..." -ForegroundColor Yellow
|
||||
$commits = git log origin/stable --oneline --format="%H %s" "$StartCommit..origin/stable"
|
||||
|
||||
if (-not $commits) {
|
||||
Write-Host "No commits found after $StartCommit on stable branch" -ForegroundColor Yellow
|
||||
# Create empty file
|
||||
@() | Out-File -FilePath "stable_branch_prs_filtered.txt" -Encoding UTF8
|
||||
exit 0
|
||||
}
|
||||
|
||||
$commitArray = $commits | ForEach-Object {
|
||||
if ($_ -match "^([a-f0-9]+)\s+(.+)$") {
|
||||
@{
|
||||
Hash = $matches[1]
|
||||
Message = $matches[2]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "Found $($commitArray.Count) commits to process" -ForegroundColor Cyan
|
||||
|
||||
# Extract PR numbers from commit messages
|
||||
$prNumbers = @()
|
||||
foreach ($commit in $commitArray) {
|
||||
# Look for PR numbers in commit messages (common patterns)
|
||||
if ($commit.Message -match "#(\d+)" -or $commit.Message -match "PR\s*#?(\d+)" -or $commit.Message -match "\(#(\d+)\)") {
|
||||
$prNumber = [int]$matches[1]
|
||||
if ($prNumbers -notcontains $prNumber) {
|
||||
$prNumbers += $prNumber
|
||||
Write-Host "Found PR #$prNumber from commit: $($commit.Message.Substring(0, [Math]::Min(60, $commit.Message.Length)))" -ForegroundColor Gray
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($prNumbers.Count -eq 0) {
|
||||
Write-Host "No PR numbers found in commit messages" -ForegroundColor Yellow
|
||||
# Create empty file
|
||||
@() | Out-File -FilePath "stable_branch_prs_filtered.txt" -Encoding UTF8
|
||||
exit 0
|
||||
}
|
||||
|
||||
Write-Host "Found $($prNumbers.Count) unique PR numbers" -ForegroundColor Cyan
|
||||
|
||||
# Function to clean PR description
|
||||
function Remove-PRChecklistSection {
|
||||
param([string]$description)
|
||||
|
||||
if (-not $description) { return "(No description provided)" }
|
||||
|
||||
# Remove the entire "## PR Checklist" section but keep other sections
|
||||
$result = $description
|
||||
|
||||
# Remove HTML comments
|
||||
$result = $result -replace '<!--.*?-->', ''
|
||||
|
||||
# Split into sections and filter out PR Checklist
|
||||
if ($result -match '##\s+PR\s+Checklist') {
|
||||
# Find the start and end of the PR Checklist section
|
||||
$sections = $result -split '(?=##\s+)'
|
||||
$filteredSections = @()
|
||||
|
||||
foreach ($section in $sections) {
|
||||
# Skip PR Checklist section and Validation Steps section if empty
|
||||
if ($section -match '^##\s+PR\s+Checklist' -or
|
||||
$section -match '^##\s+Validation\s+Steps\s+Performed\s*$') {
|
||||
continue
|
||||
}
|
||||
$section = $section.Trim()
|
||||
if ($section) {
|
||||
$filteredSections += $section
|
||||
}
|
||||
}
|
||||
|
||||
$result = $filteredSections -join "`r`n`r`n"
|
||||
}
|
||||
|
||||
# Clean up extra whitespace
|
||||
$result = $result -replace '\r\n\s*\r\n+', "`r`n`r`n"
|
||||
$result = $result.Trim()
|
||||
|
||||
return $result
|
||||
}
|
||||
|
||||
# Function to extract AI Overview from PR comments and reviews
|
||||
function Get-AIOverviewFromComments {
|
||||
param([int]$prNumber)
|
||||
|
||||
try {
|
||||
# Get PR reviews first (Copilot reviews are usually here)
|
||||
$reviewsJson = gh pr view $prNumber --json reviews
|
||||
$reviewsData = $reviewsJson | ConvertFrom-Json
|
||||
|
||||
foreach ($review in $reviewsData.reviews) {
|
||||
# Check if this is a GitHub Copilot review
|
||||
$isGitHubCopilot = $review.author.login -match "copilot|github-actions|app/github-copilot" -or
|
||||
$review.body -match "github copilot|copilot|AI.*overview|AI.*summary" -or
|
||||
$review.authorAssociation -eq "APP"
|
||||
|
||||
if ($isGitHubCopilot -and $review.body) {
|
||||
# Look for various AI Overview patterns
|
||||
$overviewPatterns = @(
|
||||
'##\s*Pull\s*Request\s*Overview\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*AI\s*Overview\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*Summary\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*Overview\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*Pull\s*Request\s*Summary\s*([\s\S]*?)(?=##|$)'
|
||||
)
|
||||
|
||||
foreach ($pattern in $overviewPatterns) {
|
||||
if ($review.body -match $pattern) {
|
||||
$aiOverview = $matches[1].Trim()
|
||||
if ($aiOverview -and $aiOverview.Length -gt 20) {
|
||||
# Additional validation - make sure it's not just a header
|
||||
if ($aiOverview -match '\w+.*\w+') {
|
||||
return $aiOverview
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Get PR comments
|
||||
$commentsJson = gh pr view $prNumber --json comments
|
||||
$commentsData = $commentsJson | ConvertFrom-Json
|
||||
|
||||
foreach ($comment in $commentsData.comments) {
|
||||
# Check if this is a GitHub Copilot comment
|
||||
$isGitHubCopilot = $comment.author.login -match "github-actions|copilot|app/github-copilot" -or
|
||||
$comment.body -match "github copilot|copilot|AI.*overview|AI.*summary" -or
|
||||
$comment.authorAssociation -eq "APP"
|
||||
|
||||
if ($isGitHubCopilot) {
|
||||
# Look for various AI Overview patterns
|
||||
$overviewPatterns = @(
|
||||
'##\s*Pull\s*Request\s*Overview\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*AI\s*Overview\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*Summary\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*Overview\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*Pull\s*Request\s*Summary\s*([\s\S]*?)(?=##|$)'
|
||||
)
|
||||
|
||||
foreach ($pattern in $overviewPatterns) {
|
||||
if ($comment.body -match $pattern) {
|
||||
$aiOverview = $matches[1].Trim()
|
||||
if ($aiOverview -and $aiOverview.Length -gt 20) {
|
||||
# Additional validation - make sure it's not just a header
|
||||
if ($aiOverview -match '\w+.*\w+') {
|
||||
return $aiOverview
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# If not found in comments/reviews, also check the main PR body for AI-generated sections
|
||||
$prJson = gh pr view $prNumber --json body
|
||||
$prData = $prJson | ConvertFrom-Json
|
||||
|
||||
if ($prData.body) {
|
||||
$overviewPatterns = @(
|
||||
'##\s*Pull\s*Request\s*Overview\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*AI\s*Overview\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*Overview\s*([\s\S]*?)(?=##|$)',
|
||||
'##\s*Pull\s*Request\s*Summary\s*([\s\S]*?)(?=##|$)'
|
||||
)
|
||||
|
||||
foreach ($pattern in $overviewPatterns) {
|
||||
if ($prData.body -match $pattern) {
|
||||
$aiOverview = $matches[1].Trim()
|
||||
if ($aiOverview -and $aiOverview.Length -gt 20 -and $aiOverview -match '\w+.*\w+') {
|
||||
return $aiOverview
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $null
|
||||
} catch {
|
||||
Write-Host " Warning: Could not fetch comments/reviews for PR #$prNumber : $($_.Exception.Message)" -ForegroundColor Yellow
|
||||
return $null
|
||||
}
|
||||
}
|
||||
|
||||
# Check if GitHub CLI is available
|
||||
$ghAvailable = $false
|
||||
try {
|
||||
$null = gh --version
|
||||
$ghAvailable = $true
|
||||
Write-Host "GitHub CLI (gh) is available" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "GitHub CLI (gh) is not available. Will use simplified format." -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
$combinedData = @()
|
||||
$processedPRs = 0
|
||||
|
||||
foreach ($prNumber in $prNumbers | Sort-Object) {
|
||||
$processedPRs++
|
||||
Write-Host "Processing PR #$prNumber ($processedPRs/$($prNumbers.Count))..." -ForegroundColor Yellow
|
||||
|
||||
if ($ghAvailable) {
|
||||
try {
|
||||
# Get PR information using GitHub CLI
|
||||
$prJson = gh pr view $prNumber --json number,title,author,createdAt,baseRefName,headRefName,url,body,state,labels
|
||||
$prData = $prJson | ConvertFrom-Json
|
||||
|
||||
# Only process merged PRs
|
||||
if ($prData.state -eq "MERGED") {
|
||||
$author = $prData.author.login
|
||||
$created = $prData.createdAt
|
||||
$base = $prData.baseRefName
|
||||
$head = $prData.headRefName
|
||||
$description = Remove-PRChecklistSection -description $prData.body
|
||||
|
||||
# Get AI Overview from comments
|
||||
Write-Host " Fetching AI Overview..." -ForegroundColor Gray
|
||||
$aiOverview = Get-AIOverviewFromComments -prNumber $prNumber
|
||||
$hasAiOverview = $null -ne $aiOverview
|
||||
|
||||
if ($hasAiOverview) {
|
||||
Write-Host " ✓ Found AI Overview" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " - No AI Overview found" -ForegroundColor Gray
|
||||
}
|
||||
|
||||
# Process labels
|
||||
$labelNames = @()
|
||||
if ($prData.labels -and $prData.labels.Count -gt 0) {
|
||||
$labelNames = $prData.labels | ForEach-Object { $_.name }
|
||||
}
|
||||
|
||||
$prInfo = @{
|
||||
PRNumber = $prData.number
|
||||
Title = $prData.title
|
||||
Author = $author
|
||||
Created = $created
|
||||
Base = $base
|
||||
Head = $head
|
||||
URL = $prData.url
|
||||
Description = $description
|
||||
AIOverview = $aiOverview
|
||||
HasAIOverview = $hasAiOverview
|
||||
Labels = $labelNames
|
||||
}
|
||||
|
||||
$combinedData += $prInfo
|
||||
Write-Host " ✓ PR #${prNumber}: $($prData.title)" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " - PR #${prNumber}: Skipped (not merged, state: $($prData.state))" -ForegroundColor Gray
|
||||
}
|
||||
} catch {
|
||||
Write-Host " × Error getting PR #$prNumber : $($_.Exception.Message)" -ForegroundColor Red
|
||||
|
||||
# Fallback: create basic entry from commit information
|
||||
$relatedCommits = $commitArray | Where-Object { $_.Message -match "#$prNumber|PR\s*#?$prNumber|\(#$prNumber\)" }
|
||||
if ($relatedCommits) {
|
||||
$firstCommit = $relatedCommits[0]
|
||||
$title = $firstCommit.Message -replace "#$prNumber|\(#$prNumber\)|PR\s*#?$prNumber", "" -replace "^\s+|\s+$", ""
|
||||
|
||||
$prInfo = @{
|
||||
PRNumber = $prNumber
|
||||
Title = $title
|
||||
Author = "(Unknown)"
|
||||
Created = "(Unknown)"
|
||||
Base = "stable"
|
||||
Head = "(Unknown)"
|
||||
URL = "https://github.com/microsoft/PowerToys/pull/$prNumber"
|
||||
Description = "(Unable to fetch PR details - inferred from commit message)"
|
||||
AIOverview = $null
|
||||
HasAIOverview = $false
|
||||
Labels = @()
|
||||
}
|
||||
|
||||
$combinedData += $prInfo
|
||||
}
|
||||
}
|
||||
} else {
|
||||
# Fallback when GitHub CLI is not available
|
||||
$relatedCommits = $commitArray | Where-Object { $_.Message -match "#$prNumber|PR\s*#?$prNumber|\(#$prNumber\)" }
|
||||
if ($relatedCommits) {
|
||||
$firstCommit = $relatedCommits[0]
|
||||
$title = $firstCommit.Message -replace "#$prNumber|\(#$prNumber\)|PR\s*#?$prNumber", "" -replace "^\s+|\s+$", ""
|
||||
|
||||
# Get commit date
|
||||
$commitDate = git show -s --format="%ci" $firstCommit.Hash
|
||||
|
||||
$prInfo = @{
|
||||
PRNumber = $prNumber
|
||||
Title = $title
|
||||
Author = "(Unknown - GitHub CLI required)"
|
||||
Created = $commitDate
|
||||
Base = "stable"
|
||||
Head = "(Unknown)"
|
||||
URL = "https://github.com/microsoft/PowerToys/pull/$prNumber"
|
||||
Description = "(GitHub CLI not available - inferred from commit: $($firstCommit.Message))"
|
||||
AIOverview = $null
|
||||
HasAIOverview = $false
|
||||
Labels = @()
|
||||
}
|
||||
|
||||
$combinedData += $prInfo
|
||||
|
||||
Write-Host " ✓ PR #${prNumber}: $title (basic info)" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Generate JSON output
|
||||
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
||||
$outputData = @{
|
||||
generated_at = $timestamp
|
||||
start_commit = $StartCommit
|
||||
total_prs = $combinedData.Count
|
||||
commits_analyzed = $commitArray.Count
|
||||
unique_prs_found = $prNumbers.Count
|
||||
prs = $combinedData
|
||||
}
|
||||
|
||||
# Save the JSON file
|
||||
$jsonFile = "stable_branch_prs.json"
|
||||
$outputData | ConvertTo-Json -Depth 10 | Out-File -FilePath $jsonFile -Encoding UTF8
|
||||
|
||||
Write-Host "`nGenerated file: $(Resolve-Path $jsonFile)" -ForegroundColor Green
|
||||
Write-Host "Total PRs processed: $($combinedData.Count)" -ForegroundColor Cyan
|
||||
Write-Host "Start commit: $StartCommit" -ForegroundColor Yellow
|
||||
|
||||
# Display summary
|
||||
Write-Host "`nSummary:" -ForegroundColor Green
|
||||
Write-Host "--------"
|
||||
Write-Host "Commits analyzed: $($commitArray.Count)"
|
||||
Write-Host "Unique PRs found: $($prNumbers.Count)"
|
||||
Write-Host "Merged PRs included: $($combinedData.Count)"
|
||||
|
||||
if ($combinedData.Count -gt 0) {
|
||||
Write-Host "`nFirst few PRs:" -ForegroundColor Cyan
|
||||
$samplePRs = $combinedData | Select-Object -First 3
|
||||
foreach ($pr in $samplePRs) {
|
||||
Write-Host " - PR #$($pr.PRNumber): $($pr.Title)"
|
||||
}
|
||||
}
|
||||
97
pr_summary.json
Normal file
97
pr_summary.json
Normal file
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"generated_at": "2025-08-27 15:30:00",
|
||||
"summary": "PowerToys Release Notes - Feature Changes Summary",
|
||||
"total_analyzed_prs": 69,
|
||||
"prs_with_ai_overview": 33,
|
||||
"release_notes_format": {
|
||||
"Settings": [
|
||||
"Added comprehensive search functionality for PowerToys settings, enabling users to quickly find and navigate to specific settings and modules with live suggestions and dedicated search results page. Thanks [@vanzue](https://github.com/vanzue)! #41285",
|
||||
"Moved the shutdown button from title bar to navigation view footer menu item, only visible when system tray icon is hidden, with confirmation dialog added. Thanks [@davidegiacometti](https://github.com/davidegiacometti)! #40714",
|
||||
"Simplified and fixed styling issues in the Advanced Paste module description. Thanks [@OldUser101](https://github.com/OldUser101)! #37563"
|
||||
],
|
||||
"Installer": [
|
||||
"Upgraded installer from deprecated WiX3 to WiX5, improving security, service quality, and community support while maintaining backward compatibility during the transition. Thanks [@zhaopy536](https://github.com/zhaopy536)! #40877",
|
||||
"Refactored shell extension registration from static WiX installer registration to conditional runtime registration, addressing issues where DLLs load even when modules are disabled. Thanks [@lei9444](https://github.com/lei9444)! #41275",
|
||||
"Fixed localization issues for ImageResizer component by correcting satellite resource DLL installation path to WinUI3Apps directory. Thanks [@lei9444](https://github.com/lei9444)! #41152",
|
||||
"Ensured Windows 11 adds registry entries for the old context menu so that 'Show more options'/classic menu always includes them. Thanks [@lei9444](https://github.com/lei9444)! #41351"
|
||||
],
|
||||
"Command Palette": [
|
||||
"Fixed WinGet functionality issues in release builds by addressing trim-safety problems, replacing LINQ operations with manual iteration. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41183",
|
||||
"Fixed missing icons by introducing shared dependency management to ensure all extensions include required dependencies. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41298",
|
||||
"Added infrastructure to make it easier to extend Command Palette's WinRT APIs with type cache pre-loading mechanism. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41056",
|
||||
"Fixed race condition causing search text to 'jiggle' or bounce during rapid updates. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41165",
|
||||
"Added cancellation support to prevent race conditions when multiple fetch operations are triggered. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41166",
|
||||
"Addressed memory leaks by ensuring proper cleanup of ListItemViewModel objects when no longer needed. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41169",
|
||||
"Added support for special path prefixes, allowing users to search paths starting with ~ (home directory), / or \\\\ (system root directory). Thanks [@davidegiacometti](https://github.com/davidegiacometti)! #40887",
|
||||
"Added comprehensive unit test coverage for WebSearch and Shell extensions with interface abstractions for better testability. Thanks [@moooyo](https://github.com/moooyo)! #41272",
|
||||
"Added comprehensive unit test coverage for Apps and Bookmarks extensions with interface abstractions for better testability. Thanks [@moooyo](https://github.com/moooyo)! #41238",
|
||||
"Added unit tests to verify 'Close on Enter' behavior in Calculator extension. Thanks [@mohammed-saalim](https://github.com/mohammed-saalim)! #41202",
|
||||
"Added local keyboard listener to handle GoBack key that cannot be captured through standard WinUI input handling. Thanks [@jiripolasek](https://github.com/jiripolasek)! #41122",
|
||||
"Improved page exception details for users with timestamp, HRESULT, and full exception information. Thanks [@jiripolasek](https://github.com/jiripolasek)! #41035",
|
||||
"Honored 'Single-click activation' only for pointer clicks and not for keyboard activation. Thanks [@jiripolasek](https://github.com/jiripolasek)! #41119",
|
||||
"Added acrylic backdrop to context menus and tweaked styling to match CmdPal aesthetics. Thanks [@jiripolasek](https://github.com/jiripolasek)! #41136",
|
||||
"Removed constraints that kept context menu flyout within window bounds, allowing proper positioning. Thanks [@jiripolasek](https://github.com/jiripolasek)! #41133",
|
||||
"Replaced brush used for menu item separator with WinUI 3 standard flyout menu brush. Thanks [@jiripolasek](https://github.com/jiripolasek)! #41130",
|
||||
"Fixed race condition in cancellation handling to prevent InvalidOperationException. Thanks [@jiripolasek](https://github.com/jiripolasek)! #40983",
|
||||
"Made it easier to add APIs in the future by working around metadata-based marshalling limitations. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41056",
|
||||
"Used empty content for WindowWalker, Windows Settings, and Windows Search extensions when no results. Thanks [@htcfreek](https://github.com/htcfreek)! #40722",
|
||||
"Modernized null checking patterns using 'is null' and 'is not null' expressions. Thanks [@michaeljolley](https://github.com/michaeljolley)! #40972",
|
||||
"Added filters support for DynamicListPage functionality. Thanks [@michaeljolley](https://github.com/michaeljolley)! #40783",
|
||||
"Ensured alias changes are propagated to related TopLevelViewModels. Thanks [@michaeljolley](https://github.com/michaeljolley)! #40970",
|
||||
"Replaced Clipboard History extension outline icon with colorful Fluent UI System icon. Thanks [@jiripolasek](https://github.com/jiripolasek)! #41012",
|
||||
"Brought existing Settings window to foreground when opened. Thanks [@jiripolasek](https://github.com/jiripolasek)! #41087",
|
||||
"Fixed regression when updating command provider without commands. Thanks [@jiripolasek](https://github.com/jiripolasek)! #40984",
|
||||
"Checked icon parent before adding in ContentIcon to prevent duplicate parenting issues. Thanks [@jiripolasek](https://github.com/jiripolasek)! #40931",
|
||||
"Prevented disposed ContentPage from handling messages to avoid zombie processes. Thanks [@jiripolasek](https://github.com/jiripolasek)! #41083",
|
||||
"Made CommandProvider.Dispose virtual for better extensibility. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41184",
|
||||
"Added evil samples for testing edge cases. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41158",
|
||||
"Setting activation shortcut now auto-focuses on window and delivers dialog for screen readers. Thanks [@chatasweetie](https://github.com/chatasweetie)! #40968",
|
||||
"Added app icon to run context menu item in all apps extension. Thanks [@michaeljolley](https://github.com/michaeljolley)! #40991",
|
||||
"Added WinAppSDK dependency in SamplePageExtension and ProcessMonitorExtension. Thanks [@moooyo](https://github.com/moooyo)! #41274",
|
||||
"Removed all explicit dependencies from toolkit and extensions API on WinAppSDK. Thanks [@rluengen](https://github.com/rluengen)! #41261",
|
||||
"Used DynamicDependency to preserve trimmed Adaptive Card action types. Thanks [@lei9444](https://github.com/lei9444)! #41027",
|
||||
"Added the pdb's for Extensions too. Thanks [@zadjii-msft](https://github.com/zadjii-msft)! #41306"
|
||||
],
|
||||
"Mouse Utilities": [
|
||||
"Added new feature to prevent Easy Mouse from switching machines when foreground application is running in fullscreen mode, including toggle and per-app exclusion list. Thanks [@dot-tb](https://github.com/dot-tb)! #39854",
|
||||
"Implemented gliding cursor accessibility feature, extending Mouse Pointer Crosshairs functionality to enable single-button cursor control through guided horizontal and vertical lines. Thanks [@mikehall-ms](https://github.com/mikehall-ms)! #41221",
|
||||
"Fixed GPU performance issues in Mouse Highlighter's spotlight mode by replacing GPU-intensive border-based spotlight with resource-friendly radial gradient mask implementation. Thanks [@vanzue](https://github.com/vanzue)! #41079"
|
||||
],
|
||||
"QuickAccent": [
|
||||
"Implemented persistence for character usage data, allowing frequently used characters to maintain sort order between application runs. Thanks [@davidegiacometti](https://github.com/davidegiacometti)! #37577",
|
||||
"Fixed hybrid graphics issue on laptops with Optimus technology by changing Topmost behavior from permanently enabled to conditionally applied only when selection window is displayed. Thanks [@daverayment](https://github.com/daverayment)! #41044",
|
||||
"Added Maltese language support, enabling users to select Maltese and type its unique accented letters. Thanks [@rovercoder](https://github.com/rovercoder)! #39473"
|
||||
],
|
||||
"UI and Accessibility": [
|
||||
"Added accessibility IDs to FancyZones UI elements to improve reliability of UI tests by replacing text-based element selection with accessibility ID-based selection. Thanks [@lei9444](https://github.com/lei9444)! #41316",
|
||||
"Added accessibility IDs to Command Palette UI components to make UI tests more reliable. Thanks [@lei9444](https://github.com/lei9444)! #41295",
|
||||
"Moved automation notification functionality to UIHelper and implemented it in ListPage and SettingsWindow. Thanks [@chatasweetie](https://github.com/chatasweetie)! #41016",
|
||||
"Fixed issue where wait cursor was incorrectly displayed when hovering over Always On Top window border, ensuring proper arrow cursor is shown. Thanks [@davidegiacometti](https://github.com/davidegiacometti)! #41091"
|
||||
],
|
||||
"Localization": [
|
||||
"Fixed Spanish localization issues by preventing 'Awake' product name from being translated to 'Activo' throughout PowerToys Settings interface. Thanks [@Copilot](https://github.com/Copilot)! #41252",
|
||||
"Changed PowerRename context menu accelerator key from 'W' to 'E' to resolve conflict with Windows Explorer 'New' command accelerator. Thanks [@aaron-ni](https://github.com/aaron-ni)! #39291"
|
||||
],
|
||||
"Development and Testing": [
|
||||
"Implemented comprehensive hotkey conflict detection and resolution system, providing real-time conflict checking and centralized management interface for resolving conflicts. Thanks [@shuaiyuanxx](https://github.com/shuaiyuanxx)! #41029",
|
||||
"Added comprehensive telemetry tracking for shortcut conflict detection functionality, capturing user interactions and conflict resolution patterns. Thanks [@shuaiyuanxx](https://github.com/shuaiyuanxx)! #41271",
|
||||
"Updated UTF.Unknown dependency from 2.5.1 to 2.6.0, fixing old framework targeting issues. Thanks [@304NotModified](https://github.com/304NotModified)! #41042",
|
||||
"Improved NuGet dependency version validation process via dotnet restore. Thanks [@yeelam-gordon](https://github.com/yeelam-gordon)! #40646",
|
||||
"Removed versions and MS/System packages from NOTICE. Thanks [@DHowett](https://github.com/DHowett)! #40620",
|
||||
"Removed *tests* and all coverage/DIA DLLs from binskim. Thanks [@DHowett](https://github.com/DHowett)! #41108",
|
||||
"Updated package catalog before running install for store submissions. Thanks [@DHowett](https://github.com/DHowett)! #41121",
|
||||
"Refactored some CmdPal extension unit tests and improved test cases. Thanks [@moooyo](https://github.com/moooyo)! #40896"
|
||||
],
|
||||
"File Handling": [
|
||||
"Fixed registration of bgcode handlers by adding missing registry entries and correcting event handler references. Thanks [@pedrolamas](https://github.com/pedrolamas)! #40985",
|
||||
"Added support for Microsoft Visual Studio Shared Project file extensions (.shproj and .projitems) for XML syntax highlighting. Thanks [@rezanid](https://github.com/rezanid)! #39246",
|
||||
"Added 'No leading spaces' option to Hosts File Editor that prevents prepending spaces to active lines when saving hosts file, with comprehensive test coverage. Thanks [@mohammed-saalim](https://github.com/mohammed-saalim)! #41206"
|
||||
],
|
||||
"Documentation": [
|
||||
"Updated PowerToys README.md to prepare release notes for version 0.94, transitioning from current release information. Thanks [@yeelam-gordon](https://github.com/yeelam-gordon)! #41036",
|
||||
"Fixed incorrect path for styling link in developer documentation. Thanks [@denizmaral](https://github.com/denizmaral)! #41150",
|
||||
"Added Office/Copilot templates to KeyVisual. Thanks [@niels9001](https://github.com/niels9001)! #41167",
|
||||
"Removed debug dialog components. Thanks [@niels9001](https://github.com/niels9001)! #41250"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -43,32 +43,11 @@ private:
|
||||
//contains the non localized key of the powertoy
|
||||
std::wstring app_key;
|
||||
|
||||
// Update registration based on enabled state
|
||||
void UpdateRegistration(bool enabled)
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
#if defined(ENABLE_REGISTRATION) || defined(NDEBUG)
|
||||
ImageResizerRuntimeRegistration::EnsureRegistered();
|
||||
Logger::info(L"ImageResizer context menu registered");
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#if defined(ENABLE_REGISTRATION) || defined(NDEBUG)
|
||||
ImageResizerRuntimeRegistration::Unregister();
|
||||
Logger::info(L"ImageResizer context menu unregistered");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
ImageResizerModule()
|
||||
{
|
||||
m_enabled = CSettingsInstance().GetEnabled();
|
||||
UpdateRegistration(m_enabled);
|
||||
app_name = GET_RESOURCE_STRING(IDS_IMAGERESIZER);
|
||||
app_key = ImageResizerConstants::ModuleKey;
|
||||
LoggerHelpers::init_logger(app_key, L"ModuleInterface", LogSettings::imageResizerLoggerName);
|
||||
@@ -133,7 +112,10 @@ public:
|
||||
package::RegisterSparsePackage(path, packageUri);
|
||||
}
|
||||
}
|
||||
UpdateRegistration(m_enabled);
|
||||
#if defined(ENABLE_REGISTRATION) || defined(NDEBUG)
|
||||
ImageResizerRuntimeRegistration::EnsureRegistered();
|
||||
#endif
|
||||
|
||||
Trace::EnableImageResizer(m_enabled);
|
||||
}
|
||||
|
||||
@@ -141,8 +123,11 @@ public:
|
||||
virtual void disable()
|
||||
{
|
||||
m_enabled = false;
|
||||
UpdateRegistration(m_enabled);
|
||||
Trace::EnableImageResizer(m_enabled);
|
||||
#if defined(ENABLE_REGISTRATION) || defined(NDEBUG)
|
||||
ImageResizerRuntimeRegistration::Unregister();
|
||||
Logger::info(L"ImageResizer context menu unregistered (Win10)");
|
||||
#endif
|
||||
}
|
||||
|
||||
// Returns if the powertoys is enabled
|
||||
|
||||
130
stable_branch_prs.json
Normal file
130
stable_branch_prs.json
Normal file
@@ -0,0 +1,130 @@
|
||||
{
|
||||
"generated_at": "2025-09-01 12:54:31",
|
||||
"unique_prs_found": 8,
|
||||
"prs": [
|
||||
{
|
||||
"Created": "2025-08-26T06:43:09Z",
|
||||
"PRNumber": 41378,
|
||||
"Author": "shuaiyuanxx",
|
||||
"AIOverview": "This PR fixes localization issues for shortcut conflict messages by replacing hardcoded English strings with localizable resource strings.\n\n- Replaces hardcoded conflict messages with localized strings from resource files\n- Adds new localization keys for shortcut conflict warnings in the UI\n- Updates both the shortcut conflict window and shortcut dialog to use proper localization",
|
||||
"Labels": [
|
||||
"Product-Settings",
|
||||
"In for .94"
|
||||
],
|
||||
"Head": "shawn/fixConflictMessage",
|
||||
"Description": "## Summary of the Pull Request\r\nAdded localization for conflict message shown in shortcut conflict window and shortcut dialog.\r\n\r\n## Detailed Description of the Pull Request / Additional comments",
|
||||
"Base": "main",
|
||||
"Title": "Fix localization issue for shortcut conflict window",
|
||||
"HasAIOverview": true,
|
||||
"URL": "https://github.com/microsoft/PowerToys/pull/41378"
|
||||
},
|
||||
{
|
||||
"Created": "2025-08-26T07:41:01Z",
|
||||
"PRNumber": 41381,
|
||||
"Author": "vanzue",
|
||||
"AIOverview": "This pull request fixes 3 search-related issues in the PowerToys Settings UI, focusing on improving the search functionality and user experience.\n\nKey changes:\n- Fixes embedded resource loading with case-insensitive matching to prevent lookup failures\n- Adds proper search result header with localized \"Results for\" text\n- Improves navigation and accessibility with better focus management and element finding",
|
||||
"Labels": [
|
||||
"Product-Settings",
|
||||
"In for .94"
|
||||
],
|
||||
"Head": "dev/vanzue/search-fix",
|
||||
"Description": "## Summary of the Pull Request\r\nFix 3 issues\r\n\r\n## Detailed Description of the Pull Request / Additional comments\r\n\r\n## Validation Steps Performed\r\n\r\nhttps://github.com/user-attachments/assets/0e0df9fb-5aca-4b26-9d53-e6ddc49cab04",
|
||||
"Base": "main",
|
||||
"Title": "Settings: Settings search fixes",
|
||||
"HasAIOverview": true,
|
||||
"URL": "https://github.com/microsoft/PowerToys/pull/41381"
|
||||
},
|
||||
{
|
||||
"Created": "2025-08-26T12:30:44Z",
|
||||
"PRNumber": 41383,
|
||||
"Author": "niels9001",
|
||||
"AIOverview": null,
|
||||
"Labels": [],
|
||||
"Head": "niels9001/removing-titlebar-package",
|
||||
"Description": "Temp fix for a VS bug when building the `PowerToys.Settings` project. \r\n\r\nThere seems to be something wrong with the Labs TitleBar package, so following up with the team to get it resolved. Meanwhile, I've moved the Toolkit's source code for TitleBar to Settings as a custom control.\r\n\r\nOnce the package is fixed we can revert this change.",
|
||||
"Base": "main",
|
||||
"Title": "[Fix] Adding Toolkit's TitleBar manually",
|
||||
"HasAIOverview": false,
|
||||
"URL": "https://github.com/microsoft/PowerToys/pull/41383"
|
||||
},
|
||||
{
|
||||
"Created": "2025-08-26T13:57:58Z",
|
||||
"PRNumber": 41386,
|
||||
"Author": "niels9001",
|
||||
"AIOverview": "This PR implements several search user experience improvements focused on visual polish and consistency. The changes address visual glitches in search templates, enhance search result presentation, and improve search highlighting behavior.\n\n- Fixes visual glitch in the 'Show all results' template by adjusting margins and removing unnecessary padding\n- Adds \"Results for\" prefix display on search results pages with localized string support\n- Improves search highlight animation with better sizing and accent color usage",
|
||||
"Labels": [
|
||||
"Product-Settings",
|
||||
"In for .94"
|
||||
],
|
||||
"Head": "niels9001/search-UX-improvements",
|
||||
"Description": "### Fixing visual glitch in the 'Show all results' template:\r\n\r\nBefore\r\n<img width=\"588\" height=\"103\" alt=\"image\" src=\"https://github.com/user-attachments/assets/00da60ea-d0ab-4ffe-8f69-75be7e537d63\" />\r\n\r\nAfter\r\n<img width=\"598\" height=\"70\" alt=\"image\" src=\"https://github.com/user-attachments/assets/dc859731-8783-494a-b561-ea6396ca69b3\" />\r\n\r\n### Displaying \"Show results for * search term *\" on search results page\r\nBefore\r\n<img width=\"716\" height=\"239\" alt=\"image\" src=\"https://github.com/user-attachments/assets/a80e6e58-df88-47b2-85ab-c39cbdc88690\" />\r\n\r\nAfter\r\n<img width=\"349\" height=\"264\" alt=\"image\" src=\"https://github.com/user-attachments/assets/99029ee6-94f7-4454-a443-640c22f9e6f3\" />\r\n\r\n### Using Accent Color for the search highlight for better visibility and fixing a bug\r\nBefore\r\n\r\n\r\nAfter\r\n\r\n",
|
||||
"Base": "main",
|
||||
"Title": "Search UX improvements",
|
||||
"HasAIOverview": true,
|
||||
"URL": "https://github.com/microsoft/PowerToys/pull/41386"
|
||||
},
|
||||
{
|
||||
"Created": "2025-08-26T15:28:38Z",
|
||||
"PRNumber": 41389,
|
||||
"Author": "michaeljolley",
|
||||
"AIOverview": "This PR adds sorting functionality to the DateTime extension results to improve user experience by displaying the most relevant results first. The change modifies the search result generation to sort items by their relevance score in descending order.",
|
||||
"Labels": [
|
||||
"Product-Command Palette",
|
||||
"In for .94"
|
||||
],
|
||||
"Head": "dev/mjolley/datetime-sort",
|
||||
"Description": "Closes #41385\r\n\r\nAdds a sort to the DateTime extension results.\r\n\r\n<img width=\"1001\" height=\"602\" alt=\"image\" src=\"https://github.com/user-attachments/assets/ccccae6a-c4a4-460f-a6d3-3325ecfc53da\" />\r\n\r\n<img width=\"992\" height=\"606\" alt=\"image\" src=\"https://github.com/user-attachments/assets/b8af51bd-cbd0-4341-ac46-0fb3e97ec2ac\" />",
|
||||
"Base": "main",
|
||||
"Title": "Adding sort to DateTime extension results",
|
||||
"HasAIOverview": true,
|
||||
"URL": "https://github.com/microsoft/PowerToys/pull/41389"
|
||||
},
|
||||
{
|
||||
"Created": "2025-08-27T09:56:36Z",
|
||||
"PRNumber": 41411,
|
||||
"Author": "lei9444",
|
||||
"AIOverview": "This PR fixes an issue where context menu runtime registration wasn't properly cleaned up when GPO policies disabled PowerToys modules. The problem was that module constructors didn't consider GPO policies when determining their initial enabled state, leaving stale registry entries.\n\n- Introduces a centralized `UpdateRegistration` helper method across four modules to handle context menu registration/unregistration\n- Ensures context menu registration state is properly synchronized with module enabled state during initialization\n- Adds calls to `UpdateRegistration` in `init_settings` methods to handle GPO policy changes",
|
||||
"Labels": [
|
||||
"Product-PowerRename",
|
||||
"Product-Image Resizer",
|
||||
"Product-File Locksmith",
|
||||
"Product-New+"
|
||||
],
|
||||
"Head": "leilzh/gpofix",
|
||||
"Description": "## Summary of the Pull Request\r\nThis PR fixes an issue where context menu runtime registration wasn't properly cleaned up when GPO (Group Policy Object) policies disabled the module. The problem occurred because the module constructor didn't consider GPO policies when determining its initial enabled state.\r\n\r\n## Detailed Description of the Pull Request / Additional comments\r\n\r\n## Validation Steps Performed\r\n\r\nThis pull request refactors how context menu registration and unregistration are handled across several PowerToys modules. The main improvement is the introduction of a new `UpdateRegistration` helper method in each module, which centralizes and simplifies the logic for registering or unregistering context menus when the module is enabled or disabled. This reduces code duplication and ensures consistent behavior.\r\n\r\n**Context menu registration logic refactor:**\r\n\r\n* Added a private `UpdateRegistration` method to each of the following modules to handle context menu registration and unregistration based on the enabled state:\r\n - `FileLocksmithModule` in `PowerToysModule.cpp`\r\n - `NewModule` in `powertoys_module.cpp`\r\n - `ImageResizerModule` in `dllmain.cpp`\r\n - `PowerRenameModule` in `dllmain.cpp`\r\n\r\n* Replaced direct calls to registration/unregistration functions in `enable`, `disable`, and `init_settings` methods with calls to the new `UpdateRegistration` method in all affected modules, ensuring consistent and centralized handling [[1]](diffhunk://#diff-256ed936dafec1bf6ff17849b4797dd276f5b07bebe2e483bc1580c8f06e92d9L91-R122) [[2]](diffhunk://#diff-256ed936dafec1bf6ff17849b4797dd276f5b07bebe2e483bc1580c8f06e92d9R155) [[3]](diffhunk://#diff-4a3942d548f3daec02a833983ed9b2b69f75e2cd1b74a8ce1b874f3fd33fde55L101-R125) [[4]](diffhunk://#diff-4a3942d548f3daec02a833983ed9b2b69f75e2cd1b74a8ce1b874f3fd33fde55L153-R177) [[5]](diffhunk://#diff-0c0a89e812ff4625d165417da14f1c3f203e5ac7907555ae4fde122f3dddcf7aL115-L130) [[6]](diffhunk://#diff-34581ec47c37b0d2e1d9b59696225c47342930694e732db06cbdf653ceb2c2d7L205-R234) [[7]](diffhunk://#diff-34581ec47c37b0d2e1d9b59696225c47342930694e732db06cbdf653ceb2c2d7R334).\r\n\r\nThese changes improve maintainability and reduce the risk of inconsistent registration behavior across modules.",
|
||||
"Base": "main",
|
||||
"Title": "fix: Context menu registry entries are not cleaned up when disabled via GPO",
|
||||
"HasAIOverview": true,
|
||||
"URL": "https://github.com/microsoft/PowerToys/pull/41411"
|
||||
},
|
||||
{
|
||||
"Created": "2025-08-28T01:59:14Z",
|
||||
"PRNumber": 41437,
|
||||
"Author": "vanzue",
|
||||
"AIOverview": null,
|
||||
"Labels": [],
|
||||
"Head": "dev/vanzue/fancy-zone-search",
|
||||
"Description": "## Summary of the Pull Request\r\nThis pull request primarily improves the maintainability and robustness of the FancyZones settings UI by assigning unique `Name` attributes to `SettingsCard` controls in the `FancyZonesPage.xaml` file. Additionally, it enhances the logic for retrieving element UIDs and improves fallback behavior for missing localizations. There is also a minor usability fix in the shell page to prevent unintended navigation when focusing the search box.\r\n\r\n**FancyZones settings UI improvements:**\r\n\r\n* Added unique `Name` attributes to all `tkcontrols:SettingsCard` elements in `FancyZonesPage.xaml` to facilitate easier referencing and future maintainability. This affects all relevant settings groups and controls in the file. [[1]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL73-R85) [[2]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL109-R109) [[3]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL121-R121) [[4]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL167-R188) [[5]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL202-R202) [[6]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL251-R251) [[7]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL265-R265) [[8]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL280-R280)\r\n\r\n**Element UID retrieval and localization:**\r\n\r\n* Improved `GetElementUid` in `Program.cs` to fall back to the first child's `x:Uid` if the element itself lacks one, increasing robustness when parsing XAML.\r\n* Updated `GetLocalizedSettingHeaderAndD` in `SearchIndexService.cs` to provide a fallback for missing localizations by trying the `\"{elementUid}/Content\"` resource key.\r\n\r\n**Shell page usability:**\r\n\r\n* Modified `CtrlF_Invoked` in `ShellPage.xaml.cs` to mark the event as handled, preventing unintended navigation when the search box is focused with Ctrl+F.\r\n\r\n## Detailed Description of the Pull Request / Additional comments\r\n\r\n## Validation Steps Performed\r\n\r\nhttps://github.com/user-attachments/assets/9cf15605-1114-4c6d-923c-d05c2733a274",
|
||||
"Base": "main",
|
||||
"Title": "Settings: Search fancy zone settings and swallow the ctrl+f event",
|
||||
"HasAIOverview": false,
|
||||
"URL": "https://github.com/microsoft/PowerToys/pull/41437"
|
||||
},
|
||||
{
|
||||
"Created": "2025-08-28T11:06:55Z",
|
||||
"PRNumber": 41442,
|
||||
"Author": "zadjii-msft",
|
||||
"AIOverview": null,
|
||||
"Labels": [],
|
||||
"Head": "dev/migrie/bump-05",
|
||||
"Description": "title",
|
||||
"Base": "main",
|
||||
"Title": "CmdPal: Bump version to 0.5",
|
||||
"HasAIOverview": false,
|
||||
"URL": "https://github.com/microsoft/PowerToys/pull/41442"
|
||||
}
|
||||
],
|
||||
"start_commit": "HEAD~5",
|
||||
"commits_analyzed": 8,
|
||||
"total_prs": 8
|
||||
}
|
||||
358
stable_branch_prs_filtered.txt
Normal file
358
stable_branch_prs_filtered.txt
Normal file
@@ -0,0 +1,358 @@
|
||||
PR #40915 [MERGED]
|
||||
Title: CmdPal: Added settings for limiting apps on top level searches
|
||||
Author: michaeljolley
|
||||
Created: 2025-07-31 22:15:00
|
||||
Base: main | Head: dev/mjolley/top-level-apps-limit
|
||||
URL: https://github.com/microsoft/PowerToys/pull/40915
|
||||
|
||||
Description:
|
||||
Closes #40062
|
||||
|
||||
Adds a setting to limit the number of apps returned on top level searches.
|
||||
|
||||
Can limit to none, 1, 5, 10, or 20.
|
||||
|
||||
https://github.com/user-attachments/assets/de60111f-fb02-4db6-9ae9-2f636c171b5b
|
||||
================================================================================
|
||||
|
||||
PR #41251 [MERGED]
|
||||
Title: CmdPal: Make debugging extension load errors easier
|
||||
Author: zadjii-msft
|
||||
Created: 2025-08-19 10:43:37
|
||||
Base: main | Head: dev/migrie/b/more-extension-logging
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41251
|
||||
|
||||
Description:
|
||||
Turns out we didn't log all the HRESULTs for failing to load an extension. This adds more logging.
|
||||
|
||||
It also adds a context command on the log command to make it easier to get to the log files
|
||||
================================================================================
|
||||
|
||||
PR #41347 [MERGED]
|
||||
Title: [CmdPal] Eliminate `CopyTextCommand` duplicates
|
||||
Author: PesBandi
|
||||
Created: 2025-08-24 21:00:49
|
||||
Base: main | Head: cmdpal-copycommand
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41347
|
||||
|
||||
Description:
|
||||
## Summary of the Pull Request
|
||||
Removes redundant CopyCommands and replaces their usage with `CopyTextCommand` from the toolkit. This is actually recommend by the [docs](https://learn.microsoft.com/en-us/windows/powertoys/command-palette/command-results#showtoast-command-result), we should probably lead by example 😄
|
||||
> Consider the CopyTextCommand in the helpers - this command will show a toast with the text "Copied to clipboard", then dismiss the palette.
|
||||
|
||||
Only functionality change is that they now display *Copied to clipboard!* after copying.
|
||||
## PR Checklist
|
||||
|
||||
- [x] Closes: #41346
|
||||
- [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected
|
||||
- [x] **Tests:** All pass
|
||||
- [x] **Localization:** All end-user-facing strings can be localized
|
||||
- [x] **Dev docs:** No need
|
||||
- [x] **New binaries:** None
|
||||
- [x] **Documentation updated:** No need
|
||||
## Detailed Description of the Pull Request / Additional comments
|
||||
Custom command names (e.g. *Copy path* instead of *Copy*) are preserved.
|
||||
Strings put out of use have been deleted.
|
||||
CopyCommands from the Registry and Clipboard plugins are left untouched, as they contain special logic.
|
||||
The error handling in `CopyPathCommand` from Apps was unnecessary, since it's already taken care of by `ClipboardHelper`.
|
||||
## Validation Steps Performed
|
||||
Manual testing
|
||||
================================================================================
|
||||
|
||||
PR #41361 [MERGED]
|
||||
Title: CmdPal: Fix resource key name NavigationPaneClosed to match literal in code and prevent crash
|
||||
Author: jiripolasek
|
||||
Created: 2025-08-25 18:40:35
|
||||
Base: main | Head: feature/fix-typo-in-resource-key-navigationpaneclosed
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41361
|
||||
|
||||
Description:
|
||||
## Summary of the Pull Request
|
||||
|
||||
Corrects a mismatch between the resource key and the actual literal used in code. The key was incorrectly named `NavigationPageOpened`; it now correctly uses `NavigationPaneClosed`. Introduced in #41016.
|
||||
|
||||
|
||||
## PR Checklist
|
||||
|
||||
- [x] Closes: #41362
|
||||
- [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected
|
||||
- [ ] **Tests:** Added/updated and all pass
|
||||
- [ ] **Localization:** All end-user-facing strings can be localized
|
||||
- [ ] **Dev docs:** Added/updated
|
||||
- [ ] **New binaries:** Added on the required places
|
||||
- [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries
|
||||
- [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder
|
||||
- [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects
|
||||
- [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
|
||||
- [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx
|
||||
|
||||
<!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here -->
|
||||
## Detailed Description of the Pull Request / Additional comments
|
||||
|
||||
<!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well -->
|
||||
## Validation Steps Performed
|
||||
================================================================================
|
||||
|
||||
PR #41378 [MERGED]
|
||||
Title: Fix localization issue for shortcut conflict window
|
||||
Author: shuaiyuanxx
|
||||
Created: 2025-08-26 06:43:09
|
||||
Base: main | Head: shawn/fixConflictMessage
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41378
|
||||
|
||||
Description:
|
||||
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
|
||||
## Summary of the Pull Request
|
||||
Added localization for conflict message shown in shortcut conflict window and shortcut dialog.
|
||||
|
||||
<!-- Please review the items on the PR checklist before submitting-->
|
||||
## PR Checklist
|
||||
|
||||
- [x] Closes: #41373
|
||||
- [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected
|
||||
- [x] **Tests:** Added/updated and all pass
|
||||
- [ ] **Localization:** All end-user-facing strings can be localized
|
||||
- [ ] **Dev docs:** Added/updated
|
||||
- [ ] **New binaries:** Added on the required places
|
||||
- [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries
|
||||
- [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder
|
||||
- [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects
|
||||
- [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
|
||||
- [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx
|
||||
|
||||
<!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here -->
|
||||
## Detailed Description of the Pull Request / Additional comments
|
||||
|
||||
<!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well -->
|
||||
## Validation Steps Performed
|
||||
================================================================================
|
||||
|
||||
PR #41381 [MERGED]
|
||||
Title: Settings: Settings search fixes
|
||||
Author: vanzue
|
||||
Created: 2025-08-26 07:41:01
|
||||
Base: main | Head: dev/vanzue/search-fix
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41381
|
||||
|
||||
Description:
|
||||
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
|
||||
## Summary of the Pull Request
|
||||
Fix 3 issues
|
||||
|
||||
<!-- Please review the items on the PR checklist before submitting-->
|
||||
## PR Checklist
|
||||
|
||||
- [x] Closes: #41369, #41374, #41380
|
||||
- [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected
|
||||
- [ ] **Tests:** Added/updated and all pass
|
||||
- [ ] **Localization:** All end-user-facing strings can be localized
|
||||
- [ ] **Dev docs:** Added/updated
|
||||
- [ ] **New binaries:** Added on the required places
|
||||
- [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries
|
||||
- [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder
|
||||
- [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects
|
||||
- [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
|
||||
- [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx
|
||||
|
||||
<!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here -->
|
||||
## Detailed Description of the Pull Request / Additional comments
|
||||
|
||||
<!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well -->
|
||||
## Validation Steps Performed
|
||||
|
||||
https://github.com/user-attachments/assets/0e0df9fb-5aca-4b26-9d53-e6ddc49cab04
|
||||
================================================================================
|
||||
|
||||
PR #41383 [MERGED]
|
||||
Title: [Fix] Adding Toolkit's TitleBar manually
|
||||
Author: niels9001
|
||||
Created: 2025-08-26 12:30:44
|
||||
Base: main | Head: niels9001/removing-titlebar-package
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41383
|
||||
|
||||
Description:
|
||||
Temp fix for a VS bug when building the `PowerToys.Settings` project.
|
||||
|
||||
There seems to be something wrong with the Labs TitleBar package, so following up with the team to get it resolved. Meanwhile, I've moved the Toolkit's source code for TitleBar to Settings as a custom control.
|
||||
|
||||
Once the package is fixed we can revert this change.
|
||||
================================================================================
|
||||
|
||||
PR #41386 [MERGED]
|
||||
Title: Search UX improvements
|
||||
Author: niels9001
|
||||
Created: 2025-08-26 13:57:58
|
||||
Base: main | Head: niels9001/search-UX-improvements
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41386
|
||||
|
||||
Description:
|
||||
### Fixing visual glitch in the 'Show all results' template:
|
||||
|
||||
Before
|
||||
<img width="588" height="103" alt="image" src="https://github.com/user-attachments/assets/00da60ea-d0ab-4ffe-8f69-75be7e537d63" />
|
||||
|
||||
After
|
||||
<img width="598" height="70" alt="image" src="https://github.com/user-attachments/assets/dc859731-8783-494a-b561-ea6396ca69b3" />
|
||||
|
||||
|
||||
### Displaying "Show results for * search term *" on search results page
|
||||
Before
|
||||
<img width="716" height="239" alt="image" src="https://github.com/user-attachments/assets/a80e6e58-df88-47b2-85ab-c39cbdc88690" />
|
||||
|
||||
After
|
||||
<img width="349" height="264" alt="image" src="https://github.com/user-attachments/assets/99029ee6-94f7-4454-a443-640c22f9e6f3" />
|
||||
|
||||
|
||||
### Using Accent Color for the search highlight for better visibility and fixing a bug
|
||||
Before
|
||||

|
||||
|
||||
|
||||
After
|
||||
|
||||

|
||||
================================================================================
|
||||
|
||||
PR #41389 [MERGED]
|
||||
Title: Adding sort to DateTime extension results
|
||||
Author: michaeljolley
|
||||
Created: 2025-08-26 15:28:38
|
||||
Base: main | Head: dev/mjolley/datetime-sort
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41389
|
||||
|
||||
Description:
|
||||
Closes #41385
|
||||
|
||||
Adds a sort to the DateTime extension results.
|
||||
|
||||
<img width="1001" height="602" alt="image" src="https://github.com/user-attachments/assets/ccccae6a-c4a4-460f-a6d3-3325ecfc53da" />
|
||||
|
||||
<img width="992" height="606" alt="image" src="https://github.com/user-attachments/assets/b8af51bd-cbd0-4341-ac46-0fb3e97ec2ac" />
|
||||
================================================================================
|
||||
|
||||
PR #41403 [MERGED]
|
||||
Title: Settings UI: Fix spelling error and make spell checker happy
|
||||
Author: jiripolasek
|
||||
Created: 2025-08-27 00:17:17
|
||||
Base: main | Head: feature/make-spellchecker-happy
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41403
|
||||
|
||||
Description:
|
||||
## Summary of the Pull Request
|
||||
|
||||
- Renames `NavigatablePage` to `NavigablePage` to fix a spelling error.
|
||||
- Reverts related entries in `exclude.txt` that triggered a forbidden pattern error in the spell checker.
|
||||
- The spell checker does not allow PascalCase words like `NavigatablePage` in `exclude.txt` because of its automatic casing rules.
|
||||
|
||||
|
||||
Regression: #41285
|
||||
================================================================================
|
||||
|
||||
PR #41411 [MERGED]
|
||||
Title: fix: Context menu registry entries are not cleaned up when disabled via GPO
|
||||
Author: lei9444
|
||||
Created: 2025-08-27 09:56:36
|
||||
Base: main | Head: leilzh/gpofix
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41411
|
||||
|
||||
Description:
|
||||
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
|
||||
## Summary of the Pull Request
|
||||
This PR fixes an issue where context menu runtime registration wasn't properly cleaned up when GPO (Group Policy Object) policies disabled the module. The problem occurred because the module constructor didn't consider GPO policies when determining its initial enabled state.
|
||||
|
||||
<!-- Please review the items on the PR checklist before submitting-->
|
||||
## PR Checklist
|
||||
|
||||
- [x] Closes: #41387
|
||||
- [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected
|
||||
- [ ] **Tests:** Added/updated and all pass
|
||||
- [ ] **Localization:** All end-user-facing strings can be localized
|
||||
- [ ] **Dev docs:** Added/updated
|
||||
- [ ] **New binaries:** Added on the required places
|
||||
- [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries
|
||||
- [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder
|
||||
- [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects
|
||||
- [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
|
||||
- [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx
|
||||
|
||||
<!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here -->
|
||||
## Detailed Description of the Pull Request / Additional comments
|
||||
|
||||
<!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well -->
|
||||
## Validation Steps Performed
|
||||
|
||||
This pull request refactors how context menu registration and unregistration are handled across several PowerToys modules. The main improvement is the introduction of a new `UpdateRegistration` helper method in each module, which centralizes and simplifies the logic for registering or unregistering context menus when the module is enabled or disabled. This reduces code duplication and ensures consistent behavior.
|
||||
|
||||
**Context menu registration logic refactor:**
|
||||
|
||||
* Added a private `UpdateRegistration` method to each of the following modules to handle context menu registration and unregistration based on the enabled state:
|
||||
- `FileLocksmithModule` in `PowerToysModule.cpp`
|
||||
- `NewModule` in `powertoys_module.cpp`
|
||||
- `ImageResizerModule` in `dllmain.cpp`
|
||||
- `PowerRenameModule` in `dllmain.cpp`
|
||||
|
||||
* Replaced direct calls to registration/unregistration functions in `enable`, `disable`, and `init_settings` methods with calls to the new `UpdateRegistration` method in all affected modules, ensuring consistent and centralized handling [[1]](diffhunk://#diff-256ed936dafec1bf6ff17849b4797dd276f5b07bebe2e483bc1580c8f06e92d9L91-R122) [[2]](diffhunk://#diff-256ed936dafec1bf6ff17849b4797dd276f5b07bebe2e483bc1580c8f06e92d9R155) [[3]](diffhunk://#diff-4a3942d548f3daec02a833983ed9b2b69f75e2cd1b74a8ce1b874f3fd33fde55L101-R125) [[4]](diffhunk://#diff-4a3942d548f3daec02a833983ed9b2b69f75e2cd1b74a8ce1b874f3fd33fde55L153-R177) [[5]](diffhunk://#diff-0c0a89e812ff4625d165417da14f1c3f203e5ac7907555ae4fde122f3dddcf7aL115-L130) [[6]](diffhunk://#diff-34581ec47c37b0d2e1d9b59696225c47342930694e732db06cbdf653ceb2c2d7L205-R234) [[7]](diffhunk://#diff-34581ec47c37b0d2e1d9b59696225c47342930694e732db06cbdf653ceb2c2d7R334).
|
||||
|
||||
These changes improve maintainability and reduce the risk of inconsistent registration behavior across modules.
|
||||
================================================================================
|
||||
|
||||
PR #41437 [MERGED]
|
||||
Title: Settings: Search fancy zone settings and swallow the ctrl+f event
|
||||
Author: vanzue
|
||||
Created: 2025-08-28 01:59:14
|
||||
Base: main | Head: dev/vanzue/fancy-zone-search
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41437
|
||||
|
||||
Description:
|
||||
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? -->
|
||||
## Summary of the Pull Request
|
||||
This pull request primarily improves the maintainability and robustness of the FancyZones settings UI by assigning unique `Name` attributes to `SettingsCard` controls in the `FancyZonesPage.xaml` file. Additionally, it enhances the logic for retrieving element UIDs and improves fallback behavior for missing localizations. There is also a minor usability fix in the shell page to prevent unintended navigation when focusing the search box.
|
||||
|
||||
**FancyZones settings UI improvements:**
|
||||
|
||||
* Added unique `Name` attributes to all `tkcontrols:SettingsCard` elements in `FancyZonesPage.xaml` to facilitate easier referencing and future maintainability. This affects all relevant settings groups and controls in the file. [[1]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL73-R85) [[2]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL109-R109) [[3]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL121-R121) [[4]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL167-R188) [[5]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL202-R202) [[6]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL251-R251) [[7]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL265-R265) [[8]](diffhunk://#diff-93623d4db1d295dde0ef793053c9db0d9f673d753b787ad12fd71b8e9e40a79fL280-R280)
|
||||
|
||||
**Element UID retrieval and localization:**
|
||||
|
||||
* Improved `GetElementUid` in `Program.cs` to fall back to the first child's `x:Uid` if the element itself lacks one, increasing robustness when parsing XAML.
|
||||
* Updated `GetLocalizedSettingHeaderAndD` in `SearchIndexService.cs` to provide a fallback for missing localizations by trying the `"{elementUid}/Content"` resource key.
|
||||
|
||||
**Shell page usability:**
|
||||
|
||||
* Modified `CtrlF_Invoked` in `ShellPage.xaml.cs` to mark the event as handled, preventing unintended navigation when the search box is focused with Ctrl+F.
|
||||
<!-- Please review the items on the PR checklist before submitting-->
|
||||
## PR Checklist
|
||||
|
||||
- [ ] Closes: #xxx
|
||||
- [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected
|
||||
- [x] **Tests:** Added/updated and all pass
|
||||
- [ ] **Localization:** All end-user-facing strings can be localized
|
||||
- [ ] **Dev docs:** Added/updated
|
||||
- [ ] **New binaries:** Added on the required places
|
||||
- [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries
|
||||
- [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder
|
||||
- [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects
|
||||
- [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
|
||||
- [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx
|
||||
|
||||
<!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here -->
|
||||
## Detailed Description of the Pull Request / Additional comments
|
||||
|
||||
<!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well -->
|
||||
## Validation Steps Performed
|
||||
|
||||
https://github.com/user-attachments/assets/9cf15605-1114-4c6d-923c-d05c2733a274
|
||||
================================================================================
|
||||
|
||||
PR #41442 [MERGED]
|
||||
Title: CmdPal: Bump version to 0.5
|
||||
Author: zadjii-msft
|
||||
Created: 2025-08-28 11:06:55
|
||||
Base: main | Head: dev/migrie/bump-05
|
||||
URL: https://github.com/microsoft/PowerToys/pull/41442
|
||||
|
||||
Description:
|
||||
title
|
||||
================================================================================
|
||||
|
||||
|
||||
Reference in New Issue
Block a user