[macOS] Fix touch bar observer crash.

This commit is contained in:
Pāvels Nadtočajevs
2025-04-26 23:23:57 +03:00
parent e37c6261ea
commit 4450594fb5
2 changed files with 18 additions and 0 deletions

View File

@ -66,6 +66,7 @@ GODOT_CLANG_WARNING_PUSH_AND_IGNORE("-Wdeprecated-declarations") // OpenGL is de
bool last_pen_inverted; bool last_pen_inverted;
bool ime_suppress_next_keyup; bool ime_suppress_next_keyup;
id layer_delegate; id layer_delegate;
NSMutableSet<NSString *> *registered_observers;
} }
- (void)processScrollEvent:(NSEvent *)event button:(MouseButton)button factor:(double)factor; - (void)processScrollEvent:(NSEvent *)event button:(MouseButton)button factor:(double)factor;

View File

@ -109,6 +109,22 @@
self.layer.needsDisplayOnBoundsChange = YES; self.layer.needsDisplayOnBoundsChange = YES;
} }
- (void)addObserver:(NSObject *)targetObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context {
[registered_observers addObject:[[targetObserver description] stringByAppendingString:keyPath]];
[super addObserver:targetObserver forKeyPath:keyPath options:options context:context];
}
- (void)removeObserver:(NSObject *)targetObserver forKeyPath:(NSString *)keyPath {
if ([registered_observers containsObject:[[targetObserver description] stringByAppendingString:keyPath]]) {
@try {
[super removeObserver:targetObserver forKeyPath:keyPath];
[registered_observers removeObject:[[targetObserver description] stringByAppendingString:keyPath]];
} @catch (NSException *exception) {
ERR_PRINT("NSException: " + String::utf8([exception reason].UTF8String));
}
}
}
- (id)init { - (id)init {
self = [super init]; self = [super init];
layer_delegate = [[GodotContentLayerDelegate alloc] init]; layer_delegate = [[GodotContentLayerDelegate alloc] init];
@ -118,6 +134,7 @@
mouse_down_control = false; mouse_down_control = false;
ignore_momentum_scroll = false; ignore_momentum_scroll = false;
last_pen_inverted = false; last_pen_inverted = false;
registered_observers = [[NSMutableSet alloc] init];
[self updateTrackingAreas]; [self updateTrackingAreas];
self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawDuringViewResize; self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawDuringViewResize;