fix: only call popup closecallback for top-level menu (#49045)

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
trop[bot] 2025-11-23 21:35:47 +01:00 committed by GitHub
commit c2c1d40294
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -563,16 +563,22 @@ NSArray* ConvertSharingItemToNS(const SharingItem& item) {
}
- (void)menuDidClose:(NSMenu*)menu {
if (isMenuOpen_) {
isMenuOpen_ = NO;
if (model_)
model_->MenuWillClose();
// Post async task so that itemSelected runs before the close callback
// deletes the controller from the map which deallocates it
if (!closeCallback.is_null()) {
content::GetUIThreadTaskRunner({})->PostTask(FROM_HERE,
std::move(closeCallback));
}
// If the menu is already closed, do nothing.
if (!isMenuOpen_)
return;
// We should only respond to the top-level menu's close event.
if (menu != menu_)
return;
isMenuOpen_ = NO;
if (model_)
model_->MenuWillClose();
// Post async task so that itemSelected runs before the close callback
// deletes the controller from the map which deallocates it
if (!closeCallback.is_null()) {
content::GetUIThreadTaskRunner({})->PostTask(FROM_HERE,
std::move(closeCallback));
}
}