From 1c1b81133cbbd9ef289773e39c12844e8809a6ea Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Wed, 29 Jul 2026 13:42:59 +0200 Subject: [PATCH] fix(client/windows): the settings surface fills the window again MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The redesign left the page rooted in a vstack, and a StackPanel hands its child the DESIRED height — the NavigationView was clipped in a short window and floated in a tall one. The nav, the Edit-profile scrim and the delete ContentDialog now share one grid, so every layer stretches with the window (the dialog is its own WinUI layer and only needs to be in the tree). Co-Authored-By: Claude Fable 5 --- clients/windows/src/app/settings.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/clients/windows/src/app/settings.rs b/clients/windows/src/app/settings.rs index a9c14447..f58576d0 100644 --- a/clients/windows/src/app/settings.rs +++ b/clients/windows/src/app/settings.rs @@ -1448,8 +1448,11 @@ pub(crate) fn settings_page( let ss = set_screen.clone(); move || ss.call(Screen::Hosts) }); - // The Edit-profile modal overlays the whole NavigationView (scrim + card), and the delete - // confirmation — a ContentDialog, so its own WinUI layer — can sit above either. + // One grid, so every layer FILLS the window (a vstack would hand the NavigationView its + // desired height — clipped when the window is short, floating when it is tall): the nav, + // the Edit-profile scrim + card over it, and the delete confirmation (a ContentDialog, + // its own WinUI layer, so its slot in the cell is irrelevant — it just needs to be in + // the tree). let mut layers: Vec = vec![nav.into()]; if edit_open { if let Some(p) = &active { @@ -1458,9 +1461,8 @@ pub(crate) fn settings_page( )); } } - let mut surface: Vec = vec![grid(layers).into()]; if let Some(dialog) = confirm { - surface.push(dialog); + layers.push(dialog); } - vstack(surface).into() + grid(layers).into() }