Workspace: Fix an overlay issue for workspace snapshot draw#45183
Merged
Workspace: Fix an overlay issue for workspace snapshot draw#45183
Conversation
This comment has been minimized.
This comment has been minimized.
lei9444
approved these changes
Jan 29, 2026
yeelam-gordon
pushed a commit
that referenced
this pull request
Feb 4, 2026
<!-- 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 Root cause: Workspaces uses DPI-unaware coordinates (via GetDpiUnawareScreens() which runs in a temporary DPI-unaware thread) to store/match window positions across different DPI settings. However, WorkspacesEditor itself uses PerMonitorV2 DPI awareness for UI clarity. When assigning these DPI-unaware coordinates directly to WPF window properties, WPF automatically scaled them again based on current DPI, causing incorrect overlay positioning. Fix: Use SetWindowPositionDpiUnaware() to bypass WPF's automatic DPI scaling by temporarily switching to DPI-unaware context when calling Win32 SetWindowPos. Fix #45174 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #45174 <!-- - [ ] 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 Verified in local build vs production build, and the problem fixed in local build.
vanzue
added a commit
that referenced
this pull request
Feb 5, 2026
<!-- 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 Root cause: Workspaces uses DPI-unaware coordinates (via GetDpiUnawareScreens() which runs in a temporary DPI-unaware thread) to store/match window positions across different DPI settings. However, WorkspacesEditor itself uses PerMonitorV2 DPI awareness for UI clarity. When assigning these DPI-unaware coordinates directly to WPF window properties, WPF automatically scaled them again based on current DPI, causing incorrect overlay positioning. Fix: Use SetWindowPositionDpiUnaware() to bypass WPF's automatic DPI scaling by temporarily switching to DPI-unaware context when calling Win32 SetWindowPos. Fix #45174 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #45174 <!-- - [ ] 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 Verified in local build vs production build, and the problem fixed in local build.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary of the Pull Request
Root cause: Workspaces uses DPI-unaware coordinates (via GetDpiUnawareScreens()
which runs in a temporary DPI-unaware thread) to store/match window positions
across different DPI settings. However, WorkspacesEditor itself uses PerMonitorV2
DPI awareness for UI clarity. When assigning these DPI-unaware coordinates directly
to WPF window properties, WPF automatically scaled them again based on current DPI,
causing incorrect overlay positioning.
Fix: Use SetWindowPositionDpiUnaware() to bypass WPF's automatic DPI scaling
by temporarily switching to DPI-unaware context when calling Win32 SetWindowPos.
Fix #45174
PR Checklist
Detailed Description of the Pull Request / Additional comments
Validation Steps Performed
Verified in local build vs production build, and the problem fixed in local build.