diff --git a/apps/macos/Sources/Clawdis/ContextMenuCardView.swift b/apps/macos/Sources/Clawdis/ContextMenuCardView.swift index 5a52a02dd9..bad340a427 100644 --- a/apps/macos/Sources/Clawdis/ContextMenuCardView.swift +++ b/apps/macos/Sources/Clawdis/ContextMenuCardView.swift @@ -6,7 +6,10 @@ struct ContextMenuCardView: View { private let rows: [SessionRow] private let statusText: String? private let isLoading: Bool - private let padding: CGFloat = 10 + private let paddingTop: CGFloat = 6 + private let paddingBottom: CGFloat = 6 + private let paddingTrailing: CGFloat = 16 + private let paddingLeading: CGFloat = 22 private let barHeight: CGFloat = 3 init( @@ -20,7 +23,7 @@ struct ContextMenuCardView: View { } var body: some View { - VStack(alignment: .leading, spacing: 8) { + VStack(alignment: .leading, spacing: 6) { HStack(alignment: .firstTextBaseline) { Text("Context") .font(.caption.weight(.semibold)) @@ -53,7 +56,10 @@ struct ContextMenuCardView: View { } } } - .padding(self.padding) + .padding(.top, self.paddingTop) + .padding(.bottom, self.paddingBottom) + .padding(.leading, self.paddingLeading) + .padding(.trailing, self.paddingTrailing) .frame(minWidth: 300, maxWidth: .infinity, alignment: .leading) .transaction { txn in txn.animation = nil } } diff --git a/apps/macos/Sources/Clawdis/MenuContextCardInjector.swift b/apps/macos/Sources/Clawdis/MenuContextCardInjector.swift index 97b68f45eb..04101cd3d0 100644 --- a/apps/macos/Sources/Clawdis/MenuContextCardInjector.swift +++ b/apps/macos/Sources/Clawdis/MenuContextCardInjector.swift @@ -70,17 +70,22 @@ final class MenuContextCardInjector: NSObject, NSMenuDelegate { self.adoptMenuWidthIfAvailable(for: menu, hosting: hosting) } - self.loadTask = Task { [weak hosting] in - await self.refreshCache(force: initialIsLoading) - guard let hosting else { return } - let view = self.cachedView() - await MainActor.run { - hosting.rootView = view - hosting.invalidateIntrinsicContentSize() - self.adoptMenuWidthIfAvailable(for: menu, hosting: hosting) - let size = hosting.fittingSize - hosting.frame.size.height = size.height + if initialIsLoading { + self.loadTask = Task { [weak hosting] in + await self.refreshCache(force: true) + guard let hosting else { return } + let view = self.cachedView() + await MainActor.run { + hosting.rootView = view + hosting.invalidateIntrinsicContentSize() + self.adoptMenuWidthIfAvailable(for: menu, hosting: hosting) + let size = hosting.fittingSize + hosting.frame.size.height = size.height + } } + } else { + // Keep the menu stable while it's open; refresh in the background for next open. + self.loadTask = Task { await self.refreshCache(force: false) } } }