chromium/ui/base/cocoa/nsmenu_additions.h

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_BASE_COCOA_NSMENU_ADDITIONS_H_
#define UI_BASE_COCOA_NSMENU_ADDITIONS_H_

#import <Cocoa/Cocoa.h>

@interface NSMenu (ChromeAdditions)

// Sets a block that cr_menuItemForKeyEquivalentEvent: calls before
// beginning its search for a matching menu item. Useful for code
// outside of /content to arrange for code execution (to perform custom
// menu item updates, for example) before the search begins.
//
// This method does not support multiple pre-search blocks. It will
// CHECK() if called after a block has already been set.
+ (void)cr_setMenuItemForKeyEquivalentEventPreSearchBlock:(void (^)(void))block;

// Searches the menu and its submenus for the item with the keyboard
// equivalent matching `event`. Returns nil if no corresponding
// menu item exists.
- (NSMenuItem*)cr_menuItemForKeyEquivalentEvent:(NSEvent*)event;

// Locates the menu item corresponding to `chromeCommand` and flashes
// its owning menu title in the menu bar (without executing the command).
// Also causes VoiceOver to speak the menu item. Returns NO if the
// command wasn't found in the menus.
+ (BOOL)flashMenuForChromeCommand:(int)chromeCommand;

@end

#endif  // UI_BASE_COCOA_NSMENU_ADDITIONS_H_