






















@@ -49,6 +49,7 @@ struct SettingsRootView: View {
4949.frame(width: SettingsTab.windowWidth, height: SettingsTab.windowHeight, alignment: .topLeading)
5050.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
5151.background(SettingsWindowChromeConfigurator())
52+.toolbar(removing: .sidebarToggle)
5253.onReceive(NotificationCenter.default.publisher(for: .openclawSelectSettingsTab)) { note in
5354if let tab = note.object as? SettingsTab {
5455withAnimation(.spring(response: 0.32, dampingFraction: 0.85)) {
@@ -279,22 +280,72 @@ enum SettingsTab: CaseIterable, Identifiable, Hashable {
279280}
280281281282private struct SettingsWindowChromeConfigurator: NSViewRepresentable {
283+func makeCoordinator() -> Coordinator {
284+Coordinator()
285+}
286+282287func makeNSView(context: Context) -> NSView {
283288let view = NSView(frame: .zero)
284-self.configureWindow(for: view)
289+self.configureWindow(for: view, coordinator: context.coordinator)
285290return view
286291}
287292288293func updateNSView(_ nsView: NSView, context: Context) {
289-self.configureWindow(for: nsView)
294+self.configureWindow(for: nsView, coordinator: context.coordinator)
290295}
291296292-private func configureWindow(for view: NSView) {
297+private func configureWindow(for view: NSView, coordinator: Coordinator) {
293298DispatchQueue.main.async {
294299guard let window = view.window else { return }
295300 window.styleMask.remove(.fullSizeContentView)
296301 window.titleVisibility = .visible
297302 window.titlebarAppearsTransparent = true
303+ window.toolbarStyle = .unifiedCompact
304+ coordinator.installToolbar(on: window)
305+}
306+}
307+308+@MainActor
309+final class Coordinator: NSObject, NSToolbarDelegate {
310+private static let toolbarIdentifier = NSToolbar.Identifier("OpenClawSettingsToolbar")
311+private let items: [NSToolbarItem.Identifier] = [
312+.toggleSidebar,
313+.flexibleSpace,
314+]
315+316+func installToolbar(on window: NSWindow) {
317+if window.toolbar?.identifier == Self.toolbarIdentifier {
318+return
319+}
320+321+let toolbar = NSToolbar(identifier: Self.toolbarIdentifier)
322+ toolbar.delegate = self
323+ toolbar.displayMode = .iconOnly
324+ window.toolbar = toolbar
325+}
326+327+func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
328+self.items
329+}
330+331+func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
332+self.items
333+}
334+335+func toolbar(
336+ _ toolbar: NSToolbar,
337+ itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier,
338+ willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem?
339+{
340+guard itemIdentifier == .toggleSidebar else { return nil }
341+let item = NSToolbarItem(itemIdentifier: .toggleSidebar)
342+ item.label = "Toggle Sidebar"
343+ item.paletteLabel = "Toggle Sidebar"
344+ item.toolTip = "Toggle Sidebar"
345+ item.image = NSImage(systemSymbolName: "sidebar.left", accessibilityDescription: "Toggle Sidebar")
346+ item.action = #selector(NSSplitViewController.toggleSidebar(_:))
347+ item.target = nil
348+return item
298349}
299350}
300351}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。