Browse Source

Bug 1489785

Frank-Rainer Grahl 6 years ago
parent
commit
a779de015e
2 changed files with 90 additions and 0 deletions
  1. 89 0
      mozilla-esr52/patches/1489785-macOS1014.patch
  2. 1 0
      mozilla-esr52/patches/series

+ 89 - 0
mozilla-esr52/patches/1489785-macOS1014.patch

@@ -0,0 +1,89 @@
+
+# HG changeset patch
+# User Stephen A Pohl <spohl.mozilla.bugs@gmail.com>
+# Date 1538283728 14400
+# Node ID 3920c858319dff66ebbc9263f6aa8d24f16071f8
+# Parent  9d3d8065392270b38d98f8684040fe72818ef83e
+Bug 1489785: Remove a workaround for gcc, introduced in bug 678607, that is no longer needed and that causes hangs in modal dialogs on macOS 10.14. r=mstange
+
+diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm
+--- a/widget/cocoa/nsChildView.mm
++++ b/widget/cocoa/nsChildView.mm
+@@ -423,23 +423,16 @@ nsChildView::Create(nsIWidget* aParent,
+   // we need to provide an autorelease pool to avoid leaking cocoa objects
+   // (see bug 559075).
+   nsAutoreleasePool localPool;
+ 
+   // See NSView (MethodSwizzling) below.
+   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;
+   }
+ 
+   mBounds = aRect;
+ 
+   // Ensure that the toolkit is created.
+   nsToolkit::GetToolkit();
+ 
+@@ -6528,53 +6521,8 @@ static const CGEventField kCGWindowNumbe
+   NSWindow *ourWindow = [self window];
+   NSView *contentView = [ourWindow contentView];
+   if ([ourWindow isKindOfClass:[ToolbarWindow class]] && (self == contentView))
+     return [ourWindow isMovableByWindowBackground];
+   return [self nsChildView_NSView_mouseDownCanMoveWindow];
+ }
+ 
+ @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__

+ 1 - 0
mozilla-esr52/patches/series

@@ -121,3 +121,4 @@ PPPPPPP-xpsp3.patch
 9999999-search.patch
 9999999-clang-osx.patch.patch
 9999999-psutil.patch
+1489785-macOS1014.patch