summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwicknix <39230578+wicknix@users.noreply.github.com>2018-10-24 01:10:07 -0500
committerGitHub <noreply@github.com>2018-10-24 01:10:07 -0500
commit6db23ae65e0eda8c95464ff93dfc676a4470c11d (patch)
tree7d823bf5e5c6a94b584515c43891747f7b0a80e3
parentf24786477d41d847ac1d9958fadfb70e637ab9e0 (diff)
downloadUXP-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
-rw-r--r--widget/cocoa/nsChildView.mm53
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__