fix(windows): de-parent settings window on Windows so DWM paints its shadow

An owned child (WS_POPUP) of a borderless parent gets no DWM shadow,
leaving the frameless settings window flat against its project window.
Ownership is already tracked by the settings-<parent> label (parent-close
cleanup in on_window_event, menu modality), so make the settings window
top-level on Windows; macOS and Linux keep the native parent link.
This commit is contained in:
arookieofc
2026-11-02 20:50:29 +08:00
parent 8ea8c98a39
commit 795f8e85f1
2 changed files with 11 additions and 5 deletions
+7 -3
View File
@@ -796,9 +796,13 @@ pub fn open_settings_window(
#[cfg(target_os = "linux")]
crate::linux_window_state::prepare(app, &mut config);
let builder = WebviewWindowBuilder::from_config(app, &config);
// AppKit child windows can disappear when dragged to another display's Space.
// The settings label already tracks ownership and parent-close cleanup.
#[cfg(not(target_os = "macos"))]
// Windows: an owned child (WS_POPUP) of a borderless parent gets no DWM
// shadow, leaving the frameless settings window flat against its parent.
// Ownership is tracked by the `settings-<parent>` label instead
// (parent-close cleanup, menu modality), so only Linux keeps the native
// parent link. AppKit child windows can disappear when dragged to another
// display's Space, so macOS keeps it too.
#[cfg(target_os = "linux")]
let builder = builder.and_then(|b| b.parent(&parent));
let window = builder
.and_then(|b| dev_font_preferences(b).build())
+4 -2
View File
@@ -1,8 +1,10 @@
/**
* Settings window ↔ its project window.
*
* Settings live in a native child window `settings-<parent>` (see
* src-tauri/src/windows.rs) that only runs the settings pages. The action
* Settings live in a separate window `settings-<parent>` (see
* src-tauri/src/windows.rs) that only runs the settings pages (a native
* child of the parent on macOS/Linux; top-level on Windows so DWM paints
* its shadow). The action
* registry stays in the project window: it sends the settings window a
* description of every action (Keymap page, links that run actions) and runs
* the actions the settings window forwards.