feat(rust): native Win32 window opacity via SetLayeredWindowAttributes

Tauri 2.11 doesn't expose set_opacity on its WebviewWindow (open issue
tauri-apps/tauri#3279). Drop down to the Win32 API directly: ensure
WS_EX_LAYERED is set on the overlay HWND, then SetLayeredWindowAttributes
with an 0..255 alpha. This is true OS-level window translucency — the
same call Tauri will eventually wrap upstream — not a CSS shim.

windows crate version is pinned to 0.61 to match Tauri 2.11.x's
transitive dependency, so WebviewWindow::hwnd() returns a compatible
HWND with no diamond-dependency conflict.

Replaces the earlier eval-based opacity workaround in apply_state and
set_window_opacity. Both call sites now go through apply_window_opacity.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Michael Chihlas
2026-05-08 22:34:05 -04:00
parent ca4bd8da7a
commit faaf9a90ba
3 changed files with 62 additions and 16 deletions

View File

@@ -30,3 +30,11 @@ tokio = { version = "1", features = ["time", "macros"] }
tauri-plugin-window-state = "2"
tauri-plugin-global-shortcut = "2"
[target."cfg(windows)".dependencies]
# Match Tauri 2.11.x's transitive windows version so `WebviewWindow::hwnd()`
# returns a compatible HWND (no diamond-dependency conflict).
windows = { version = "0.61", features = [
"Win32_Foundation",
"Win32_UI_WindowsAndMessaging",
] }