From 776987856aabd275f40a71ffcdc5a75f242acf15 Mon Sep 17 00:00:00 2001 From: vicrodh Date: Sun, 8 Mar 2026 21:43:30 -0600 Subject: [PATCH] fix: tray icon path for Flatpak and titlebar double-click maximize - Fix Flatpak tray icon path (com.blitzfc.qbz, not com.blitzkriegfc.qbz) - Fix titlebar double-click: prevent JS handler from firing on native drag regions, which caused double toggleMaximize (maximize then immediate restore) - Improve tray click handlers to properly detect minimized state --- src-tauri/src/tray.rs | 20 +++++++++++++++----- src/lib/components/TitleBar.svelte | 7 ++++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index b89086c25..26dee83bd 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -25,7 +25,7 @@ fn load_tray_icon() -> Image<'static> { // This works better with StatusNotifierItem/libayatana-appindicator if is_flatpak() { let icon_path = - PathBuf::from("/app/share/icons/hicolor/32x32/apps/com.blitzkriegfc.qbz.png"); + PathBuf::from("/app/share/icons/hicolor/32x32/apps/com.blitzfc.qbz.png"); if icon_path.exists() { log::info!("Flatpak detected, loading tray icon from: {:?}", icon_path); if let Ok(icon_data) = std::fs::read(&icon_path) { @@ -135,22 +135,32 @@ pub fn init_tray(app: &AppHandle) -> Result<(), Box> { log::info!("Tray icon left-click"); let app = tray.app_handle(); if let Some(window) = app.get_webview_window("main") { - if window.is_visible().unwrap_or(true) { + let is_visible = window.is_visible().unwrap_or(true); + let is_minimized = window.is_minimized().unwrap_or(false); + + if is_visible && !is_minimized { let _ = window.hide(); } else { let _ = window.show(); - let _ = window.unminimize(); + if is_minimized { + let _ = window.unminimize(); + } let _ = window.set_focus(); } } } - // Double click always shows and focuses + // Double click always brings window to front TrayIconEvent::DoubleClick { .. } => { log::info!("Tray icon double-click"); let app = tray.app_handle(); if let Some(window) = app.get_webview_window("main") { + // Ensure window is visible first let _ = window.show(); - let _ = window.unminimize(); + // Unminimize if minimized + if window.is_minimized().unwrap_or(false) { + let _ = window.unminimize(); + } + // Always bring to front and focus let _ = window.set_focus(); } } diff --git a/src/lib/components/TitleBar.svelte b/src/lib/components/TitleBar.svelte index a5ef4497d..4ed90f699 100644 --- a/src/lib/components/TitleBar.svelte +++ b/src/lib/components/TitleBar.svelte @@ -94,8 +94,13 @@ } async function handleDoubleClick(e: MouseEvent) { - // Don't toggle maximize when double-clicking the search input + // Don't toggle maximize when double-clicking the search input or window controls if ((e.target as HTMLElement)?.closest('.titlebar-search')) return; + if ((e.target as HTMLElement)?.closest('.window-controls')) return; + // Don't toggle if the native drag region already handles it + // (data-tauri-drag-region natively double-clicks to toggle maximize) + const target = e.target as HTMLElement; + if (target?.hasAttribute('data-tauri-drag-region')) return; await appWindow?.toggleMaximize(); }