From c7ad686c72693f1f526d32fc4cb89e05cae6b733 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 18:28:51 +0000 Subject: [PATCH 1/4] fix(desktop): keep floating bar hidden after queued notifications when disabled When the floating bar is disabled, notifications temp-show it and dismissNotificationAndAdvanceQueue re-hides it afterward via the notificationWasTemporarilyShown flag. Presenting a queued notification clobbered that flag (the window is already visible mid-chain), so once two or more notifications chained, the final dismiss skipped the re-hide and the bar stayed on screen permanently despite the toggle being off. Preserve the flag for the duration of the notification chain; it is still reset when the chain ends or consumed by the re-hide. Fixes #6972 https://claude.ai/code/session_01T6yzmd3o4uxxo133uepsF4 --- .../FloatingControlBar/FloatingControlBarWindow.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift b/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift index 23a5403fbf8..a01914aaaf6 100644 --- a/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift +++ b/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift @@ -1447,11 +1447,14 @@ class FloatingControlBarManager { private func presentNotification(_ notification: FloatingBarNotification, in window: FloatingControlBarWindow) { persistNotificationMessageIfNeeded(notification) + // The flag must survive the whole notification chain: when a queued + // notification is presented the window is already visible from the + // temp-show, so resetting it here would skip the re-hide in + // dismissNotificationAndAdvanceQueue and leave the bar on screen + // forever with "Show floating bar" off (#6972). if !window.isVisible { notificationWasTemporarilyShown = true window.orderFrontRegardless() - } else { - notificationWasTemporarilyShown = false } window.showNotification(notification) From 130a2730797d27d6c1af2d92b63896c1885b633a Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 18:28:59 +0000 Subject: [PATCH 2/4] chore(desktop): changelog entry for floating bar hide fix (#6972) https://claude.ai/code/session_01T6yzmd3o4uxxo133uepsF4 --- desktop/CHANGELOG.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/desktop/CHANGELOG.json b/desktop/CHANGELOG.json index 49a1be906ac..14764ab7627 100644 --- a/desktop/CHANGELOG.json +++ b/desktop/CHANGELOG.json @@ -1,5 +1,7 @@ { - "unreleased": [], + "unreleased": [ + "Fixed the floating bar staying visible after notifications when \"Show floating bar\" is turned off" + ], "releases": [ { "version": "0.11.459", From 609ee4ca350874098c61b352700af19c6761ff9d Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 18:33:17 +0000 Subject: [PATCH 3/4] fix(desktop): cover notifications flushed at AI-conversation close while bar disabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review follow-up: a notification queued during an AI conversation is flushed by closeAIConversation's completion while the window is still visible, so the temp-show flag was never armed and the unconditional orderOut swallowed the notification instantly. Arm the re-hide whenever a notification is presented with the bar disabled, and skip the close-path orderOut when a flushed notification is on screen — its dismissal re-hides the bar. https://claude.ai/code/session_01T6yzmd3o4uxxo133uepsF4 --- .../FloatingControlBarWindow.swift | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift b/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift index a01914aaaf6..c1b1ddde709 100644 --- a/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift +++ b/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift @@ -398,8 +398,10 @@ class FloatingControlBarWindow: NSPanel, NSWindowDelegate { FloatingControlBarManager.shared.flushQueuedNotificationsIfPossible() // If the user has the bar disabled, hide it completely after closing the - // AI conversation instead of leaving the compact pill visible. - if !FloatingControlBarManager.shared.isEnabled { + // AI conversation instead of leaving the compact pill visible — unless a + // queued notification was just flushed; hiding now would swallow it, and + // its dismissal re-hides the bar anyway. + if !FloatingControlBarManager.shared.isEnabled && self?.state.currentNotification == nil { self?.orderOut(nil) } } @@ -1451,10 +1453,15 @@ class FloatingControlBarManager { // notification is presented the window is already visible from the // temp-show, so resetting it here would skip the re-hide in // dismissNotificationAndAdvanceQueue and leave the bar on screen - // forever with "Show floating bar" off (#6972). - if !window.isVisible { + // forever with "Show floating bar" off (#6972). The bar can also be + // visible while disabled (e.g. a notification flushed right as an AI + // conversation closes), so any presentation with the bar disabled + // must arm the re-hide. + if !window.isVisible || !isEnabled { notificationWasTemporarilyShown = true - window.orderFrontRegardless() + if !window.isVisible { + window.orderFrontRegardless() + } } window.showNotification(notification) From 4cf0db9dcf03ec120939cffeea93b41c1051f5a2 Mon Sep 17 00:00:00 2001 From: Eulices Lopez Date: Wed, 10 Jun 2026 19:40:28 -0400 Subject: [PATCH 4/4] docs(desktop): clarify floating notification flag reset --- .../Sources/FloatingControlBar/FloatingControlBarWindow.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift b/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift index c1b1ddde709..2f822a20e25 100644 --- a/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift +++ b/desktop/Desktop/Sources/FloatingControlBar/FloatingControlBarWindow.swift @@ -1456,7 +1456,7 @@ class FloatingControlBarManager { // forever with "Show floating bar" off (#6972). The bar can also be // visible while disabled (e.g. a notification flushed right as an AI // conversation closes), so any presentation with the bar disabled - // must arm the re-hide. + // must arm the re-hide; dismissNotificationAndAdvanceQueue owns the reset. if !window.isVisible || !isEnabled { notificationWasTemporarilyShown = true if !window.isVisible {