diff --git a/docs/api/menu-item.md b/docs/api/menu-item.md index ad74bb57e68e8..f8ded7417a622 100644 --- a/docs/api/menu-item.md +++ b/docs/api/menu-item.md @@ -14,7 +14,7 @@ See [`Menu`](menu.md) for examples. * `menuItem` MenuItem * `browserWindow` [BrowserWindow](browser-window.md) | undefined - This will not be defined if no window is open. * `event` [KeyboardEvent](structures/keyboard-event.md) - * `role` string (optional) - Can be `undo`, `redo`, `cut`, `copy`, `paste`, `pasteAndMatchStyle`, `delete`, `selectAll`, `reload`, `forceReload`, `toggleDevTools`, `resetZoom`, `zoomIn`, `zoomOut`, `toggleSpellChecker`, `togglefullscreen`, `window`, `minimize`, `close`, `help`, `about`, `services`, `hide`, `hideOthers`, `unhide`, `quit`, `showSubstitutions`, `toggleSmartQuotes`, `toggleSmartDashes`, `toggleTextReplacement`, `startSpeaking`, `stopSpeaking`, `zoom`, `front`, `appMenu`, `fileMenu`, `editMenu`, `viewMenu`, `shareMenu`, `recentDocuments`, `toggleTabBar`, `selectNextTab`, `selectPreviousTab`, `showAllTabs`, `mergeAllWindows`, `clearRecentDocuments`, `moveTabToNewWindow` or `windowMenu` - Define the action of the menu item, when specified the + * `role` string (optional) - Can be `undo`, `redo`, `cut`, `copy`, `paste`, `pasteAndMatchStyle`, `delete`, `selectAll`, `reload`, `forceReload`, `toggleDevTools`, `resetZoom`, `zoomIn`, `zoomOut`, `toggleSpellChecker`, `togglefullscreen`, `window`, `minimize`, `close`, `help`, `about`, `services`, `hide`, `hideOthers`, `unhide`, `quit`, `showSubstitutions`, `toggleSmartQuotes`, `toggleSmartDashes`, `toggleTextReplacement`, `startSpeaking`, `stopSpeaking`, `zoom`, `front`, `appMenu`, `fileMenu`, `editMenu`, `viewMenu`, `shareMenu`, `recentDocuments`, `toggleTabBar`, `selectNextTab`, `selectPreviousTab`, `showAllTabs`, `mergeAllWindows`, `clearRecentDocuments`, `moveTabToNewWindow`, `useSelectionForFind` or `windowMenu` - Define the action of the menu item, when specified the `click` property will be ignored. See [roles](#roles). * `type` string (optional) - Can be `normal`, `separator`, `submenu`, `checkbox` or `radio`. @@ -120,6 +120,7 @@ The following additional roles are available on _macOS_: * `recentDocuments` - The submenu is an "Open Recent" menu. * `clearRecentDocuments` - Map to the `clearRecentDocuments` action. * `shareMenu` - The submenu is [share menu][ShareMenu]. The `sharingItem` property must also be set to indicate the item to share. +* `useSelectionForFind` - Map to the `copyToFindPboard` action. When specifying a `role` on macOS, `label` and `accelerator` are the only options that will affect the menu item. All other options will be ignored. @@ -160,7 +161,7 @@ A `string` indicating the type of the item. Can be `normal`, `separator`, `subme #### `menuItem.role` -A `string` (optional) indicating the item's role, if set. Can be `undo`, `redo`, `cut`, `copy`, `paste`, `pasteAndMatchStyle`, `delete`, `selectAll`, `reload`, `forceReload`, `toggleDevTools`, `resetZoom`, `zoomIn`, `zoomOut`, `toggleSpellChecker`, `togglefullscreen`, `window`, `minimize`, `close`, `help`, `about`, `services`, `hide`, `hideOthers`, `unhide`, `quit`, `startSpeaking`, `stopSpeaking`, `zoom`, `front`, `appMenu`, `fileMenu`, `editMenu`, `viewMenu`, `shareMenu`, `recentDocuments`, `toggleTabBar`, `selectNextTab`, `selectPreviousTab`, `showAllTabs`, `mergeAllWindows`, `clearRecentDocuments`, `moveTabToNewWindow` or `windowMenu` +A `string` (optional) indicating the item's role, if set. Can be `undo`, `redo`, `cut`, `copy`, `paste`, `pasteAndMatchStyle`, `delete`, `selectAll`, `reload`, `forceReload`, `toggleDevTools`, `resetZoom`, `zoomIn`, `zoomOut`, `toggleSpellChecker`, `togglefullscreen`, `window`, `minimize`, `close`, `help`, `about`, `services`, `hide`, `hideOthers`, `unhide`, `quit`, `startSpeaking`, `stopSpeaking`, `zoom`, `front`, `appMenu`, `fileMenu`, `editMenu`, `viewMenu`, `shareMenu`, `recentDocuments`, `toggleTabBar`, `selectNextTab`, `selectPreviousTab`, `showAllTabs`, `mergeAllWindows`, `clearRecentDocuments`, `moveTabToNewWindow`, `useSelectionForFind` or `windowMenu` #### `menuItem.accelerator` diff --git a/lib/browser/api/menu-item-roles.ts b/lib/browser/api/menu-item-roles.ts index 8fcc528271aa7..94066a6e562aa 100644 --- a/lib/browser/api/menu-item-roles.ts +++ b/lib/browser/api/menu-item-roles.ts @@ -8,7 +8,7 @@ type RoleId = 'about' | 'close' | 'copy' | 'cut' | 'delete' | 'forcereload' | 'f 'paste' | 'pasteandmatchstyle' | 'quit' | 'redo' | 'reload' | 'resetzoom' | 'selectall' | 'services' | 'recentdocuments' | 'clearrecentdocuments' | 'showsubstitutions' | 'togglesmartquotes' | 'togglesmartdashes' | 'toggletextreplacement' | 'startspeaking' | 'stopspeaking' | 'toggledevtools' | 'togglefullscreen' | 'undo' | 'unhide' | 'window' | 'zoom' | 'zoomin' | 'zoomout' | 'togglespellchecker' | - 'appmenu' | 'filemenu' | 'editmenu' | 'viewmenu' | 'windowmenu' | 'sharemenu' + 'appmenu' | 'filemenu' | 'editmenu' | 'viewmenu' | 'windowmenu' | 'sharemenu' | 'useselectionforfind' interface Role { label: string; accelerator?: string; @@ -211,6 +211,10 @@ export const roleList: Record = { ses.spellCheckerEnabled = !ses.spellCheckerEnabled; } }, + useselectionforfind: { + label: 'Use Selection for Find', + accelerator: 'Command+E' + }, // App submenu should be used for Mac only appmenu: { get label () { @@ -266,7 +270,8 @@ export const roleList: Record = { { role: 'startSpeaking' }, { role: 'stopSpeaking' } ] - } + }, + { role: 'useSelectionForFind' } ] as MenuItemConstructorOptions[] : [ { role: 'delete' }, { type: 'separator' }, diff --git a/shell/browser/ui/cocoa/electron_menu_controller.mm b/shell/browser/ui/cocoa/electron_menu_controller.mm index 7ae9c05538e64..56e4f795a0d9d 100644 --- a/shell/browser/ui/cocoa/electron_menu_controller.mm +++ b/shell/browser/ui/cocoa/electron_menu_controller.mm @@ -70,6 +70,7 @@ {@selector(mergeAllWindows:), "mergeallwindows"}, {@selector(moveTabToNewWindow:), "movetabtonewwindow"}, {@selector(clearRecentDocuments:), "clearrecentdocuments"}, + {@selector(copyToFindPboard:), "useselectionforfind"}, }; // Called when adding a submenu to the menu and checks if the submenu, via its diff --git a/spec/api-menu-item-spec.ts b/spec/api-menu-item-spec.ts index fc015da321b02..cd4f9622847bd 100644 --- a/spec/api-menu-item-spec.ts +++ b/spec/api-menu-item-spec.ts @@ -359,6 +359,7 @@ describe('MenuItems', () => { expect(item.submenu!.items[11].label).to.equal('Speech'); expect(item.submenu!.items[11].submenu!.items[0].role).to.equal('startspeaking'); expect(item.submenu!.items[11].submenu!.items[1].role).to.equal('stopspeaking'); + expect(item.submenu!.items[12].role).to.equal('useselectionforfind'); } else { expect(item.submenu!.items[6].role).to.equal('delete'); expect(item.submenu!.items[7].type).to.equal('separator'); diff --git a/spec/ts-smoke/electron/main.ts b/spec/ts-smoke/electron/main.ts index f83f4ea470cf7..210ab76c2f2f8 100644 --- a/spec/ts-smoke/electron/main.ts +++ b/spec/ts-smoke/electron/main.ts @@ -834,7 +834,8 @@ Menu.buildFromTemplate([ { role: 'showAllTabs' }, { role: 'mergeAllWindows' }, { role: 'clearRecentDocuments' }, - { role: 'moveTabToNewWindow' } + { role: 'moveTabToNewWindow' }, + { role: 'useSelectionForFind' } ]); // net