diff options
author | wicknix <39230578+wicknix@users.noreply.github.com> | 2018-10-24 01:10:07 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-24 01:10:07 -0500 |
commit | 6db23ae65e0eda8c95464ff93dfc676a4470c11d (patch) | |
tree | 7d823bf5e5c6a94b584515c43891747f7b0a80e3 /widget/cocoa/nsChildView.mm | |
parent | f24786477d41d847ac1d9958fadfb70e637ab9e0 (diff) | |
download | UXP-6db23ae65e0eda8c95464ff93dfc676a4470c11d.tar UXP-6db23ae65e0eda8c95464ff93dfc676a4470c11d.tar.gz UXP-6db23ae65e0eda8c95464ff93dfc676a4470c11d.tar.lz UXP-6db23ae65e0eda8c95464ff93dfc676a4470c11d.tar.xz UXP-6db23ae65e0eda8c95464ff93dfc676a4470c11d.zip |
Bug 1489785: Remove a workaround for gcc
Introduced in bug 678607, that is no longer needed and causes hangs in modal dialogs on macOS 10.14.
https://hg.mozilla.org/mozilla-central/rev/3920c858319d
Diffstat (limited to 'widget/cocoa/nsChildView.mm')
-rw-r--r-- | widget/cocoa/nsChildView.mm | 53 |
1 files changed, 1 insertions, 52 deletions
diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm index 8f72a81be..acbf4175d 100644 --- a/widget/cocoa/nsChildView.mm +++ b/widget/cocoa/nsChildView.mm @@ -425,13 +425,7 @@ nsChildView::Create(nsIWidget* aParent, if (!gChildViewMethodsSwizzled) { nsToolkit::SwizzleMethods([NSView class], @selector(mouseDownCanMoveWindow), @selector(nsChildView_NSView_mouseDownCanMoveWindow)); -#ifdef __LP64__ - nsToolkit::SwizzleMethods([NSEvent class], @selector(addLocalMonitorForEventsMatchingMask:handler:), - @selector(nsChildView_NSEvent_addLocalMonitorForEventsMatchingMask:handler:), - true); - nsToolkit::SwizzleMethods([NSEvent class], @selector(removeMonitor:), - @selector(nsChildView_NSEvent_removeMonitor:), true); -#endif + gChildViewMethodsSwizzled = true; } @@ -6513,48 +6507,3 @@ static const CGEventField kCGWindowNumberField = (const CGEventField) 51; } @end - -#ifdef __LP64__ -// When using blocks, at least on OS X 10.7, the OS sometimes calls -// +[NSEvent removeMonitor:] more than once on a single event monitor, which -// causes crashes. See bug 678607. We hook these methods to work around -// the problem. -@interface NSEvent (MethodSwizzling) -+ (id)nsChildView_NSEvent_addLocalMonitorForEventsMatchingMask:(unsigned long long)mask handler:(id)block; -+ (void)nsChildView_NSEvent_removeMonitor:(id)eventMonitor; -@end - -// This is a local copy of the AppKit frameworks sEventObservers hashtable. -// It only stores "local monitors". We use it to ensure that +[NSEvent -// removeMonitor:] is never called more than once on the same local monitor. -static NSHashTable *sLocalEventObservers = nil; - -@implementation NSEvent (MethodSwizzling) - -+ (id)nsChildView_NSEvent_addLocalMonitorForEventsMatchingMask:(unsigned long long)mask handler:(id)block -{ - if (!sLocalEventObservers) { - sLocalEventObservers = [[NSHashTable hashTableWithOptions: - NSHashTableStrongMemory | NSHashTableObjectPointerPersonality] retain]; - } - id retval = - [self nsChildView_NSEvent_addLocalMonitorForEventsMatchingMask:mask handler:block]; - if (sLocalEventObservers && retval && ![sLocalEventObservers containsObject:retval]) { - [sLocalEventObservers addObject:retval]; - } - return retval; -} - -+ (void)nsChildView_NSEvent_removeMonitor:(id)eventMonitor -{ - if (sLocalEventObservers && [eventMonitor isKindOfClass: ::NSClassFromString(@"_NSLocalEventObserver")]) { - if (![sLocalEventObservers containsObject:eventMonitor]) { - return; - } - [sLocalEventObservers removeObject:eventMonitor]; - } - [self nsChildView_NSEvent_removeMonitor:eventMonitor]; -} - -@end -#endif // #ifdef __LP64__ |