gecko-dev/widget/cocoa/moz.build
Markus Stange 1148a6198f Bug 1707598 - When opening a new menu just after closing an old menu, make sure we exit the nested event loop for the old NSMenu before we ask the new NSMenu to open. r=harry
On CI, where we open and close menu items in quick succession, we sometimes got
into a state where the new menu was opened while we were still in the old menu's
nested event loop. So we had the following sequence of events:

```
 - old menu +[NSMenu popUpContextMenu:withEvent:forView:]
   - nested event loop for old menu
     - old menu -[NSMenu cancelTrackingWithoutAnimation]
     - new menu +[NSMenu popUpContextMenu:withEvent:forView:]
       - nested event loop for new menu
         - new menu -[NSMenu cancelTrackingWithoutAnimation]
     - new menu's event loop is exited, but old menu's event loop remains on the
       stack
     - shutdown hang here
```

MOZMenuOpeningCoordinator makes sure that +[NSMenu popUpContextMenu:withEvent:forView:]
is always called in sequence, never in a nested fashion.

Differential Revision: https://phabricator.services.mozilla.com/D113373
2021-04-30 17:45:57 +00:00

186 lines
4.7 KiB
Python

# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
with Files("**"):
BUG_COMPONENT = ("Core", "Widget: Cocoa")
SCHEDULES.exclusive = ["macosx"]
with Files("*TextInput*"):
BUG_COMPONENT = ("Core", "DOM: UI Events & Focus Handling")
XPIDL_SOURCES += [
"nsPIWidgetCocoa.idl",
]
XPIDL_MODULE = "widget_cocoa"
EXPORTS += [
"CFTypeRefPtr.h",
"DesktopBackgroundImage.h",
"MediaHardwareKeysEventSourceMac.h",
"MediaHardwareKeysEventSourceMacMediaCenter.h",
"mozView.h",
"nsBidiKeyboard.h",
"nsChangeObserver.h",
"nsCocoaFeatures.h",
"nsCocoaUtils.h",
]
EXPORTS.mozilla.widget += [
"NativeMenuSupport.h",
]
UNIFIED_SOURCES += [
"AppearanceOverride.mm",
"GfxInfo.mm",
"MOZIconHelper.mm",
"MOZMenuOpeningCoordinator.mm",
"NativeKeyBindings.mm",
"NativeMenuMac.mm",
"NativeMenuSupport.mm",
"nsAppShell.mm",
"nsBidiKeyboard.mm",
"nsCocoaFeatures.mm",
"nsCocoaUtils.mm",
"nsCocoaWindow.mm",
"nsColorPicker.mm",
"nsCursorManager.mm",
"nsDeviceContextSpecX.mm",
"nsFilePicker.mm",
"nsLookAndFeel.mm",
"nsMacCursor.mm",
"nsMacDockSupport.mm",
"nsMacFinderProgress.mm",
"nsMacSharingService.mm",
"nsMacWebAppUtils.mm",
"nsMenuBarX.mm",
"nsMenuGroupOwnerX.mm",
"nsMenuItemIconX.mm",
"nsMenuItemX.mm",
"nsMenuUtilsX.mm",
"nsMenuX.mm",
"nsNativeBasicThemeCocoa.cpp",
"nsPrintDialogX.mm",
"nsPrintSettingsServiceX.mm",
"nsPrintSettingsX.mm",
"nsSound.mm",
"nsStandaloneNativeMenu.mm",
"nsSystemStatusBarCocoa.mm",
"nsToolkit.mm",
"nsTouchBar.mm",
"nsTouchBarInput.mm",
"nsTouchBarInputIcon.mm",
"nsTouchBarUpdater.mm",
"nsUserIdleServiceX.mm",
"nsWidgetFactory.mm",
"nsWindowMap.mm",
"OSXNotificationCenter.mm",
"ScreenHelperCocoa.mm",
"SwipeTracker.mm",
"TextInputHandler.mm",
"VibrancyManager.mm",
"ViewRegion.mm",
"WidgetTraceEvent.mm",
]
# These files cannot be built in unified mode because they cause symbol conflicts
SOURCES += [
"DesktopBackgroundImage.mm",
"MediaHardwareKeysEventSourceMac.mm",
"MediaHardwareKeysEventSourceMacMediaCenter.mm",
"MediaKeysEventSourceFactory.cpp",
"nsChildView.mm",
"nsClipboard.mm",
"nsDragService.mm",
"nsNativeThemeCocoa.mm",
]
if not CONFIG["RELEASE_OR_BETA"] or CONFIG["MOZ_DEBUG"]:
SOURCES += [
"nsSandboxViolationSink.mm",
]
XPCOM_MANIFESTS += [
"components.conf",
]
include("/ipc/chromium/chromium-config.mozbuild")
FINAL_LIBRARY = "xul"
LOCAL_INCLUDES += [
"/dom/media/platforms/apple",
"/layout/base",
"/layout/forms",
"/layout/generic",
"/layout/style",
"/layout/xul",
"/widget",
"/widget/headless",
]
if CONFIG["MOZ_ENABLE_SKIA_PDF"]:
# Skia includes because widget code includes PrintTargetSkPDF.h, and that
# includes skia headers.
LOCAL_INCLUDES += CONFIG["SKIA_INCLUDES"]
RESOURCE_FILES.cursors += [
"cursors/arrowN.png",
"cursors/arrowN@2x.png",
"cursors/arrowS.png",
"cursors/arrowS@2x.png",
"cursors/cell.png",
"cursors/cell@2x.png",
"cursors/colResize.png",
"cursors/colResize@2x.png",
"cursors/help.png",
"cursors/help@2x.png",
"cursors/move.png",
"cursors/move@2x.png",
"cursors/rowResize.png",
"cursors/rowResize@2x.png",
"cursors/sizeNE.png",
"cursors/sizeNE@2x.png",
"cursors/sizeNESW.png",
"cursors/sizeNESW@2x.png",
"cursors/sizeNS.png",
"cursors/sizeNS@2x.png",
"cursors/sizeNW.png",
"cursors/sizeNW@2x.png",
"cursors/sizeNWSE.png",
"cursors/sizeNWSE@2x.png",
"cursors/sizeSE.png",
"cursors/sizeSE@2x.png",
"cursors/sizeSW.png",
"cursors/sizeSW@2x.png",
"cursors/vtIBeam.png",
"cursors/vtIBeam@2x.png",
"cursors/zoomIn.png",
"cursors/zoomIn@2x.png",
"cursors/zoomOut.png",
"cursors/zoomOut@2x.png",
]
# These resources go in $(DIST)/bin/res/MainMenu.nib, but we can't use a magic
# RESOURCE_FILES.MainMenu.nib attribute, since that would put the files in
# $(DIST)/bin/res/MainMenu/nib. Instead, we call __setattr__ directly to create
# an attribute with the correct name.
RESOURCE_FILES.__setattr__(
"MainMenu.nib",
[
"resources/MainMenu.nib/classes.nib",
"resources/MainMenu.nib/info.nib",
"resources/MainMenu.nib/keyedobjects.nib",
],
)
CXXFLAGS += CONFIG["TK_CFLAGS"]
OS_LIBS += [
"-framework IOSurface",
]
SPHINX_TREES["/widget/cocoa"] = "docs"