From 6205b955dac2569a15a7cb16b5a414d927160879 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 22 Dec 2025 23:30:25 +0100 Subject: [PATCH] style(mac): adjust session row padding and menu options --- .../Clawdis/MenuSessionsInjector.swift | 36 ++++++++++--------- .../Clawdis/SessionMenuLabelView.swift | 10 +++--- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift b/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift index 9883d11e0..50c784952 100644 --- a/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift +++ b/apps/macos/Sources/Clawdis/MenuSessionsInjector.swift @@ -273,10 +273,9 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate { private func buildSyncingMenu(for row: SessionRow) -> NSMenu { let menu = NSMenu() - let options: [(title: String, value: String?)] = [ + let options: [(title: String, value: String)] = [ ("On", "on"), ("Off", "off"), - ("Default", nil), ] for (title, value) in options { let item = NSMenuItem(title: title, action: #selector(self.patchSyncing(_:)), keyEquivalent: "") @@ -286,28 +285,33 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate { "value": value as Any, ] let isSelected: Bool = { - switch value { - case .none: - return row.syncing == nil - case "on": - return row.syncing?.isOn == true - case "off": - return row.syncing?.isOff == true - default: - return false - } + if value == "on" { return row.syncing?.isOn == true } + return row.syncing?.isOff == true }() item.state = isSelected ? .on : .off menu.addItem(item) } + + if let syncing = row.syncing, + !syncing.isOn, + !syncing.isOff, + !syncing.label.isEmpty + { + menu.addItem(NSMenuItem.separator()) + let current = NSMenuItem(title: "Sync \(syncing.label)", action: nil, keyEquivalent: "") + current.state = .on + current.isEnabled = false + menu.addItem(current) + } + return menu } private func buildThinkingMenu(for row: SessionRow) -> NSMenu { let menu = NSMenu() - let levels: [String?] = ["off", "minimal", "low", "medium", "high", nil] + let levels: [String] = ["off", "minimal", "low", "medium", "high"] for level in levels { - let title = (level ?? "default").capitalized + let title = level.capitalized let item = NSMenuItem(title: title, action: #selector(self.patchThinking(_:)), keyEquivalent: "") item.target = self item.representedObject = [ @@ -322,9 +326,9 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate { private func buildVerboseMenu(for row: SessionRow) -> NSMenu { let menu = NSMenu() - let levels: [String?] = ["on", "off", nil] + let levels: [String] = ["on", "off"] for level in levels { - let title = (level ?? "default").capitalized + let title = level.capitalized let item = NSMenuItem(title: title, action: #selector(self.patchVerbose(_:)), keyEquivalent: "") item.target = self item.representedObject = [ diff --git a/apps/macos/Sources/Clawdis/SessionMenuLabelView.swift b/apps/macos/Sources/Clawdis/SessionMenuLabelView.swift index 8cb5e0db7..a5fec4c49 100644 --- a/apps/macos/Sources/Clawdis/SessionMenuLabelView.swift +++ b/apps/macos/Sources/Clawdis/SessionMenuLabelView.swift @@ -15,9 +15,9 @@ struct SessionMenuLabelView: View { let row: SessionRow let width: CGFloat @Environment(\.menuItemHighlighted) private var isHighlighted - private let paddingLeading: CGFloat = 22 - private let paddingTrailing: CGFloat = 14 - private let barHeight: CGFloat = 5 + private let paddingLeading: CGFloat = 24 + private let paddingTrailing: CGFloat = 16 + private let barHeight: CGFloat = 6 private var primaryTextColor: Color { self.isHighlighted ? Color(nsColor: .selectedMenuItemTextColor) : .primary @@ -28,7 +28,7 @@ struct SessionMenuLabelView: View { } var body: some View { - VStack(alignment: .leading, spacing: 6) { + VStack(alignment: .leading, spacing: 7) { ContextUsageBar( usedTokens: row.tokens.total, contextTokens: row.tokens.contextTokens, @@ -58,7 +58,7 @@ struct SessionMenuLabelView: View { .padding(.leading, 2) } } - .padding(.vertical, 6) + .padding(.vertical, 8) .padding(.leading, self.paddingLeading) .padding(.trailing, self.paddingTrailing) }