@@ -15,18 +15,34 @@ extension CodeEditWindowController {
1515 toolbar. delegate = self
1616 toolbar. displayMode = . labelOnly
1717 toolbar. showsBaselineSeparator = false
18- self . window? . titleVisibility = toolbarCollapsed ? . visible : . hidden
19- self . window? . toolbarStyle = . unifiedCompact
18+ self . window? . titleVisibility = toolbarCollapsed ? . visible : . hidden
19+ if #available( macOS 26 , * ) {
20+ self . window? . toolbarStyle = . unified
21+ } else {
22+ self . window? . toolbarStyle = . unifiedCompact
23+ }
2024 self . window? . titlebarSeparatorStyle = . automatic
2125 self . window? . toolbar = toolbar
2226 }
2327
2428 func toolbarDefaultItemIdentifiers( _ toolbar: NSToolbar ) -> [ NSToolbarItem . Identifier ] {
25- [
29+ var items : [ NSToolbarItem . Identifier ] = [
2630 . toggleFirstSidebarItem,
2731 . flexibleSpace,
28- . stopTaskSidebarItem,
29- . startTaskSidebarItem,
32+ ]
33+
34+ if #available( macOS 26 , * ) {
35+ items += [
36+ . taskSidebarItem
37+ ]
38+ } else {
39+ items += [
40+ . stopTaskSidebarItem,
41+ . startTaskSidebarItem,
42+ ]
43+ }
44+
45+ items += [
3046 . sidebarTrackingSeparator,
3147 . branchPicker,
3248 . flexibleSpace,
@@ -37,10 +53,12 @@ extension CodeEditWindowController {
3753 . flexibleSpace,
3854 . toggleLastSidebarItem
3955 ]
56+
57+ return items
4058 }
4159
4260 func toolbarAllowedItemIdentifiers( _ toolbar: NSToolbar ) -> [ NSToolbarItem . Identifier ] {
43- [
61+ var items : [ NSToolbarItem . Identifier ] = [
4462 . toggleFirstSidebarItem,
4563 . sidebarTrackingSeparator,
4664 . flexibleSpace,
@@ -49,9 +67,20 @@ extension CodeEditWindowController {
4967 . branchPicker,
5068 . activityViewer,
5169 . notificationItem,
52- . startTaskSidebarItem,
53- . stopTaskSidebarItem
5470 ]
71+
72+ if #available( macOS 26 , * ) {
73+ items += [
74+ . taskSidebarItem
75+ ]
76+ } else {
77+ items += [
78+ . startTaskSidebarItem,
79+ . stopTaskSidebarItem
80+ ]
81+ }
82+
83+ return items
5584 }
5685
5786 func toggleToolbar( ) {
@@ -88,7 +117,6 @@ extension CodeEditWindowController {
88117 )
89118 case . toggleFirstSidebarItem:
90119 let toolbarItem = NSToolbarItem ( itemIdentifier: NSToolbarItem . Identifier. toggleFirstSidebarItem)
91- toolbarItem. label = " Navigator Sidebar "
92120 toolbarItem. paletteLabel = " Navigator Sidebar "
93121 toolbarItem. toolTip = " Hide or show the Navigator "
94122 toolbarItem. isBordered = true
@@ -102,7 +130,6 @@ extension CodeEditWindowController {
102130 return toolbarItem
103131 case . toggleLastSidebarItem:
104132 let toolbarItem = NSToolbarItem ( itemIdentifier: NSToolbarItem . Identifier. toggleLastSidebarItem)
105- toolbarItem. label = " Inspector Sidebar "
106133 toolbarItem. paletteLabel = " Inspector Sidebar "
107134 toolbarItem. toolTip = " Hide or show the Inspectors "
108135 toolbarItem. isBordered = true
@@ -115,30 +142,9 @@ extension CodeEditWindowController {
115142
116143 return toolbarItem
117144 case . stopTaskSidebarItem:
118- let toolbarItem = NSToolbarItem ( itemIdentifier: NSToolbarItem . Identifier. stopTaskSidebarItem)
119-
120- guard let taskManager = workspace? . taskManager
121- else { return nil }
122-
123- let view = NSHostingView (
124- rootView: StopTaskToolbarButton ( taskManager: taskManager)
125- )
126- toolbarItem. view = view
127-
128- return toolbarItem
145+ return stopTaskSidebarItem ( )
129146 case . startTaskSidebarItem:
130- let toolbarItem = NSToolbarItem ( itemIdentifier: NSToolbarItem . Identifier. startTaskSidebarItem)
131-
132- guard let taskManager = workspace? . taskManager else { return nil }
133- guard let workspace = workspace else { return nil }
134-
135- let view = NSHostingView (
136- rootView: StartTaskToolbarButton ( taskManager: taskManager)
137- . environmentObject ( workspace)
138- )
139- toolbarItem. view = view
140-
141- return toolbarItem
147+ return startTaskSidebarItem ( )
142148 case . branchPicker:
143149 let toolbarItem = NSToolbarItem ( itemIdentifier: . branchPicker)
144150 let view = NSHostingView (
@@ -147,7 +153,7 @@ extension CodeEditWindowController {
147153 )
148154 )
149155 toolbarItem. view = view
150-
156+ toolbarItem . isBordered = false
151157 return toolbarItem
152158 case . activityViewer:
153159 let toolbarItem = NSToolbarItem ( itemIdentifier: NSToolbarItem . Identifier. activityViewer)
@@ -187,8 +193,53 @@ extension CodeEditWindowController {
187193 )
188194 toolbarItem. view = view
189195 return toolbarItem
196+ case . taskSidebarItem:
197+ guard #available( macOS 26 , * ) else {
198+ fatalError ( " Unified task sidebar item used on pre-tahoe platform. " )
199+ }
200+ guard let workspace,
201+ let stop = StopTaskToolbarItem ( workspace: workspace) else {
202+ return nil
203+ }
204+ let start = StartTaskToolbarItem ( workspace: workspace)
205+
206+ let group = NSToolbarItemGroup ( itemIdentifier: . taskSidebarItem)
207+ group. isBordered = true
208+ group. controlRepresentation = . expanded
209+ group. selectionMode = . momentary
210+ group. subitems = [ stop, start]
211+
212+ return group
190213 default :
191214 return NSToolbarItem ( itemIdentifier: itemIdentifier)
192215 }
193216 }
217+
218+ private func stopTaskSidebarItem( ) -> NSToolbarItem ? {
219+ let toolbarItem = NSToolbarItem ( itemIdentifier: NSToolbarItem . Identifier. stopTaskSidebarItem)
220+
221+ guard let taskManager = workspace? . taskManager else { return nil }
222+
223+ let view = NSHostingView (
224+ rootView: StopTaskToolbarButton ( taskManager: taskManager)
225+ )
226+ toolbarItem. view = view
227+
228+ return toolbarItem
229+ }
230+
231+ private func startTaskSidebarItem( ) -> NSToolbarItem ? {
232+ let toolbarItem = NSToolbarItem ( itemIdentifier: NSToolbarItem . Identifier. startTaskSidebarItem)
233+
234+ guard let taskManager = workspace? . taskManager else { return nil }
235+ guard let workspace = workspace else { return nil }
236+
237+ let view = NSHostingView (
238+ rootView: StartTaskToolbarButton ( taskManager: taskManager)
239+ . environmentObject ( workspace)
240+ )
241+ toolbarItem. view = view
242+
243+ return toolbarItem
244+ }
194245}
0 commit comments