mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-05 15:28:39 +09:00
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
This commit is contained in:
parent
d0e0acb1fa
commit
6ae162ff84
1 changed files with 1 additions and 52 deletions
|
|
@ -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__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue