From f1854f242716a4acb5b11191ce8a572e2d689fe7 Mon Sep 17 00:00:00 2001
From: Markus Stange <mstange.moz@gmail.com>
Date: Tue, 13 Apr 2021 15:05:55 +0000
Subject: [PATCH] Bug 1704682 - Call OnMenuOpened before dispatching the
 popupshown event. r=harry

This will cause nsXULPopupManager to change the state to "open" before the
popupshown event fires. This is consistent with non-native menus.

This was caught by dom/html/test/browser_content_contextmenu_userinput.js.

Differential Revision: https://phabricator.services.mozilla.com/D111766
---
 widget/cocoa/nsMenuX.mm | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/widget/cocoa/nsMenuX.mm b/widget/cocoa/nsMenuX.mm
index 43381f7838c18..cf66ea9046c39 100644
--- a/widget/cocoa/nsMenuX.mm
+++ b/widget/cocoa/nsMenuX.mm
@@ -411,17 +411,17 @@ void nsMenuX::MenuOpenedAsync() {
     mContent->AsElement()->SetAttr(kNameSpaceID_None, nsGkAtoms::open, u"true"_ns, true);
   }
 
+  // Notify our observer.
+  if (mObserver) {
+    mObserver->OnMenuOpened();
+  }
+
   // Fire popupshown.
   nsEventStatus status = nsEventStatus_eIgnore;
   WidgetMouseEvent event(true, eXULPopupShown, nullptr, WidgetMouseEvent::eReal);
   nsCOMPtr<nsIContent> popupContent = GetMenuPopupContent();
   nsIContent* dispatchTo = popupContent ? popupContent : mContent;
   EventDispatcher::Dispatch(dispatchTo, nullptr, &event, nullptr, &status);
-
-  // Notify our observer.
-  if (mObserver) {
-    mObserver->OnMenuOpened();
-  }
 }
 
 void nsMenuX::MenuClosed() {
-- 
GitLab