Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClaudio Guglielmo2021-05-11 16:29:55 +0000
committerClaudio Guglielmo2021-05-11 16:29:55 +0000
commitf2ecfe7d48aa249ba3662b49e4fdc62764815726 (patch)
treebd3ac3a4804971380e53fbda8603d0a6ace2d6ec
parentd97a2414ff32ca7b84111176a8918747e1c2d7ef (diff)
downloadorg.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.js47
-rw-r--r--eclipse-scout-core/src/form/fields/FormField.js27
-rw-r--r--eclipse-scout-core/src/popup/Popup.js4
-rw-r--r--eclipse-scout-core/test/menu/ContextMenuPopupSpec.js1
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);

Back to the top