@@ -6,6 +6,7 @@ final class ToolbarItemStyleViewController: NSObject, SettingsStyleController {
6
6
let panes : [ SettingsPane ]
7
7
var isKeepingWindowCentered : Bool { centerToolbarItems }
8
8
weak var delegate : SettingsStyleControllerDelegate ?
9
+ private var previousSelectedItemIdentifier : NSToolbarItem . Identifier ?
9
10
10
11
init ( panes: [ SettingsPane ] , toolbar: NSToolbar , centerToolbarItems: Bool ) {
11
12
self . panes = panes
@@ -54,4 +55,22 @@ final class ToolbarItemStyleViewController: NSObject, SettingsStyleController {
54
55
func selectTab( index: Int ) {
55
56
toolbar. selectedItemIdentifier = panes [ index] . toolbarItemIdentifier
56
57
}
58
+
59
+ public func refreshPreviousSelectedItem( ) {
60
+ // On macOS Sonoma, sometimes NSToolbar would preserve the
61
+ // visual selected state of previous selected toolbar item during
62
+ // view animation.
63
+ // AppKit doesn’t seem to offer a way to refresh toolbar items.
64
+ // So we manually “refresh” it.
65
+ if
66
+ #available( macOS 14 , * ) ,
67
+ let previousSelectedItemIdentifier,
68
+ let index = toolbar. items. firstIndex ( where: { $0. itemIdentifier == previousSelectedItemIdentifier } )
69
+ {
70
+ toolbar. removeItem ( at: index)
71
+ toolbar. insertItem ( withItemIdentifier: previousSelected, at: index)
72
+ }
73
+
74
+ previousSelectedItemIdentifier = toolbar. selectedItemIdentifier
75
+ }
57
76
}
0 commit comments