@property (nonatomic, assign, readwrite) BOOL suppressKeyEvents;
should be
- (void)observer:(id)observer wantsSuppressKeyEvents:(_Bool)suppressKeyEvents;
Using a boolean for this seemed like a good idea at the time, but if two actors ever want to suppress key events they'll clobber each other. A subscription model with the event tap managing the actual binary state of suppression is a better approach.