fix(mac): size highlighted session rows

This commit is contained in:
Peter Steinberger
2025-12-22 22:59:59 +01:00
parent 1e1d76d600
commit afc09744b4

View File

@@ -517,6 +517,7 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate {
private final class HighlightedMenuItemHostView: NSView {
private let baseView: AnyView
private let hosting: NSHostingView<AnyView>
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))
}
}