@@ -12,54 +12,20 @@ public class RSToolbarItem: NSToolbarItem {
12
12
13
13
override public func validate( ) {
14
14
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
+
16
18
isEnabled = false
17
19
return
18
20
}
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 ? {
58
21
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 )
61
28
}
62
- return target. validateUserInterfaceItem ( self )
63
29
}
64
30
}
65
31
#endif
0 commit comments