feat(mac): refine menubar nodes layout

This commit is contained in:
Peter Steinberger
2025-12-26 18:38:32 +00:00
parent 747cc4daa5
commit f50f18f65a
5 changed files with 456 additions and 93 deletions

View File

@@ -48,20 +48,8 @@ struct MenuContent: View {
if self.showVoiceWakeMicPicker {
self.voiceWakeMicMenu
}
Divider()
Button("Open Chat") {
Task { @MainActor in
let sessionKey = await WebChatManager.shared.preferredSessionKey()
WebChatManager.shared.show(sessionKey: sessionKey)
}
}
Button("Open Dashboard") {
Task { @MainActor in
await self.openDashboard()
}
}
Toggle(isOn: Binding(get: { self.state.canvasEnabled }, set: { self.state.canvasEnabled = $0 })) {
Text("Allow Canvas")
Label("Allow Canvas", systemImage: "rectangle.and.pencil.and.ellipsis")
}
.onChange(of: self.state.canvasEnabled) { _, enabled in
if !enabled {
@@ -69,16 +57,36 @@ struct MenuContent: View {
}
}
if self.state.canvasEnabled {
Button(self.state.canvasPanelVisible ? "Close Canvas" : "Open Canvas") {
Button {
if self.state.canvasPanelVisible {
CanvasManager.shared.hideAll()
} else {
// Don't force a navigation on re-open: preserve the current web view state.
_ = try? CanvasManager.shared.show(sessionKey: "main", path: nil)
}
} label: {
Label(
self.state.canvasPanelVisible ? "Close Canvas" : "Open Canvas",
systemImage: "rectangle.inset.filled.on.rectangle")
}
}
Divider()
Button {
Task { @MainActor in
let sessionKey = await WebChatManager.shared.preferredSessionKey()
WebChatManager.shared.show(sessionKey: sessionKey)
}
} label: {
Label("Open Chat", systemImage: "bubble.left.and.bubble.right")
}
Button {
Task { @MainActor in
await self.openDashboard()
}
} label: {
Label("Open Dashboard", systemImage: "gauge")
}
Divider()
Toggle(
isOn: Binding(
get: { self.browserControlEnabled },
@@ -86,7 +94,7 @@ struct MenuContent: View {
self.browserControlEnabled = enabled
ClawdisConfigFile.setBrowserControlEnabled(enabled)
})) {
Text("Browser Control")
Label("Browser Control", systemImage: "globe")
}
Divider()
Button("Settings…") { self.open(tab: .general) }