From 200550da3c2234d4e883f71354696ce4aee43642 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 22:26:29 -0500 Subject: [PATCH] fix: allow NSMenuItems to be disabled (#46342) * fix: disable NSMenu autoenable feature to allow disabling of NSMenuItems Co-authored-by: Hailey Schauman * style: fix linter issues and update comments Co-authored-by: Hailey Schauman * chore: remove unneeded comment Co-authored-by: Hailey --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Hailey Schauman --- .../browser/ui/cocoa/electron_menu_controller.mm | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/shell/browser/ui/cocoa/electron_menu_controller.mm b/shell/browser/ui/cocoa/electron_menu_controller.mm index d23e007dd0ba..2c5eae1499b1 100644 --- a/shell/browser/ui/cocoa/electron_menu_controller.mm +++ b/shell/browser/ui/cocoa/electron_menu_controller.mm @@ -320,6 +320,10 @@ NSArray* ConvertSharingItemToNS(const SharingItem& item) { NSMenuItem* item = [[NSMenuItem alloc] initWithTitle:label action:@selector(itemSelected:) keyEquivalent:@""]; + if (model->IsEnabledAt(index)) + [item setEnabled:YES]; + else + [item setEnabled:NO]; // If the menu item has an icon, set it. ui::ImageModel icon = model->GetIconAt(index); @@ -349,11 +353,6 @@ NSArray* ConvertSharingItemToNS(const SharingItem& item) { [item setSubmenu:[self createShareMenuForItem:sharing_item]]; } else if (type == electron::ElectronMenuModel::TYPE_SUBMENU && model->IsVisibleAt(index)) { - // We need to specifically check that the submenu top-level item has been - // enabled as it's not validated by validateUserInterfaceItem - if (!model->IsEnabledAt(index)) - [item setEnabled:NO]; - // Recursively build a submenu from the sub-model at this index. [item setTarget:nil]; [item setAction:nil]; @@ -493,8 +492,10 @@ NSArray* ConvertSharingItemToNS(const SharingItem& item) { } - (NSMenu*)menu { - if (menu_) + if (menu_) { + [menu_ setAutoenablesItems:NO]; return menu_; + } if (model_ && model_->sharing_item()) { NSMenu* menu = [self createShareMenuForItem:*model_->sharing_item()]; @@ -504,6 +505,8 @@ NSArray* ConvertSharingItemToNS(const SharingItem& item) { if (model_) [self populateWithModel:model_.get()]; } + + [menu_ setAutoenablesItems:NO]; [menu_ setDelegate:self]; return menu_; }