Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js b/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js |
| index 4ba29b98c7f21a9e53a48e3a788b8d5a21457d5f..f7df3745ef8660548c4b4098f4003e3f019bc05c 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js |
| @@ -69,13 +69,29 @@ UI.SoftContextMenu = class { |
| this._focus(); |
| if (!this._parentMenu) { |
| - this._onBodyMouseDown = event => this._discardMenu(true, event); |
| + this._onBodyMouseDown = event => { |
| + this.discard(); |
| + event.consume(true); |
| + }; |
| this._document.body.addEventListener('mousedown', this._onBodyMouseDown, false); |
| } |
| } |
| discard() { |
| - this._discardMenu(true); |
| + if (this._subMenu) |
| + this._subMenu._discardSubMenus(); |
|
dgozman
2017/04/18 18:40:20
You removed this method.
einbinder
2017/04/18 23:47:02
Fixed
|
| + if (this._focusRestorer) |
| + this._focusRestorer.restore(); |
| + if (this._glassPane) { |
| + this._glassPane.hide(); |
| + delete this._glassPane; |
| + if (this._onBodyMouseDown) { |
| + this._document.body.removeEventListener('mousedown', this._onBodyMouseDown, false); |
| + delete this._onBodyMouseDown; |
| + } |
| + } |
| + if (this._parentMenu) |
| + delete this._parentMenu._subMenu; |
| } |
| _createMenuItem(item) { |
| @@ -156,13 +172,24 @@ UI.SoftContextMenu = class { |
| event.consume(); |
| } |
| + /** |
| + * @return {!UI.SoftContextMenu} |
| + */ |
| + _root() { |
| + var root = this; |
| + while (root._parentMenu) |
| + root = root._parentMenu; |
| + return root; |
| + } |
| + |
| _focus() { |
|
dgozman
2017/04/18 18:40:20
Does anyone call this? Inline into show?
einbinder
2017/04/18 23:47:02
Inlined.
|
| - this._contextMenuElement.focus(); |
| + this._focusRestorer = new UI.ElementFocusRestorer(this._contextMenuElement); |
| } |
| _triggerAction(menuItemElement, event) { |
| if (!menuItemElement._subItems) { |
| - this._discardMenu(true, event); |
| + this._root().discard(); |
| + event.consume(true); |
| if (typeof menuItemElement._actionId !== 'undefined') { |
| this._itemSelectedCallback(menuItemElement._actionId); |
| delete menuItemElement._actionId; |
| @@ -192,13 +219,6 @@ UI.SoftContextMenu = class { |
| this._subMenu.show(this._document, anchorBox); |
| } |
| - _hideSubMenu() { |
| - if (!this._subMenu) |
| - return; |
| - this._subMenu._discardSubMenus(); |
| - this._focus(); |
| - } |
| - |
| _menuItemMouseOver(event) { |
| this._highlightMenuItem(event.target, true); |
| } |
| @@ -222,7 +242,8 @@ UI.SoftContextMenu = class { |
| if (this._highlightedMenuItemElement === menuItemElement) |
| return; |
| - this._hideSubMenu(); |
| + if (this._subMenu) |
| + this._subMenu.discard(); |
| if (this._highlightedMenuItemElement) { |
| this._highlightedMenuItemElement.classList.remove('force-white-icons'); |
| this._highlightedMenuItemElement.classList.remove('soft-context-menu-item-mouse-over'); |
| @@ -273,7 +294,7 @@ UI.SoftContextMenu = class { |
| case 'ArrowLeft': |
| if (this._parentMenu) { |
| this._highlightMenuItem(null, false); |
| - this._parentMenu._hideSubMenu(); |
| + this.discard(); |
| } |
| break; |
| case 'ArrowRight': |
| @@ -281,12 +302,11 @@ UI.SoftContextMenu = class { |
| break; |
| if (this._highlightedMenuItemElement._subItems) { |
| this._showSubMenu(this._highlightedMenuItemElement); |
| - this._subMenu._focus(); |
| this._subMenu._highlightNext(); |
| } |
| break; |
| case 'Escape': |
| - this._discardMenu(false, event); |
| + this.discard(); |
| break; |
| case 'Enter': |
| if (!isEnterKey(event)) |
| @@ -303,40 +323,4 @@ UI.SoftContextMenu = class { |
| } |
| event.consume(true); |
| } |
| - |
| - /** |
| - * @param {boolean} closeParentMenus |
| - * @param {!Event=} event |
| - */ |
| - _discardMenu(closeParentMenus, event) { |
| - if (this._subMenu && !closeParentMenus) |
| - return; |
| - |
| - this._discardSubMenus(); |
| - |
| - if (this._parentMenu) { |
| - if (closeParentMenus) |
| - this._parentMenu._discardMenu(closeParentMenus, event); |
| - else |
| - this._parentMenu._focus(); |
| - } |
| - |
| - if (event) |
| - event.consume(true); |
| - } |
| - |
| - _discardSubMenus() { |
| - if (this._subMenu) |
| - this._subMenu._discardSubMenus(); |
| - if (this._glassPane) { |
| - this._glassPane.hide(); |
| - delete this._glassPane; |
| - if (this._onBodyMouseDown) { |
| - this._document.body.removeEventListener('mousedown', this._onBodyMouseDown, false); |
| - delete this._onBodyMouseDown; |
| - } |
| - } |
| - if (this._parentMenu) |
| - delete this._parentMenu._subMenu; |
| - } |
| }; |