diff --git a/apps/desktop/src-tauri/src/permissions.rs b/apps/desktop/src-tauri/src/permissions.rs index 1e5b9abdb2..dccbf5991d 100644 --- a/apps/desktop/src-tauri/src/permissions.rs +++ b/apps/desktop/src-tauri/src/permissions.rs @@ -162,10 +162,12 @@ fn macos_sync_activation_policy(app: &tauri::AppHandle, should_show_dock: bool) pub(crate) fn prepare_macos_panel_window( app: &tauri::AppHandle, ) -> MacosPanelWindowActivationGuard { - MACOS_PENDING_PANEL_WINDOWS.fetch_add(1, Ordering::AcqRel); + let prev = MACOS_PENDING_PANEL_WINDOWS.fetch_add(1, Ordering::AcqRel); - if let Err(err) = app.set_activation_policy(tauri::ActivationPolicy::Accessory) { - tracing::warn!("Failed to prepare macOS panel activation policy: {err}"); + if prev == 0 { + if let Err(err) = app.set_activation_policy(tauri::ActivationPolicy::Accessory) { + tracing::warn!("Failed to prepare macOS panel activation policy: {err}"); + } } MacosPanelWindowActivationGuard { app: app.clone() } @@ -177,6 +179,16 @@ pub(crate) fn sync_macos_dock_visibility(app: &tauri::AppHandle) { return; } + let has_visible_panel_window = app.webview_windows().iter().any(|(label, window)| { + CapWindowId::from_str(label) + .map(|id| !id.activates_dock() && window.is_visible().unwrap_or(false)) + .unwrap_or(false) + }); + + if has_visible_panel_window { + return; + } + let should_hide_dock = GeneralSettingsStore::get(app) .ok() .flatten()