mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-02 18:08:58 +00:00
1148a6198f
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
186 lines
4.7 KiB
Python
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"
|