From 20319340a620671d007b606cf70c695d094a9d98 Mon Sep 17 00:00:00 2001 From: l0ng-ai <24760907+l0ng-ai@users.noreply.github.com> Date: Sat, 31 Oct 2026 20:28:01 +0800 Subject: [PATCH] fix(settings): subtract the window frame when shrinking to the work area --- src-tauri/src/windows.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src-tauri/src/windows.rs b/src-tauri/src/windows.rs index 5fec8fbd7..9a6b29267 100644 --- a/src-tauri/src/windows.rs +++ b/src-tauri/src/windows.rs @@ -813,7 +813,10 @@ fn place_settings_window(window: &WebviewWindow, parent: &WebviewWindow) -> taur let available = area.size.to_logical::(scale); let pos = parent.outer_position()?.to_logical::(scale); let size = parent.outer_size()?.to_logical::(scale); - let own = window.outer_size()?.to_logical::(window.scale_factor()?); + let own_scale = window.scale_factor()?; + let own = window.outer_size()?.to_logical::(own_scale); + let inner = window.inner_size()?.to_logical::(own_scale); + let frame = (own.width - inner.width, own.height - inner.height); let bounds = fit_bounds( (pos.x, pos.y, size.width, size.height), (own.width, own.height), @@ -824,11 +827,13 @@ fn place_settings_window(window: &WebviewWindow, parent: &WebviewWindow) -> taur (bounds.1 * scale).round() as i32, ))?; if (bounds.2, bounds.3) != (own.width, own.height) { + // Sizes are set on the client area, and even an undecorated window has a resize frame. + let (width, height) = ((bounds.2 - frame.0).max(1.0), (bounds.3 - frame.1).max(1.0)); window.set_min_size(Some(tauri::LogicalSize::new( - SETTINGS_MIN_SIZE.0.min(bounds.2), - SETTINGS_MIN_SIZE.1.min(bounds.3), + SETTINGS_MIN_SIZE.0.min(width), + SETTINGS_MIN_SIZE.1.min(height), )))?; - window.set_size(tauri::LogicalSize::new(bounds.2, bounds.3))?; + window.set_size(tauri::LogicalSize::new(width, height))?; } Ok(()) }