diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index e25cb1569..082ba0d84 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -1761,6 +1761,10 @@ static int run_program(fstream &logFile, int argc, char *argv[]) QCoreApplication::addLibraryPath("."); +#if __APPLE__ + InstallNSApplicationSubclass(); +#endif + OBSApp program(argc, argv, profilerNameStore.get()); try { bool created_log = false; diff --git a/UI/platform-osx.mm b/UI/platform-osx.mm index 3d0c5334f..b54b76448 100644 --- a/UI/platform-osx.mm +++ b/UI/platform-osx.mm @@ -196,3 +196,32 @@ void EnableOSXDockIcon(bool enable) [NSApp setActivationPolicy: NSApplicationActivationPolicyProhibited]; } + +/* + * This custom NSApplication subclass makes the app compatible with CEF. Qt + * also has an NSApplication subclass, but it doesn't conflict thanks to Qt + * using arcane magic to hook into the NSApplication superclass itself if the + * program has its own NSApplication subclass. + */ + +@protocol CrAppProtocol +- (BOOL)isHandlingSendEvent; +@end + +@interface OBSApplication : NSApplication +@property (nonatomic, getter=isHandlingSendEvent) BOOL handlingSendEvent; +@end + +@implementation OBSApplication +- (void)sendEvent:(NSEvent *)event +{ + _handlingSendEvent = YES; + [super sendEvent:event]; + _handlingSendEvent = NO; +} +@end + +void InstallNSApplicationSubclass() +{ + [OBSApplication sharedApplication]; +}