mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-07-10 04:20:23 +02:00
4ff034d679a941e04180dfd5eb8a37871e4063bb
9118 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4ff034d679 | Initial plan | ||
|
|
e6d346a59b |
[PowerDisplay] Default-off and confirm dialog for InputSource/ColorTemp/PowerState (#47303)
<!-- 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 Three per-monitor PowerDisplay features have failure modes recoverable only via physical buttons: Input Source — switching to an input with no signal goes black; PowerToys can no longer drive a panel that isn't displaying its own signal Color Temperature — some monitors apply changes that cannot be reset via DDC/CI; OSD reset required Power State — VCP 0xD6 standby may not respond to subsequent DDC/CI wake commands This PR: Defaults all three features off for newly-discovered monitors. Supports* derivation from VCP capabilities is unchanged — unsupported checkboxes are still greyed out. Pops a confirmation dialog when a user toggles any of them on in Settings, mirroring the existing Color Temperature warning. Cancel reverts the checkbox; Enable keeps it. Refactors the existing Color Temperature click handler into a shared HandleDangerousFeatureClickAsync(sender, resourceKeyPrefix, setter) helper. All three feature handlers now reuse it. Renames PowerDisplay_ColorTemperature_EnableButton → PowerDisplay_Dialog_Enable so the three dialogs share one button-text resource (paralleling the existing shared PowerDisplay_Dialog_Cancel) <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 --------- Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
2aece74831 |
[PowerDisplay] Use localized "Built-in Display" name for internal display (#47321)
Set all WMI monitor's name to "Built-in Display" to avoid confusing. related discussion: #47255 <!-- 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 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: # <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 --------- Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Niels Laute <niels.laute@live.nl> |
||
|
|
7861bc408c |
Replay both key down and up for Win in GrabAndMove (#47326)
<!-- 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 The code for keyup on the `Win` key would replay the previously absorbed keydown event and just leave this keyup to propagate normally, thus leading to a race condition between `CallNextHookEx` and `SendInput`. This resulted in almost guaranteed out-of-order event (`Win` up, followed by `Win` down) in the case of `Win+G` (the Xbox Game bar shortcut). Fixed by also absorbing the keyup for `Win`, but calling `SendInput` for both keydown and keyup. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47293 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [x] **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 |
||
|
|
b835cde4d2 |
CmdPal: Fix a bug where dock label settings wouldn't save (#47317)
This setting is totally vestigial, from the 0.9 dev cycle. Unfortunately, the JSON parser would see that it wasn't in the settings.json, then it would write `null` to it. But `ShowLabels` was just a thin alias for `ShowTitles`, so we'd end up parsing totally sane JSON settings into having `null` for `ShowTitle`. This fixes that. You can hide your titles again folks. |
||
|
|
f79df0663c |
Skip desktop / explorer targets in GrabAndMove (#47302)
<!-- 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 a few known Windows processes and window classes from desktop elements to the implicit exclusion list, to avoid funny repositioning of otherwise immovable content: - The Windows Start menu. - Tooltips from around the Notification Area (System Tray). - The Alt-Tab and Win-Tab windows. - Tooltips. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [x] **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 --------- Co-authored-by: Copilot <copilot@github.com> |
||
|
|
7211f7ed67 |
cmdpal: fix our settings load crash (#47296)
Fixes a category of crashes in CmdPal, related to our settings parsing.
It would seem that I don't understand JSON parsing all that well in C#.
Basically, we've got a bunch of places where we have
```c#
class Foo
{
public Bar MySetting {get;init;} = new()
}
```
but when we JSON deserialize the settings, if there wasn't a
`"MySetting"` key, then the deserializer deserializes to `null`, not
`new()`. but since `Foo.MySetting` isn't a `Bar?`, then the compiler
can't check the fact that json _gets special rules to write a null to
it????_
Closes #47249
tested with the settings.json from that thread.
|
||
|
|
215dfaf236 |
GrabAndMove release Alt key on other keypresses (#47261)
<!-- 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 When the Alt modifier is already pressed, "release" it on any other interaction but the allowed mouse interactions. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47257 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 I ensured that pressing something like Shift, Ctrl, or even a character key - besides Tab, of course, properly resets the internal state of Alt. The win key was never affected by this behavior. Co-authored-by: Copilot <copilot@github.com> |
||
|
|
f5a294bb66 |
[PowerDisplay] Add more log for PowerDisplay (#47270)
Users have reported missing monitors but the existing logs lack the information needed to diagnose. Add discovery-phase logs that record the raw MCCS capabilities string from the monitor, the parsed feature support flags (brightness/contrast/color temperature/volume), the specific reason a monitor is ignored, and DDC/CI API failures. <!-- 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 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
d10203b8ac |
Update README for PowerToys v0.99.0 release (#47227)
<!-- 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 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |
||
|
|
fecd2e72a7 |
Handle DockSize enum changes (#47212)
### ⚠️ REVIEWERS TO DECIDE. MERGE THIS PR OR GO FOR: #47214⚠️ ### Root cause PR #46699 (compact mode) replaced the original `DockSize` enum (`Small`/`Medium`/`Large`) with a new one (Default/Compact). Existing users have `DockSize`: `Small` (or `Medium`/`Large`) in their `settings.json`, which the source-generated EnumConverter can't parse → the entire settings file fails to load. ### Fix Added a custom `JsonConverter<DockSize>` in _src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Settings/DockSettings.cs_ and applied it via `[JsonConverter]` on the enum. The converter: - Accepts current values (`Default`, `Compact`) — case-insensitive. - Maps any unknown legacy string (e.g. `Small`/`Medium`/`Large`) to `DockSize.Default`, preserving the user's existing visual experience. - Tolerates numeric values too, falling back to `Default` if out of range. - Writes as a string so output stays consistent with the source-gen `UseStringEnumConverter` setting. |
||
|
|
fde1599f7d |
[Grab And Move] Add touchpad compatibility InfoBar to settings page (#47213)
## Summary Adds an informational InfoBar at the top of the Grab And Move settings page noting that the utility may not work with some touchpads and is intended to be used with a physical mouse device. <img width="1180" height="460" alt="image" src="https://github.com/user-attachments/assets/4999d2f5-c785-41ab-b5fc-9dd8b7e72c7d" /> ## Changes - `src/settings-ui/Settings.UI/SettingsXAML/Views/GrabAndMovePage.xaml` — new `InfoBar` (Severity=Informational, IsClosable=False) placed at the top of the page's `StackPanel`. - `src/settings-ui/Settings.UI/Strings/en-us/Resources.resw` — added two resource strings: - `GrabAndMove_TouchpadInfoBar.Title` — "Touchpad compatibility" - `GrabAndMove_TouchpadInfoBar.Message` — explanatory text. Follows the existing InfoBar pattern (e.g., `MouseUtilsPage.xaml`). --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
c68003c678 |
Avoid MessageBox in ZoomIt in PowerToys (#47215)
<!-- 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 stops the ZoomIt message boxes complaining about keyboard shortcut conflicts - such conflicts are handled by the PowerToys settings window. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47154 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [x] **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 Setting any ZoomIt shortcut to the same sequence as other shortcuts won't produce the MessageBox anymore. The easiest is to use the default shortcuts and to bind the last one, **Panorama activation** to `Ctrl+7` (instead of the default `Ctrl+8`). `Ctrl+7` clashes with the ZoomIt **DemoType activation** shortcut. To make the MessageBox pop-out before the fix, takes pressing a few `Ctrl+1`s (the default **Zoom activation**). --------- Co-authored-by: Copilot <copilot@github.com> |
||
|
|
e5b0667397 |
Fix: Install CommandPalette.Extensions.winmd to WinUI3Apps for COM marshalling (#47210)
## Summary Follow-up fix for #47177. Installs `CommandPalette.Extensions.winmd` to the `WinUI3Apps\` directory (ExternalLocation) instead of the root install folder. ## Problem PR #47177 moved the sparse package's `ExternalLocation` from root to `WinUI3Apps\`, but the `CommandPalette.Extensions.winmd` was still installed to root via `DirectoryRef=INSTALLFOLDER`. The WinRT runtime needs this winmd in the ExternalLocation directory for COM proxy/stub creation during cross-process CmdPal extension activation. Without it, `CoCreateInstance` returns `E_NOINTERFACE` and the PowerToys extension fails to load in Command Palette. ## Fix Split the `BaseApplications.wxs` `DirectoryRef` into two blocks: - **winmd component** -> `WinUI3AppsInstallFolder` (for WinRT COM marshalling) - **auto-generated components** -> `INSTALLFOLDER` (unchanged, avoids ICE30 conflict with `WinUI3ApplicationsFiles`) ## Validation - [x] Local WiX compilation: no ICE30 errors - [x] ADO CI build 145429943 (v0.99.1): passed - [x] Manual verification on 25H2: CmdPal loads 55 commands after winmd placed in WinUI3Apps Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
8536d7b1cd |
Fix MSIX sparse package DACL contamination breaking File Explorer preview handlers (#47177)
## Summary Moves the MSIX sparse package's `ExternalLocation` from the PowerToys root install folder to the `WinUI3Apps\` subfolder, isolating DACL contamination from preview handler DLLs. ## Problem On Windows 23H2/24H2/25H2, MSIX sparse package registration adds AppContainer SIDs (`S-1-15-2-*` / `S-1-15-3-*`) to the DACL of the `ExternalLocation` folder. Since `ExternalLocation` pointed to the PowerToys root install folder, this broke File Explorer preview handlers — `prevhost.exe` (running at LOW integrity) could no longer load preview handler DLLs (`.txt`, `.md`, `.pdf`, `.svg`, etc.). ## Fix - **`CustomAction.cpp`**: Changed `ExternalLocation` from `installFolderPath` → `installFolderPath + L"WinUI3Apps\\"` - **`AppxManifest.xml`**: Removed unused PowerOCR `<Application>` entry; stripped `WinUI3Apps\` prefix from `Executable` paths (now relative to new ExternalLocation) - **`CmdPal.Ext.PowerToys.csproj`**: Moved `OutputPath` to `WinUI3Apps\` so the AOT-compiled extension EXE resolves correctly under the new ExternalLocation - **WiX installer files**: Updated source/install paths for KBM assets, CmdPal satellite assemblies, and `CommandPalette.Extensions.winmd` that moved with the CmdPal output - **ESRP signing**: Updated CmdPal dll/exe paths to include `WinUI3Apps\` prefix ## Validation | Test | 25H2 | 23H2 | |------|------|------| | DACL isolation (no S-1-15-* on root) | ✅ | ✅ | | Preview handlers (.txt, .md, .pdf, .svg) | ✅ | ✅ | | Peek | ✅ | ✅ | | Context menus (PowerRename, FileLocksmith, ImageResizer, New+) | ✅ | ✅ | | Upgrade path (old → new) | ✅ | ✅ | ## Files changed (12) - `installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp` — core fix - `src/PackageIdentity/AppxManifest.xml` — manifest cleanup - `src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PowerToys/Microsoft.CmdPal.Ext.PowerToys.csproj` — output path - `src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PowerToys/Helpers/PowerToysResourcesHelper.cs` — icon path - `installer/PowerToysSetupVNext/BaseApplications.wxs` — winmd source path - `installer/PowerToysSetupVNext/KeyboardManager.wxs` — KBM assets path - `installer/PowerToysSetupVNext/Resources.wxs` — CmdPal satellite paths - `installer/PowerToysSetupVNext/generateAllFileComponents.ps1` — scan path - `.pipelines/ESRPSigning_core.json` — signing paths - `src/PackageIdentity/BuildSparsePackage.ps1` — dev script hint - `src/PackageIdentity/readme.md` — docs - `doc/devdocs/modules/cmdpal/powertoys-extension-local-development.md` — docs --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
7ac16118c8 |
Settings UX tweaks (#47197)
<!-- 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 Before: <img width="779" height="333" alt="image" src="https://github.com/user-attachments/assets/92f7346f-11a3-4407-b26e-efc8196be59c" /> After: <img width="766" height="268" alt="image" src="https://github.com/user-attachments/assets/3d12676b-a245-4b53-8078-abcef4efbdab" /> Before: <img width="766" height="310" alt="image" src="https://github.com/user-attachments/assets/09e436da-317c-46e1-92c0-2c3200908b28" /> After: <img width="772" height="175" alt="image" src="https://github.com/user-attachments/assets/9f1024e5-0451-4577-b31f-366cde61d21c" /> <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |
||
|
|
7508e6e794 |
Add CmdPal folder to installer (#47196)
<!-- 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 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |
||
|
|
2d9dfff444 |
Fix for mouse jump crash (#47198)
<!-- 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 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |
||
|
|
9de2e5298a |
[GrabAndMove] excluded apps example text should use 'outlook' instead of 'outlook.exe' (#47194)
PR changes example text to outlook instead of outlook.exe, which can match both old version and new version. The placeholder text suggested 'outlook.exe', but new Outlook runs as olk.exe so the .exe-based entry fails both path and title matching. Using 'outlook' (without .exe) works correctly via window title matching. Fixes #47103 <!-- 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 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47103 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
07beeca9b9 |
Add Grab And Move and Power Display to bug report area selector (#47168)
Adds missing module entries to the bug report issue template so
reporters can classify issues for Grab And Move and Power Display in the
existing **Area(s) with issue?** multi-select.
## Summary of the Pull Request
- **Issue template update**
- Extended `.github/ISSUE_TEMPLATE/bug_report.yml` dropdown options for
`Area(s) with issue?`.
- Added:
- `Grab And Move`
- `Power Display`
```yaml
- type: dropdown
attributes:
label: Area(s) with issue?
options:
- FancyZones
- FancyZones Editor
- Grab And Move
# ...
- Peek
- Power Display
- PowerRename
```
## PR Checklist
- [ ] **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
## Detailed Description of the Pull Request / Additional comments
- **Scope**
- Single-file, metadata-only change in the bug-report template.
- **Behavioral impact**
- Improves triage categorization for two modules that were not
previously selectable in the issue form.
## Validation Steps Performed
- Confirmed the issue template includes both new options under `Area(s)
with issue?`.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: niels9001 <9866362+niels9001@users.noreply.github.com>
|
||
|
|
234933f6fa |
Add installer diagnostics guide for triaging update issues (#47105)
Step-by-step guide for diagnosing old update installer accumulation, covering log files to check, UpdateState.json interpretation, and common root causes. <!-- 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 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |
||
|
|
f8a10550f3 |
Update release notes skill (#47158)
Change the formatting from: "PR description in #123. Thanks @user" to "PR description in #123 by @user" ---- this follows the GitHub release notes format and makes sure people are correctly listed at the bottom of the release page |
||
|
|
ca1ffebc26 |
[Light Switch] Fix PowerDisplay profile integration (#47190)
<!-- 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 Fixes two bugs in the Light Switch ↔ PowerDisplay integration: 1. **Settings UI was hidden.** The "Apply monitor settings" expander (dark/light profile pickers) and the "PowerDisplay disabled" warning InfoBar were temporarily commented out in PR #46160. Users had no way to configure which profile to bind to each theme. 2. **Hotkey only applied one profile.** On every hotkey press ModuleInterface flips the Windows theme, but the service only notified PowerDisplay when `isManualOverride` toggled from `false` to `true`. Every even-numbered press was silently dropped, so the monitor profile stayed stuck on whichever direction the user pressed first. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 --------- Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
2e5c7d2ee6 |
Refresh check-spelling 0.0.26 (#47119)
This is a refresh based on
|
||
|
|
949e42c5c7 |
CmdPal: Fix crash when typing w/ indexer fallback on (#47186)
This isn't the same crash as #47148. It's another one. Undoubtably regressed in #46907 The function signature was all wrong. Hence the `System.ExecutionEngineException` Tested manually. |
||
|
|
a65266fcad |
cmdpal: fix the dock window border being visible on startup (#47187)
This is worse after the compact mode change fixed our frame margins. We hide our window frame with DWM. However, we only did that when we we `Activated`. Turns out, when the window is first created? we're not `Activated`. So until you focus another window, we'd look... objectively bad. |
||
|
|
656ea91580 |
CmdPal: Enable dock pinning and per-profile icons for Windows Terminal (#46372)
## Summary of the Pull Request
Enables Windows Terminal profiles to be **pinned to the Command Palette
dock** and shows **per-profile icons** instead of the generic Terminal
app logo.
### Dock Pinning
**Root cause:** `LaunchProfileCommand.Id` was never set (defaulted to
`string.Empty`). The context menu factory checks
`!string.IsNullOrEmpty(itemId)` before showing "Pin to Dock", so the
option was silently hidden. Additionally, `GetCommandItem()` was not
overridden, so pinned commands could not be resolved on load.
**Fix:**
- Set stable `Id` on `LaunchProfileCommand` (format:
`terminal/{appUserModelId}/{profileName}`)
- Rename constructor parameter `id` → `appUserModelId` to avoid
ambiguity with the generated command `Id`
- Override `GetCommandItem(string id)` in
`WindowsTerminalCommandsProvider` to look up profile items by ID
<img
src="https://github.com/user-attachments/assets/81c7acfc-09b5-40ab-be1d-8f268b24219b">
### Per-Profile Icons
**Root cause:** All profiles showed the same Terminal application logo.
The per-profile `icon` field from Terminal settings.json was parsed into
`TerminalProfile.Icon` but never used.
**Fix:**
- Add `InstallPath` to `TerminalPackage` (from `Package.InstalledPath`)
- Add `ResolveProfileIcon()` helper to `TerminalHelper` that resolves
`ms-appx:///` URIs to the Terminal package install directory (with scale
variant probing), passes through file paths and glyphs, and falls back
to the Terminal logo
- Cache the resolved icon in a local variable to avoid duplicate
filesystem IO per profile
- Set resolved per-profile icon on both `ListItem.Icon` and
`LaunchProfileCommand`
<img
src="https://github.com/user-attachments/assets/a9a476e2-7932-4457-bf04-bc346f2ad971">
### Robustness
- Use `Guid.TryParse` instead of `Guid.Parse` when reading profile GUIDs
from settings.json, so a malformed or empty GUID value does not throw
and take down the entire profile list
## PR Checklist
- [ ] **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
## Detailed Description of the Pull Request / Additional comments
**Files changed:**
- `Commands/LaunchProfileCommand.cs` — Assigns stable `Id`, renames `id`
→ `appUserModelId` throughout, adds `static MakeId()` helper
- `Helpers/TerminalHelper.cs` — Adds `ResolveProfileIcon()`,
`TryResolveGuidIcon()`, and `ResolveAppxPath()` helpers; hardens GUID
parsing with `Guid.TryParse`
- `Helpers/TerminalQuery.cs` — Passes `p.InstalledPath` to the
`TerminalPackage` constructor
- `Pages/ProfilesListPage.cs` — Resolves and caches icon path per
profile; sets `ListItem.Icon`
- `TerminalPackage.cs` — Adds `InstallPath` property
- `WindowsTerminalCommandsProvider.cs` — Overrides
`GetCommandItem(string id)` for dock-pinned command rehydration; removes
unused `using` directive
## Validation Steps Performed
- [x] Build clean with exit code 0
- [x] Dock pinning tested and working — "Pin to Dock" option appears and
survives restart
- [x] Per-profile icons verified — each profile displays its own icon in
both the list and the dock
---------
Co-authored-by: Michael Jolley <mike@baldbeardedbuilder.com>
Co-authored-by: Mike Griese <migrie@microsoft.com>
|
||
|
|
d9bfc42229 |
CmdPal: Fix fallback command disable toggle using interface type check (#47127)
## Summary One-line fix for [#46928](https://github.com/microsoft/PowerToys/issues/46928) — unable to disable built-in and third-party extension fallback commands in Command Palette. ## Problem In `TopLevelViewModel.cs`, the constructor checked: ```csharp if (IsFallback && commandItem is FallbackCommandItem fallback) ``` This uses the **concrete toolkit class** `FallbackCommandItem`. However, extensions loaded out-of-process via WinRT/COM only expose **interface proxies** — they never match the concrete class. As a result, `_fallbackId` was never set, and the settings toggle to disable a fallback command had no effect. ## Fix Changed the type check to use the `IFallbackCommandItem2` WinRT interface (which defines the `Id` property): ```csharp if (IsFallback && commandItem is IFallbackCommandItem2 fallback) ``` The `IFallbackCommandItem2` interface is already defined in the Extensions IDL and implemented by `FallbackCommandItem` in the toolkit. This correctly matches both in-process and out-of-process extension objects. ## Validation - [x] Build clean (`Microsoft.CmdPal.UI.ViewModels` — exit code 0) - [x] No ABI or schema changes - [x] Single file changed, single line modified Fixes #46928 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
11bfb40ec6 |
bump cmdpal to 0.10 (#47181)
title |
||
|
|
1eecf46c51 |
Fix missing images in Settings (#47165)
<!-- 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 ⚠️ I'm not sure if this is the actual fix.. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47150 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |
||
|
|
eeaf89e481 |
Update .gitignore for squad-specific files (#47122)
Updating .gitignore to ignore all Squad related files |
||
|
|
bfc5fea11e |
Fix CmdPal crash when typing in search box (#47148)
Add reentrancy guard for FilteredItems ObservableCollection mutations. WinUI3's native XAML renderer can pump the message loop while processing a CollectionChanged notification from InPlaceUpdateList. This allows a second DoOnUiThread task to begin mutating FilteredItems while the first is still mid-update, causing heap corruption and an access violation (0xc0000005) in ntdll.dll. The fix introduces RunFilteredItemsUpdate() which uses a boolean flag to detect same-thread reentrancy (C# lock is reentrant so _listLock cannot prevent this). When reentrancy is detected, only the latest pending update is stored and executed after the in-flight mutation completes, ensuring the UI converges to the newest state without overlapping mutations. Fixes: 100% reproducible crash in CmdPal when typing any character in the search box (build ID 145015494). <!-- 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 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47145 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
98c5b45a30 |
[Settings] Make GrabAndMove strings modifier-agnostic (#47178)
## Summary of the Pull Request [PR #47052](https://github.com/microsoft/PowerToys/pull/47052) introduced a **Win** option alongside **Alt** for the GrabAndMove activation modifier (`GrabAndMove_ModifierKey` dropdown, `Alt` / `Win`). However several user-facing strings in Settings still hardcode `Alt`, which now misrepresents the feature when a user has selected `Win` as the modifier. This PR updates the wording of those strings to be modifier-agnostic. ### Strings changed (en-us) | Key | Before | After | |---|---|---| | `GrabAndMove.ModuleDescription` | Move and resize windows with **Alt+Drag**. Left-click to move, right-click to resize. | Move and resize windows by holding **a modifier key** and dragging. Left-click to move, right-click to resize. | | `Oobe_GrabAndMove_HowToUse.Text` | Hold **Alt** and left-click drag... Hold **Alt** and right-click drag... | Hold the **activation modifier key** and left-click drag... Hold the **activation modifier key** and right-click drag... | | `GrabAndMove_UseAltResize.Header` | Enable **Alt + Right-click** to resize | Enable **modifier + right-click** to resize | | `GrabAndMove_UseAltResize.Description` | Hold **Alt** and right-click to resize... | Hold the **activation modifier key** and right-click to resize... | | `GrabAndMove_ExcludeApps.Description` | Excludes an application from being moved or resized **with Alt+Drag** - add one application name per line | Excludes an application from being moved or resized **by Grab And Move** - add one application name per line | `GrabAndMove_ShouldAbsorbAlt` strings are intentionally left unchanged ΓÇö that toggle is genuinely Alt-specific (it suppresses the window-menu activation triggered by Alt). ## PR Checklist - [x] **Closes:** follow-up to #47052 - [x] **Communication:** no additional comms needed - [x] **Tests:** N/A (en-us resource strings only) - [x] **Manual Tests:** Launched Settings UI, verified the GrabAndMove page renders the new strings correctly (module description, `Enable modifier + right-click` toggle header/description, excluded-apps description). Verified OOBE `How to use` text renders with the updated phrasing. - [x] **Localization:** Only `en-us/Resources.resw` updated; other locales will pick up the new English strings via the standard localization pipeline. - [x] **No dev docs required** ## Detailed Description of the Pull Request / Additional comments - Scope is deliberately kept to wording only ΓÇö no logic, IPC, or XAML bindings touched. Resource keys are preserved, so nothing else needs to change. - CC @GordonLamMSFT as the GrabAndMove / #47052 author. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
5509628f51 |
Changing outline ico colors (#47166)
<!-- 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 Making sure it's using the right shade of black :) <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47152 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |
||
|
|
a255493c68 |
Settings string updates (#47164)
<!-- 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 - Small tweaks to a few setting strings <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47151 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |
||
|
|
5c15a63846 |
Power Display tweaks (#47163)
<!-- 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 - Consistent naming: `Power Display` - Making the flyout a bit smaller - Removing dead code (titlebar button colors) <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47153 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |
||
|
|
2c95a61bb3 |
fix(cmdpal): refresh dock settings on pin/unpin (#47155) (#47169)
## Summary of the Pull Request Fixes the CmdPal Dock not refreshing when a command is pinned or unpinned. The dock now immediately reflects pin/unpin changes without requiring a CmdPal restart. **Root cause:** `DockViewModel._settings` was cached at construction and only refreshed via the `SettingsChanged` event. However, pin/unpin operations in `CommandProviderWrapper.PinDockBand()` / `UnpinDockBand()` intentionally save with `hotReload: false` (to avoid double-updates), so `SettingsChanged` never fires. When `DockBands_CollectionChanged` called `SetupBands()`, it iterated over the stale `_settings` which didn't include the newly pinned band. **Fix:** Re-read `DockSettings` from the settings service at the top of `DockBands_CollectionChanged`, ensuring `SetupBands()` always sees the latest persisted state. ## PR Checklist - [x] Closes: #47155 - [x] **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 - [x] **Localization:** All end-user-facing strings can be localized — N/A (no UI string changes) - [ ] **Dev docs:** Added/updated — N/A (no public API or behavior doc changes) ## Detailed Description of the Pull Request / Additional comments Single-line change in `src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Dock/DockViewModel.cs`: ```csharp _settings = _settingsService.Settings.DockSettings; ``` Added before the existing `SetupBands()` call inside `DockBands_CollectionChanged`. The edit-mode guard (`_isEditing`) is already checked earlier in the method, so drag/drop operations are unaffected. This fix covers both pin and unpin flows since both use the same `hotReload: false` → `CommandsChanged` → `DockBands_CollectionChanged` code path. ## Validation Steps Performed - Built `Microsoft.CmdPal.UI.ViewModels.csproj` — exit code 0, no warnings related to change - Verified unpin flow uses the same code path and benefits from the fix - Manual verification: pin a command via CmdPal → dock updates immediately without restart Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
dbc390ab0d |
fix: default 8 modules to disabled to match EnabledModules.cs (#47144)
<!-- 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
Fixes a mismatch where 8 modules inherited the default
`is_enabled_by_default() = true` from `PowertoyModuleIface` while
`EnabledModules.cs` declared them `false`. On a clean install the Runner
would enable these modules on first launch, then Settings UI would flip
them back off once it persisted `settings.json` — a one-time visible
flicker and a DSC compliance gap.
Adds an explicit `is_enabled_by_default() const override { return false;
}` in the following module interfaces so both sides of the default
agree:
- `src/modules/launcher/Microsoft.Launcher/dllmain.cpp` (PowerToys Run)
- `src/modules/CropAndLock/CropAndLockModuleInterface/dllmain.cpp`
- `src/modules/AdvancedPaste/AdvancedPasteModuleInterface/dllmain.cpp`
- `src/modules/Hosts/HostsModuleInterface/dllmain.cpp`
- `src/modules/registrypreview/RegistryPreviewExt/dllmain.cpp`
-
`src/modules/EnvironmentVariables/EnvironmentVariablesModuleInterface/dllmain.cpp`
- `src/modules/Workspaces/WorkspacesModuleInterface/dllmain.cpp`
- `src/modules/powerdisplay/PowerDisplayModuleInterface/dllmain.cpp`
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [ ] Closes: #xxx
<!-- - [ ] Closes: #yyy (add separate lines for additional resolved
issues) -->
- [ ] **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
Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||
|
|
c6a79360f3 |
Unstick GrabAndMove keys, add Win modifier and improve coords (#47052)
<!-- 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 brings some quality of life fixes: - Alt won't stick when pressing Ctrl+Alt+Del or Alt+Tab into an admin process. - Add Win as an option for the move/resize modifier. - The box window geometry box is opaque now. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [x] **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 - Tested that Ctrl+Alt+Del doesn't stick the Alt key. - Tested that the Win key works as expected as a modifier. - Compared the last commit for performance with the previous one (the opaque geometry info box is drawn with an increased number of calls). |
||
|
|
b0ccc2394a |
Add update-available badge to system tray icon (#47030)
When an update is available (readyToDownload or readyToInstall), the tray icon switches to a badged variant with an orange dot. Works for both default mode (color icon.ico) and theme-adaptive mode (light/dark variants). Closes: #19222 Closes: #25497 ## Changes ### Tray icon update badge - Add 3 badged icon variants - Extend get_icon() to select badged variant based on update_available state - Add set_tray_icon_update_available() for runtime icon switching - Hook into UpdateUtils.cpp state transitions via dispatch_run_on_main_ui_thread - Check UpdateState at startup to show badge immediately if update pending - Add 'Update available' context menu item at top of tray menu when active ### Fix: update icons not deployed (bug fix) - Add APPICON_UPDATE icon resource to runner.base.rc (iconUpdate.ico was missing) - Add CopyFileToFolders entries for iconUpdate.ico, PowerToysDarkUpdate.ico, and PowerToysWhiteUpdate.ico in runner.vcxproj - Add all update icon files to installer Core.wxs so they ship in releases ### UX improvements - 'Update available' tray menu item now navigates to General page (Overview) instead of opening Settings to Dashboard - Update InfoBar severity changed from Success/Informational to Warning across GeneralPage, LaunchPage, and CheckUpdateControl - Dashboard update badge gradient and icon refreshed (orange theme, exclamation glyph) - AccentButtonStyle applied to 'Install Now' button - Fixed casing: 'Update Available' to 'Update available' - Added UpdateAvailableInfoBar.Title resource string - Add orange update dot to the General navview item ### Screenshots Before: <img width="146" height="78" alt="image" src="https://github.com/user-attachments/assets/c80b8b5f-da94-4cba-92c9-3fcca685653c" /> After: <img width="184" height="104" alt="image" src="https://github.com/user-attachments/assets/13fc6b34-6e2a-4060-a2f7-f0b6b0d15363" /> <img width="150" height="84" alt="image" src="https://github.com/user-attachments/assets/2673239c-8ce3-437b-947a-1d66803a87ec" /> <img width="150" height="100" alt="image" src="https://github.com/user-attachments/assets/c321deda-770d-47ff-9600-c395f466d444" /> <img width="189" height="104" alt="image" src="https://github.com/user-attachments/assets/2c56d1b7-6615-4d85-80b9-a1cee6413b75" /> <img width="473" height="218" alt="image" src="https://github.com/user-attachments/assets/b0fb59ed-f8bd-40a0-aefd-816a71fc231f" /> <img width="1048" height="288" alt="image" src="https://github.com/user-attachments/assets/29d34e01-f6a9-46c3-a56e-2c50a07718a1" /> <img width="206" height="155" alt="image" src="https://github.com/user-attachments/assets/80e9f77e-aae5-429a-b6be-f0e9f296e929" /> <img width="434" height="163" alt="image" src="https://github.com/user-attachments/assets/7c9d6cd5-fdaa-4b70-a2c0-cff87f5fcf1c" /> <img width="379" height="270" alt="image" src="https://github.com/user-attachments/assets/03e0f60d-a901-45e7-a03a-18be28ec87ed" /> ## How to test Since local dev builds use version `0.0.1` which blocks update checks, you need to temporarily fake an older version: 1. In `src/Version.props`, change `<Version>0.0.1</Version>` to `<Version>0.87.0</Version>` 2. Optionally, in `src/runner/UpdateUtils.cpp`, change both interval constants to `1` (minute) for faster testing: ```cpp constexpr int64_t UPDATE_CHECK_INTERVAL_MINUTES = 1; constexpr int64_t UPDATE_CHECK_AFTER_FAILED_INTERVAL_MINUTES = 1; ``` 3. Build and run the runner 4. Within ~1 minute (with the interval change) or after clicking 'Check for updates' in Settings > General, the runner will query GitHub and find a newer version ### Verify - [ ] Tray icon changes to the update variant (badged with orange dot) - [ ] Right-clicking the tray icon shows 'Update available' at the top of the context menu - [ ] Clicking 'Update available' opens Settings directly to the General page - [ ] Settings General page shows the update InfoBar with Warning severity - [ ] Dashboard shows the update badge with orange gradient and exclamation icon - [ ] Quick Access flyout shows update InfoBar with Warning severity **Remember to revert Version.props and UpdateUtils.cpp before committing!** --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
c8ffcb73c3 |
[ImageResizer] Fix JPEG quality setting ignored after WinUI3 migration (#47134)
<!-- 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 Restores honoring of the user-configured JPEG quality — via the Settings UI slider, the CLI `--quality` flag, or the persisted `imageresizer_jpegQualityLevel` — when resizing JPEG files. Since the WinUI3 migration (#45288) any Q value from 1 to 100 produced byte-identical output at WIC's internal default (~Q90) because the transcode encoder silently ignored the setting. Only `src/modules/imageresizer/ui/Models/ResizeOperation.cs` is changed. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #47135 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [x] **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 Built `ImageResizerCLI.csproj` in `Release|x64` with `/p:RuntimeIdentifier=win-x64`; no new warnings. Ran the resulting `x64\Release\WinUI3Apps\PowerToys.ImageResizerCLI.exe` against a synthetic test JPEG (`a.jpg` 2373×905, ~240 KB) and both in-tree EXIF assets: - `src/modules/imageresizer/tests/TestMetadataIssue1928.jpg` (42 EXIF properties) - `src/modules/imageresizer/tests/TestMetadataIssue2447.jpg` (44 EXIF properties) Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
fcfbf83b55 |
Settings design tweaks + fixes (#47132)
This PR: - Fixed a UI regression on the ZoomIt page - Updates the CmdPal settings page to make sure it has the latest links and imagery - Updates the New+ assets so they fit inline with all other screenshots and assets - Adds missing screenshots to the `docs` folder Closes: #44521 |
||
|
|
de6ba922fd |
Fixing OOBE and assets for Power Display and Grab And Move (#47033)
## Summary Adds the out-of-box experience (OOBE) for the new **Grab And Move** module and refreshes related assets across the repo. ## Changes ### Grab And Move OOBE - New `OobeGrabAndMove.xaml` / `.xaml.cs` page following the standard PowerToys OOBE pattern (hero image, How to use, Tips & tricks, Settings button, Learn more link) - Wired into `OobeWindow.xaml(.cs)` as a new `NavigationViewItem` so it appears in the OOBE wizard - Added localized resource strings (Title, Description, How to use, Tips and tricks) in `Resources.resw` - New OOBE animation: `Assets/Settings/Modules/OOBE/GrabAndMove.gif` ### Settings UI polish - Moved the Grab And Move nav item under *Windowing & Layouts* into its proper alphabetical position (after FancyZones, before Workspaces) - Added a "NEW" `InfoBadge` to both the Grab And Move item and its parent *Windowing & Layouts* group so users can discover the new utility ### Asset refresh - High-res `GrabAndMove.ico` (replaces the placeholder) - Updated Settings module icons (`Assets/Settings/Icons/GrabAndMove.png`, `Assets/Settings/Modules/GrabAndMove.png`) - New overview/marketing PNGs under `doc/images/overview/` (large, small, and original) ### README - Added **Grab And Move** and **PowerDisplay** to the utilities table in `README.md`, reflowed alphabetically into a clean 10x3 grid - New `doc/images/icons/GrabAndMove.png` and `doc/images/icons/PowerDisplay.png` for the table ## Validation - Settings UI builds cleanly - Grab And Move appears in the OOBE wizard navigation and renders correctly - "NEW" badges visible on first launch - README table renders with all 30 utilities, no empty trailing cells <img width="1307" height="807" alt="image" src="https://github.com/user-attachments/assets/f8d2ef96-a9f3-4307-9714-c308e216c044" /> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
71cb9bc54e |
[Quick Accent] Fix issue where default "All available" setting is not parsed correctly (#47117)
## Summary of the Pull Request
When first enabled in the Settings application, Quick Accent defaults to
**All available** character sets, but the persisted "ALL" option in the
settings.json file is not understood by the application itself. This
leads to the fallback SPECIAL character set being selected - unbeknownst
to the user - which only contains a small subset of the available
mappings.
This PR also adds two new characters to the Hungarian language, as
requested under #47085.
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [x] Closes: #47113
- [x] Closes: #47085
- [x] **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
The cause of the issue is:
1. The default `SelectedLang` value for a new Quick Accent settings file
is "ALL", set in `PowerAccentProperties.cs`:
|
||
|
|
8ad571dcde |
Fix Common.Interop.UnitTests.TestSend infinite hang on CI (#47123)
## Summary Fixes an infinite hang in Common.Interop.UnitTests.TestSend that caused the x64 CI job to time out at 80 minutes on retried runs (originally observed on #47106, but the race is latent in any run that shares a CI agent with a previous run). ## Root cause The test used two machine-global named pipes (\\.\pipe\serverside and \\.\pipe\clientside) as fixed constants, and waited for the pipe callback with an **unbounded** eset.WaitOne(). If a prior test run on the same CI agent left a pipe handle alive (e.g. after a job cancellation or a flaky cleanup), the next run's TwoWayPipeMessageIPCManaged handshake would silently never complete, and `WaitOne()` would block until the pipeline's job-level timeout (~80 minutes) killed the agent. ## Fix Two small, orthogonal changes in `InteropTests.cs`: 1. **Unique pipe names per run** — suffix the pipe paths with `Environment.ProcessId` + a fresh `Guid`, so runs on the same agent can never collide. 2. **Bounded wait** — `reset.WaitOne(TimeSpan.FromSeconds(30))` wrapped in `Assert.IsTrue` with a diagnostic message identifying the pipes. A broken handshake now fails the test in 30 s with a clear error, instead of hanging the CI job. The inner `Assert.AreEqual(testString, msg)` — the actual correctness check — is unchanged. On the happy path the callback fires in milliseconds and the test behaves identically to before. ## Verification Built and ran locally with VS2026 MSBuild (x64 Release): `TestSend` passes in ~139 ms. ## Follow-up (not in this PR) `TwoWayPipeMessageIPC.cpp` still relies on a `Thread.Sleep(100)` race workaround (comment in the test) for server-ready timing. A proper handshake there would let us drop the sleep; out of scope here. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
bf00c1b94f |
[Common][PowerDisplay][QuickAccess] Shared flyout positioning helper (#47097)
## Summary Introduces a shared FlyoutWindowHelper in Common.UI.Controls and migrates both **PowerDisplay** and **QuickAccess** to it, eliminating two pre-existing flyout positioning bugs and removing duplicated math. ## Bugs fixed ### 1. PowerDisplay flyout overlapped the taskbar at 100% scaling The previous PowerDisplay-only positioning math anchored to the screen bounds rather than `DisplayArea.WorkArea` on certain monitor configurations, so the bottom edge of the flyout could land on top of the taskbar. ### 2. QuickAccess flyout rendered too large / partially off-screen after switching DPI between 150% and 100% The previous code passed `WindowEx.Width`/`Height` into `MoveAndResize` on every summon. Those properties are **not** the XAML literals — they are computed live as `AppWindow.Size / GetDpiForWindow() * 96`. After a system-scaling switch, the runtime size has drifted, that wrong "DIP" value got fed into `MoveAndResize`, and the destination DPI multiplier scaled it again → wrong size, and the wrong size shifted the bottom-right anchor off-screen. QuickAccess now caches the XAML design size once at construction (when the values are still trustworthy) and uses the cache as the source of truth. ## How the helper works - Uses **absolute screen coordinates** against `DisplayArea.WorkArea`, so it handles non-primary and negatively-positioned monitors correctly. - Performs a **1×1 `MoveAndResize` "teleport"** onto the target display before the final visible-size call. The 1×1 jump may cross a DPI boundary, but it's invisible; the second call sets the real size while the window is already on the destination monitor, so no DPI boundary is crossed for the rendered size and `WM_DPICHANGED` never fires on a visible window. - Exposes overloads for bottom-right anchoring (both flyouts) and centered placement (PowerDisplay's `IdentifyWindow`). This teleport-then-size approach matches the technique the original Settings.UI flyout used for years before it was removed. ## Cleanup - Deletes the PowerDisplay-only `DpiSuppressor` — its WM_DPICHANGED-suppression code path is now dead because the helper sidesteps the message entirely. - The `DpiSuppressor` class also doubled as a generic WndProc subclass to route `WM_HOTKEY` into `HotkeyService`. That piece is preserved as `WindowMessageHook` in `Common.UI.Controls/Window/` since PowerDisplay still needs in-process hotkey handling. ## Validation - `Common.UI.Controls`, `PowerDisplay`, and `QuickAccess` build clean (x64/Debug). - Manual repro: - PowerDisplay flyout no longer overlaps taskbar at 100% scaling, on multiple invocations. - QuickAccess renders at the correct size and position when switching system scaling between 150% and 100%. - PowerDisplay hotkey toggle still works after the `DpiSuppressor` → `WindowMessageHook` rename. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
7a89220a91 |
[QuickAccent] Add en-dash to VK_MINUS for SPECIAL language (#47106)
## Summary of the Pull Request Add en-dash to the existing dash characters available under the minus key for the Special Characters set. This PR re-creates #45965 by @daverayment because that PR's pipeline appears to have been corrupted. All credit for the change belongs to @daverayment — the commit on this branch preserves their original authorship. ## PR Checklist - [x] Closes: #44030 - [x] Closes: #36805 ## Detailed Description of the Pull Request / Additional comments This PR adds the en-dash '–' character to the VK_MINUS key under the Special Characters character set, positioned before the em-dash character. Although the character is available under VK_COMMA, it should be present under VK_MINUS, along with the other dash characters. Previously, en-dash was available for VK_MINUS under the Hebrew language, so users who selected **All available** character sets (or who specifically selected Hebrew as a workaround) had access to en-dash via the minus key. However, this was seen as a duplication of the VK_COMMA functionality and the character was removed for the Hebrew character set in #43504. Although this is technically correct, this has understandably caused confusion for users who relied on the prior behaviour. The comment on the VK_COMMA for the Special Characters declaration previously read: `csharp // – is in VK_MINUS for other languages, but not VK_COMMA, so we add it here. ` That ""for other languages"" is telling. The Hebrew en-dash entry was removed, and the en-dash mapping for the minus key is not present for any other language, orphaning the functionality. ## Validation Steps Performed Original author @daverayment built and ran the updated Quick Accent code and confirmed that the character was available when only the Special character set was selected, and that it was absent when that set was deselected. Confirmed that the character was available under both comma and minus keys. Co-authored-by: Dave Rayment <dave.rayment@gmail.com> |
||
|
|
3a541bb3eb |
CmdPal: Adding prop to cmdpal.ui.csproj to enable telem in AOT builds (#47121)
This pull request makes a configuration change to the `Microsoft.CmdPal.UI.csproj` project file to improve telemetry support for AOT (Ahead-Of-Time) builds. Project configuration: * Added the `EventSourceSupport` property and set it to `true` to ensure telemetry events are triggered correctly when building with AOT. |
||
|
|
f4d23c85a6 |
[CmdPal Dock] Compact mode (#46699)
## Summary of the Pull Request This PR introduces the following changes: - Shaving off a few pixels of the default height in `Top` or `Bottom` mode. - A new `Compact` mode that automatically hides the `Subtitle` and is 28px in height. - Compact mode is only available for Top/Bottom dock positions. Left/Right always use the Default size. - The Dock Size settings card is hidden in the settings UI when Left or Right is selected. - At runtime, Left/Right positions force `DockSize.Default` regardless of the persisted setting, ensuring default item styles and appbar sizing are always used. The user's Compact preference is preserved so switching back to Top/Bottom restores it. Stable vs. Compact mode: <img width="392" height="131" alt="image" src="https://github.com/user-attachments/assets/f0ac3126-a773-46c6-87da-001fd66c5899" /> <img width="929" height="272" alt="image" src="https://github.com/user-attachments/assets/684c2ea7-449d-4ed2-989d-5066c7f28200" /> ## PR Checklist - [ ] **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 ## Detailed Description of the Pull Request / Additional comments ### Compact mode restricted to Top/Bottom Compact mode is only supported when the dock is positioned at the Top or Bottom of the screen. When Left or Right is selected: - The **Dock Size** settings card is hidden in the dock settings UI. - The runtime forces \\DockSize.Default\\ so the default band template, default item styles, and default appbar dimensions are always used. - The persisted \\DockSize\\ value is **not** cleared — switching back to Top/Bottom restores the user's previous Compact choice. ### Files changed - \\DockSettingsPage.xaml\\ / \\.xaml.cs\\ — Conditional visibility for the Dock Size settings card - \\DockControl.xaml.cs\\ — Effective size override in \\UpdateSettings()\\ - \\DockWindow.xaml.cs\\ — \\EffectiveDockSize()\\ helper used for appbar sizing and change detection ## Validation Steps Performed --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: niels9001 <9866362+niels9001@users.noreply.github.com> |
||
|
|
5e302bed79 |
CmdPal: Improve indexer plain query search (#46907)
## Summary of the Pull Request This PR improves File Search: - Improves simple free-text Windows Search queries with implicit filename broadening while preserving structured AQS input. - Adds resilient fallback behavior for noisy or punctuation-heavy searches by retrying with literal filename matching (fixes failed searches with `&` or other symbols). - Surfaces Windows Search availability and indexing-status notices in the indexer page and fallback item -- if the Windows Search service is down or unreachable, we show this to the user. - Extends production time logging. - Adds documentation of query transformation for maintainers. - Adds some unit tests to pretend that we care. ## Pictures? Pictures! Error notices: <img width="890" height="148" alt="image" src="https://github.com/user-attachments/assets/2370af01-04de-48a5-aa8e-06b95b54571e" /> <img width="880" height="369" alt="image" src="https://github.com/user-attachments/assets/b2afa52b-02f8-4031-a61a-fa1031f86542" /> <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #46574 - [X] Closes: #44689 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 |