~/Projects/chrome-devtools-frontend
git clone https://code.lsong.org/chrome-devtools-frontend
Commit
- Commit
- af6ffa64ca4a192966b9f6c557659e07e7b56617
- Author
- Guangyue Xu <[email protected]>
- Date
- 2022-12-06 16:01:18 -0800 -0800
- Diffstat
front_end/ui/legacy/ContextMenu.ts | 3 +++ front_end/ui/legacy/SoftContextMenu.ts | 8 ++++++--
limit soft context menu focus change to non-mouse event Related CL: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4066166 After the fix: https://i.imgur.com/bmphmXd.gif Bug: 1395738 Change-Id: Id973b0f6dd29c3ef2a9e18d0d9971af7f383c6e1 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4083491 Reviewed-by: Alex Rudenko <[email protected]> Commit-Queue: Guangyue Xu <[email protected]>
diff --git a/front_end/ui/legacy/ContextMenu.ts b/front_end/ui/legacy/ContextMenu.ts index 006dd83ac4ecf6ea04669d67db43f243e9962355..40dfec4d65825cfdb0f1d058335f5730febe6104 100644 --- a/front_end/ui/legacy/ContextMenu.ts +++ b/front_end/ui/legacy/ContextMenu.ts @@ -449,6 +449,9 @@ if (this.useSoftMenu || ContextMenu.useSoftMenu || Host.InspectorFrontendHost.InspectorFrontendHostInstance.isHostedMode()) { this.softMenu = new SoftContextMenu( (menuObject as SoftContextMenuDescriptor[]), this.itemSelected.bind(this), undefined, this.onSoftMenuClosed); + // let soft context menu focus on the first item when the event is triggered by a non-mouse event + const isMouseEvent = (this.event as PointerEvent).pointerType === 'mouse'; + this.softMenu.setFocusOnTheFirstItem(!isMouseEvent); this.softMenu.show((ownerDocument as Document), new AnchorBox(this.x, this.y, 0, 0)); if (this.contextMenuLabel) { this.softMenu.setContextMenuElementLabel(this.contextMenuLabel); diff --git a/front_end/ui/legacy/SoftContextMenu.ts b/front_end/ui/legacy/SoftContextMenu.ts index 2d8fc20e438e84a03cf9195488f10be07778baeb..e75268aa807ddf6291f4793a406b06065548f3cc 100644 --- a/front_end/ui/legacy/SoftContextMenu.ts +++ b/front_end/ui/legacy/SoftContextMenu.ts @@ -80,6 +80,7 @@ private hideOnUserMouseDownUnlessInMenu?: ((event: Event) => void); private activeSubMenuElement?: HTMLElement; private subMenu?: SoftContextMenu; private onMenuClosed?: () => void; + private focusOnTheFirstItem = true; constructor( items: SoftContextMenuDescriptor[], itemSelectedCallback: (arg0: number) => void, parentMenu?: SoftContextMenu, @@ -160,9 +161,8 @@ observer.observe(devToolsElem); } // focus on the first menu item -/* * - * met: + this.parentMenu ? PointerEventsBehavior.PierceGlassPane : PointerEventsBehavior.BlockedByGlassPane); const focusElement = this.contextMenuElement.children[0] as HTMLElement; this.highlightMenuItem(focusElement, /* scheduleSubMenu */ false); } @@ -572,6 +572,10 @@ if (child.className !== 'soft-context-menu-separator') { ARIAUtils.markAsMenuItemCheckBox(child); } } + } + + setFocusOnTheFirstItem(focusOnTheFirstItem: boolean): void { + this.focusOnTheFirstItem = focusOnTheFirstItem; } } export interface SoftContextMenuDescriptor {