[PR #11680] Add snap-layouts support to the Terminal #28709

Open
opened 2026-01-31 09:30:17 +00:00 by claunia · 0 comments
Owner

Original Pull Request: https://github.com/microsoft/terminal/pull/11680

State: closed
Merged: Yes


Adds snap layout support to the Terminal's maximize button. This PR is
full of BODGY, so brace yourselves.

Big thanks to Chris Swan in #11134 for building the prototype.
I don't believe this solves #8795, because XAML islands can't get
nchittest messages

  • The window procedure for the drag bar forwards clicks on its client
    area to its parent as non-client clicks.
  • BODGY: It also manually handles the caption buttons. They exist in
    the titlebar, and work reasonably well with just XAML, if the drag bar
    isn't covering them.
  • However, to get snap layout support, we need to actually return
    HTMAXBUTTON where the maximize button is. If the drag bar doesn't
    cover the caption buttons, then the core input site (which takes up
    the entirety of the XAML island) will steal the WM_NCHITTEST before
    we get a chance to handle it.
  • So, the drag bar covers the caption buttons, and manually handles
    hovering and pressing them when needed. This gives the impression that
    they're getting input as they normally would, even if they're not
    really getting input via XAML.
  • We also need to manually display the button tooltips now, because XAML
    doesn't know when they've been hovered for long enough. Hence, the
    _displayToolTip ThrottledFuncTrailing

Validation

Minimized, maximized, restored down, hovered the buttons slowly, moved
the mouse over them quickly, they feel the same as before. But now with
snap layouts appearing.

TODO!

  • I'm working on getting the ToolTips on the caption buttons back. Alas, I needed a demo of this today, so I'll fix that tomorrow morning.
  • mild concern: I should probably test Win 10 to make sure there wasn't weird changes to the message loop in win11 that means this is broken on win10.
  • I think I used the wrong issue number for tons of my comments throughout this PR. Double check that. Should be #9443, not #9447.

Closes #9443
I thought this took care of #8587 as a bonus, because I was here, and the fix is now trivial, but looking at the latest commit that regressed.

Co-authored-by: Chris Swan chswan@microsoft.com

**Original Pull Request:** https://github.com/microsoft/terminal/pull/11680 **State:** closed **Merged:** Yes --- Adds snap layout support to the Terminal's maximize button. This PR is full of BODGY, so brace yourselves. Big thanks to Chris Swan in #11134 for building the prototype. I don't believe this solves #8795, because XAML islands can't get nchittest messages - The window procedure for the drag bar forwards clicks on its client area to its parent as non-client clicks. - BODGY: It also _manually_ handles the caption buttons. They exist in the titlebar, and work reasonably well with just XAML, if the drag bar isn't covering them. - However, to get snap layout support, we need to actually return `HTMAXBUTTON` where the maximize button is. If the drag bar doesn't cover the caption buttons, then the core input site (which takes up the entirety of the XAML island) will steal the `WM_NCHITTEST` before we get a chance to handle it. - So, the drag bar covers the caption buttons, and manually handles hovering and pressing them when needed. This gives the impression that they're getting input as they normally would, even if they're not _really_ getting input via XAML. - We also need to manually display the button tooltips now, because XAML doesn't know when they've been hovered for long enough. Hence, the `_displayToolTip` `ThrottledFuncTrailing` ## Validation Minimized, maximized, restored down, hovered the buttons slowly, moved the mouse over them quickly, they feel the same as before. But now with snap layouts appearing. ## TODO! * [x] I'm working on getting the ToolTips on the caption buttons back. Alas, I needed a demo of this _today_, so I'll fix that tomorrow morning. * [x] mild concern: I should probably test Win 10 to make sure there wasn't weird changes to the message loop in win11 that means this is broken on win10. * [x] I think I used the wrong issue number for tons of my comments throughout this PR. Double check that. Should be #9443, not #9447. Closes #9443 I thought this took care of #8587 ~as a bonus, because I was here, and the fix is _now_ trivial~, but looking at the latest commit that regressed. Co-authored-by: Chris Swan <chswan@microsoft.com>
claunia added the pull-request label 2026-01-31 09:30:17 +00:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#28709