diff --git a/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift b/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift index 8d456dfd0..9883d11e0 100644 --- a/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift +++ b/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift @@ -517,6 +517,7 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate { private final class HighlightedMenuItemHostView: NSView { private let baseView: AnyView private let hosting: NSHostingView + private var targetWidth: CGFloat private var tracking: NSTrackingArea? private var hovered = false { didSet { self.updateHighlight() } @@ -525,20 +526,21 @@ private final class HighlightedMenuItemHostView: NSView { init(rootView: AnyView, width: CGFloat) { self.baseView = rootView self.hosting = NSHostingView(rootView: AnyView(rootView.environment(\.menuItemHighlighted, false))) + self.targetWidth = max(1, width) super.init(frame: .zero) self.addSubview(self.hosting) self.hosting.autoresizingMask = [.width, .height] - self.hosting.frame = self.bounds - - self.frame.size.width = max(1, width) - let size = self.fittingSize - self.frame.size.height = size.height + self.updateSizing() } @available(*, unavailable) required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + override var intrinsicContentSize: NSSize { + self.hosting.fittingSize + } + override func updateTrackingAreas() { super.updateTrackingAreas() if let tracking { @@ -579,6 +581,13 @@ private final class HighlightedMenuItemHostView: NSView { private func updateHighlight() { self.hosting.rootView = AnyView(self.baseView.environment(\.menuItemHighlighted, self.hovered)) + self.updateSizing() self.needsDisplay = true } + + private func updateSizing() { + self.hosting.frame.size.width = self.targetWidth + let size = self.hosting.fittingSize + self.frame = NSRect(origin: .zero, size: NSSize(width: self.targetWidth, height: size.height)) + } }