Liu Song’s Projects


~/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 {