Skip to content

Commit 91df007

Browse files
committed
Fixed clipped toolbar items are always disabled on macOS Ranchero-Software#64
1 parent 69d79ab commit 91df007

File tree

1 file changed

+9
-43
lines changed

1 file changed

+9
-43
lines changed

Sources/RSCore/AppKit/RSToolbarItem.swift

+9-43
Original file line numberDiff line numberDiff line change
@@ -12,54 +12,20 @@ public class RSToolbarItem: NSToolbarItem {
1212

1313
override public func validate() {
1414

15-
guard let view = view, let _ = view.window else {
15+
guard let control = self.view as? NSControl, let action = self.action,
16+
let validator = NSApp.target(forAction: action, to: self.target, from: self) as AnyObject? else {
17+
1618
isEnabled = false
1719
return
1820
}
19-
isEnabled = isValidAsUserInterfaceItem()
20-
}
21-
}
22-
23-
private extension RSToolbarItem {
24-
25-
func isValidAsUserInterfaceItem() -> Bool {
26-
27-
// Use NSValidatedUserInterfaceItem protocol rather than calling validateToolbarItem:.
28-
29-
if let target = target as? NSResponder {
30-
return validateWithResponder(target) ?? false
31-
}
32-
33-
var responder = view?.window?.firstResponder
34-
if responder == nil {
35-
return false
36-
}
37-
38-
while(true) {
39-
if let validated = validateWithResponder(responder!) {
40-
return validated
41-
}
42-
responder = responder?.nextResponder
43-
if responder == nil {
44-
break
45-
}
46-
}
47-
48-
if let appDelegate = NSApplication.shared.delegate {
49-
if let validated = validateWithResponder(appDelegate) {
50-
return validated
51-
}
52-
}
53-
54-
return false
55-
}
56-
57-
func validateWithResponder(_ responder: NSObjectProtocol) -> Bool? {
5821

59-
guard responder.responds(to: action), let target = responder as? NSUserInterfaceValidations else {
60-
return nil
22+
// Prefer `NSUserInterfaceValidations` protocol over calling `validateToolbarItem`.
23+
switch validator {
24+
case let validator as NSUserInterfaceValidations:
25+
control.isEnabled = validator.validateUserInterfaceItem(self)
26+
default:
27+
control.isEnabled = validator.validateToolbarItem(self)
6128
}
62-
return target.validateUserInterfaceItem(self)
6329
}
6430
}
6531
#endif

0 commit comments

Comments
 (0)