Open Bug 1043435 Opened 6 years ago Updated 6 years ago

popuphiding/popuphidden events in native Mac menus fire before command events


(Core :: Widget: Cocoa, defect)

Not set




(Reporter: mstange, Unassigned)


This was reported in bug 1037433 comment 31:

(In reply to Florian Quèze [:florian] [:flo] from bug 1037433 comment #31)
> - the "command" event is fired after the "popuphiding" and "popuphidden"
> events, so if the menu is cleaned up in these hiding events, when "command"
> is received, the menuitem doesn't have a parent node anymore.
I've looked into this a bit and wasn't able to find a solution.

Command events are fired when Cocoa calls -[NativeMenuItemTarget menuItemHit:] in (which is the menu item's action handler).
The popuphiding and popuphidden events are sent when Cocoa calls -[MenuDelegate menuDidClose:] in

Unfortunately, Cocoa always calls menuDidClose before menuItemHit when a menu item is clicked. I've tried to work around this by using the NSMenuDidEndTrackingNotification notification instead of menuDidClose, but that notification also fires before menuItemHit, so that didn't work.

We could send the popuphiding/popuphidden events from an nsRunnable, I guess. I don't know if it's worth the effort.
You need to log in before you can comment on or make changes to this bug.