From 5919a277bb59648e7220fa13eb31d15f40a2cd98 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 27 Dec 2025 02:43:31 +0100 Subject: [PATCH] fix(macos): stabilize menu width tracking --- .../Clawdis/MenuSessionsInjector.swift | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift b/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift index 9d440c8dd..d250b9857 100644 --- a/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift +++ b/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift @@ -751,14 +751,19 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate { if let openWidth = self.menuOpenWidth { return max(300, openWidth) } - let candidates: [CGFloat] = [ - menu.size.width, - menu.minimumWidth, - self.lastKnownMenuWidth ?? 0, - self.fallbackWidth, - ] - let resolved = candidates.max() ?? self.fallbackWidth - return max(300, resolved) + return self.currentMenuWidth(for: menu) + } + + private func menuWindowWidth(for menu: NSMenu) -> CGFloat? { + var menuWindow: NSWindow? + for item in menu.items { + if let window = item.view?.window { + menuWindow = window + break + } + } + guard let width = menuWindow?.contentView?.bounds.width, width > 0 else { return nil } + return width } private func sortedNodeEntries() -> [InstanceInfo] { @@ -806,6 +811,9 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate { } private func currentMenuWidth(for menu: NSMenu) -> CGFloat { + if let width = self.menuWindowWidth(for: menu) { + return max(300, width) + } let candidates: [CGFloat] = [ menu.size.width, menu.minimumWidth,