Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All Rights Reserved. | 2 * Copyright (C) 2011 Google Inc. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 43 * @param {!AnchorBox} anchorBox | 43 * @param {!AnchorBox} anchorBox |
| 44 */ | 44 */ |
| 45 show(document, anchorBox) { | 45 show(document, anchorBox) { |
| 46 if (!this._items.length) | 46 if (!this._items.length) |
| 47 return; | 47 return; |
| 48 | 48 |
| 49 this._document = document; | 49 this._document = document; |
| 50 | 50 |
| 51 this._glassPane = new UI.GlassPane(); | 51 this._glassPane = new UI.GlassPane(); |
| 52 this._glassPane.setBlockPointerEvents(!this._parentMenu); | 52 this._glassPane.setBlockPointerEvents(!this._parentMenu); |
| 53 this._glassPane.setSetOutsideClickCallback(event => { | |
|
lushnikov
2017/04/07 22:25:40
can we fix the setSetOutsideClickCallback name?
dgozman
2017/04/07 22:30:32
Yeah, in a separate patch?
| |
| 54 this._discardMenu(true, event); | |
| 55 event.consume(); | |
|
lushnikov
2017/04/07 22:25:40
why does the bug happen in the first place? As far
dgozman
2017/04/07 22:30:32
This is because we have two nested menus, and clic
| |
| 56 }); | |
| 57 this._glassPane.registerRequiredCSS('ui/softContextMenu.css'); | 53 this._glassPane.registerRequiredCSS('ui/softContextMenu.css'); |
| 58 this._glassPane.setContentAnchorBox(anchorBox); | 54 this._glassPane.setContentAnchorBox(anchorBox); |
| 59 this._glassPane.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent); | 55 this._glassPane.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent); |
| 60 this._glassPane.setMarginBehavior(UI.GlassPane.MarginBehavior.NoMargin); | 56 this._glassPane.setMarginBehavior(UI.GlassPane.MarginBehavior.NoMargin); |
| 61 this._glassPane.setAnchorBehavior( | 57 this._glassPane.setAnchorBehavior( |
| 62 this._parentMenu ? UI.GlassPane.AnchorBehavior.PreferRight : UI.GlassPan e.AnchorBehavior.PreferBottom); | 58 this._parentMenu ? UI.GlassPane.AnchorBehavior.PreferRight : UI.GlassPan e.AnchorBehavior.PreferBottom); |
| 63 | 59 |
| 64 this._contextMenuElement = this._glassPane.contentElement.createChild('div', 'soft-context-menu'); | 60 this._contextMenuElement = this._glassPane.contentElement.createChild('div', 'soft-context-menu'); |
| 65 this._contextMenuElement.tabIndex = 0; | 61 this._contextMenuElement.tabIndex = 0; |
| 66 this._contextMenuElement.addEventListener('mouseup', e => e.consume(), false ); | 62 this._contextMenuElement.addEventListener('mouseup', e => e.consume(), false ); |
| 67 this._contextMenuElement.addEventListener('keydown', this._menuKeyDown.bind( this), false); | 63 this._contextMenuElement.addEventListener('keydown', this._menuKeyDown.bind( this), false); |
| 68 | 64 |
| 69 for (var i = 0; i < this._items.length; ++i) | 65 for (var i = 0; i < this._items.length; ++i) |
| 70 this._contextMenuElement.appendChild(this._createMenuItem(this._items[i])) ; | 66 this._contextMenuElement.appendChild(this._createMenuItem(this._items[i])) ; |
| 71 | 67 |
| 72 this._glassPane.show(document); | 68 this._glassPane.show(document); |
| 73 this._focus(); | 69 this._focus(); |
| 70 | |
| 71 if (!this._parentMenu) { | |
| 72 this._onBodyMouseDown = event => this._discardMenu(true, event); | |
| 73 this._document.body.addEventListener('mousedown', this._onBodyMouseDown, f alse); | |
| 74 } | |
| 74 } | 75 } |
| 75 | 76 |
| 76 discard() { | 77 discard() { |
| 77 this._discardMenu(true); | 78 this._discardMenu(true); |
| 78 } | 79 } |
| 79 | 80 |
| 80 _createMenuItem(item) { | 81 _createMenuItem(item) { |
| 81 if (item.type === 'separator') | 82 if (item.type === 'separator') |
| 82 return this._createSeparator(); | 83 return this._createSeparator(); |
| 83 | 84 |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 323 if (event) | 324 if (event) |
| 324 event.consume(true); | 325 event.consume(true); |
| 325 } | 326 } |
| 326 | 327 |
| 327 _discardSubMenus() { | 328 _discardSubMenus() { |
| 328 if (this._subMenu) | 329 if (this._subMenu) |
| 329 this._subMenu._discardSubMenus(); | 330 this._subMenu._discardSubMenus(); |
| 330 if (this._glassPane) { | 331 if (this._glassPane) { |
| 331 this._glassPane.hide(); | 332 this._glassPane.hide(); |
| 332 delete this._glassPane; | 333 delete this._glassPane; |
| 334 if (this._onBodyMouseDown) { | |
| 335 this._document.body.removeEventListener('mousedown', this._onBodyMouseDo wn, false); | |
| 336 delete this._onBodyMouseDown; | |
| 337 } | |
| 333 } | 338 } |
| 334 if (this._parentMenu) | 339 if (this._parentMenu) |
| 335 delete this._parentMenu._subMenu; | 340 delete this._parentMenu._subMenu; |
| 336 } | 341 } |
| 337 }; | 342 }; |
| OLD | NEW |