























@@ -173,19 +173,7 @@ struct OpenClawApp: App {
173173private func openDashboardWindow() {
174174HoverHUDController.shared.setSuppressed(true)
175175self.isMenuPresented = false
176-if DashboardManager.shared.showConfiguredWindowIfPossible() {
177-return
178-}
179-Task { @MainActor in
180-if DashboardManager.shared.showConfiguredWindowIfPossible() {
181-return
182-}
183-do {
184-try await DashboardManager.shared.show()
185-} catch {
186-DashboardManager.shared.showFailure(error)
187-}
188-}
176+AppNavigationActions.openDashboard()
189177}
190178191179@MainActor
@@ -250,6 +238,59 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
250238private let webChatAutoLogger = Logger(subsystem: "ai.openclaw", category: "Chat")
251239let updaterController: UpdaterProviding = makeUpdaterController()
252240241+func applicationDockMenu(_: NSApplication) -> NSMenu? {
242+let menu = NSMenu()
243+ menu.autoenablesItems = false
244+ menu.addItem(self.dockMenuItem(
245+ title: "Open Dashboard",
246+ systemImage: "gauge",
247+ action: #selector(self.openDashboardFromDockMenu(_:))))
248+ menu.addItem(self.dockMenuItem(
249+ title: "Open Chat",
250+ systemImage: "bubble.left.and.bubble.right",
251+ action: #selector(self.openChatFromDockMenu(_:))))
252+let canvasTitle = AppStateStore.shared.canvasPanelVisible ? "Close Canvas" : "Open Canvas"
253+let canvasItem = self.dockMenuItem(
254+ title: canvasTitle,
255+ systemImage: "rectangle.inset.filled.on.rectangle",
256+ action: #selector(self.toggleCanvasFromDockMenu(_:)))
257+ canvasItem.isEnabled = AppStateStore.shared.canvasEnabled
258+ menu.addItem(canvasItem)
259+ menu.addItem(.separator())
260+ menu.addItem(self.dockMenuItem(
261+ title: "Settings…",
262+ systemImage: "gearshape",
263+ action: #selector(self.openSettingsFromDockMenu(_:))))
264+return menu
265+}
266+267+private func dockMenuItem(title: String, systemImage: String, action: Selector) -> NSMenuItem {
268+let item = NSMenuItem(title: title, action: action, keyEquivalent: "")
269+ item.target = self
270+ item.image = NSImage(systemSymbolName: systemImage, accessibilityDescription: title)
271+return item
272+}
273+274+@objc
275+private func openDashboardFromDockMenu(_: Any?) {
276+AppNavigationActions.openDashboard()
277+}
278+279+@objc
280+private func openChatFromDockMenu(_: Any?) {
281+AppNavigationActions.openChat()
282+}
283+284+@objc
285+private func toggleCanvasFromDockMenu(_: Any?) {
286+AppNavigationActions.toggleCanvas()
287+}
288+289+@objc
290+private func openSettingsFromDockMenu(_: Any?) {
291+AppNavigationActions.openSettings()
292+}
293+253294func application(_: NSApplication, open urls: [URL]) {
254295Task { @MainActor in
255296for url in urls {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。