diff options
author | Claudio Guglielmo | 2021-05-11 16:29:55 +0000 |
---|---|---|
committer | Claudio Guglielmo | 2021-05-11 16:29:55 +0000 |
commit | f2ecfe7d48aa249ba3662b49e4fdc62764815726 (patch) | |
tree | bd3ac3a4804971380e53fbda8603d0a6ace2d6ec | |
parent | d97a2414ff32ca7b84111176a8918747e1c2d7ef (diff) | |
download | org.eclipse.scout.rt-features/cgu/brushup.tar.gz org.eclipse.scout.rt-features/cgu/brushup.tar.xz org.eclipse.scout.rt-features/cgu/brushup.zip |
FieldStatus: fix context menufeatures/cgu/brushup
-rw-r--r-- | eclipse-scout-core/src/form/fields/FieldStatus.js | 47 | ||||
-rw-r--r-- | eclipse-scout-core/src/form/fields/FormField.js | 27 | ||||
-rw-r--r-- | eclipse-scout-core/src/popup/Popup.js | 4 | ||||
-rw-r--r-- | eclipse-scout-core/test/menu/ContextMenuPopupSpec.js | 1 |
4 files changed, 30 insertions, 49 deletions
diff --git a/eclipse-scout-core/src/form/fields/FieldStatus.js b/eclipse-scout-core/src/form/fields/FieldStatus.js index 8410d4ce12..fda65e2c06 100644 --- a/eclipse-scout-core/src/form/fields/FieldStatus.js +++ b/eclipse-scout-core/src/form/fields/FieldStatus.js @@ -120,7 +120,6 @@ export default class FieldStatus extends Widget { this.trigger('hideTooltip', event); if (!event.defaultPrevented) { this.tooltip.destroy(); - this.tooltip = null; this._removeParentListeners(); } } @@ -180,17 +179,16 @@ export default class FieldStatus extends Widget { autoRemove: this.autoRemove, menus: this.menus }); + this.tooltip.render(); this.tooltip.one('destroy', () => { - this.hideTooltip(); + this.tooltip = null; }); - this.tooltip.render(); } } hideContextMenu() { if (this.contextMenu) { - this.contextMenu.destroy(); - this.contextMenu = null; + this.contextMenu.close(); } } @@ -209,10 +207,10 @@ export default class FieldStatus extends Widget { cloneMenuItems: false, closeOnAnchorMouseDown: false }); + this.contextMenu.open(); this.contextMenu.one('destroy', () => { - this.hideContextMenu(); + this.contextMenu = null; }); - this.contextMenu.open(); } hidePopup() { @@ -224,28 +222,17 @@ export default class FieldStatus extends Widget { if (this.status) { // ensure context menu closed this.hideContextMenu(); - if (this.tooltip) { - this.hideTooltip(); - } else { - this.showTooltip(); - } + this.toggleTooltip(); return; } if (!arrays.empty(this.menus)) { this.hideTooltip(); - let func = function func() { + this.session.onRequestsDone(() => { if (!this.rendered) { // check needed because function is called asynchronously return; } - // Toggle menu - if (this.contextMenu) { - this.hideContextMenu(); - } else { - this.showContextMenu(); - } - }.bind(this); - - this.session.onRequestsDone(func); + this.toggleContextMenu(); + }); } else { // close all @@ -253,6 +240,22 @@ export default class FieldStatus extends Widget { } } + toggleTooltip() { + if (this.tooltip) { + this.hideTooltip(); + } else { + this.showTooltip(); + } + } + + toggleContextMenu() { + if (this.contextMenu) { + this.hideContextMenu(); + } else { + this.showContextMenu(); + } + } + _onStatusMouseDown(event) { this.trigger('statusMouseDown', event); if (!event.defaultPrevented) { diff --git a/eclipse-scout-core/src/form/fields/FormField.js b/eclipse-scout-core/src/form/fields/FormField.js index e346af6960..36f2c00103 100644 --- a/eclipse-scout-core/src/form/fields/FormField.js +++ b/eclipse-scout-core/src/form/fields/FormField.js @@ -937,33 +937,6 @@ export default class FormField extends Widget { } } - _showContextMenu() { - let menus = this.getContextMenuItems(); - if (menus.length === 0) { - // at least one menu item must be visible - return; - } - - // Make sure tooltip is closed first - this._hideStatusMessage(); - - this.contextPopup = scout.create('ContextMenuPopup', { - parent: this, - $anchor: this.$status, - menuItems: menus, - cloneMenuItems: false, - closeOnAnchorMouseDown: false - }); - this.contextPopup.open(); - } - - _hideContextMenu() { - if (this.contextPopup) { - this.contextPopup.close(); - this.contextPopup = null; - } - } - _renderPreventInitialFocus() { this.$container.toggleClass('prevent-initial-focus', !!this.preventInitialFocus); } diff --git a/eclipse-scout-core/src/popup/Popup.js b/eclipse-scout-core/src/popup/Popup.js index 66176f1985..5a3c80fb7e 100644 --- a/eclipse-scout-core/src/popup/Popup.js +++ b/eclipse-scout-core/src/popup/Popup.js @@ -428,6 +428,10 @@ export default class Popup extends Widget { } close() { + if (this.destroyed || this.destroying) { + // Already closed, do nothing + return; + } let event = new Event(); this.trigger('close', event); if (!event.defaultPrevented) { diff --git a/eclipse-scout-core/test/menu/ContextMenuPopupSpec.js b/eclipse-scout-core/test/menu/ContextMenuPopupSpec.js index 2ce469da44..3895378d6a 100644 --- a/eclipse-scout-core/test/menu/ContextMenuPopupSpec.js +++ b/eclipse-scout-core/test/menu/ContextMenuPopupSpec.js @@ -86,6 +86,7 @@ describe('ContextMenuPopup', () => { let menuClone = findClone(popup, menu); let childMenuClone = menuClone.childActions[0]; + popup.animateRemoval = false; popup.destroy(); expect(menuClone.destroyed).toBe(true); |