details: https://code.tryton.org/tryton/commit/4cb9e4c709d5
branch: default
user: Cédric Krier <[email protected]>
date: Thu Aug 20 16:33:20 2026 +0200
description:
Prevent clicking on the toolbar while an action is still running
Closes #15028
diffstat:
sao/src/tab.js | 39 ++++++++++++++++++++++++++++-----------
1 files changed, 28 insertions(+), 11 deletions(-)
diffs (126 lines):
diff -r ed94d29b59c2 -r 4cb9e4c709d5 sao/src/tab.js
--- a/sao/src/tab.js Thu Aug 20 15:19:36 2026 +0200
+++ b/sao/src/tab.js Thu Aug 20 16:33:20 2026 +0200
@@ -129,10 +129,10 @@
'class': 'panel panel-default ' + this.class_,
});
- var toolbar = this.create_toolbar().appendTo(this.el);
- this.title = toolbar.find('.title');
- this.title_short = toolbar.find('.title-short');
- this.title_long = toolbar.find('.title-long');
+ this.toolbar = this.create_toolbar().appendTo(this.el);
+ this.title = this.toolbar.find('.title');
+ this.title_short = this.toolbar.find('.title-short');
+ this.title_long = this.toolbar.find('.title-long');
this.main = jQuery('<div/>', {
'class': 'panel-body',
@@ -145,6 +145,12 @@
this._chat = null;
},
+ disable_toolbar: function() {
+ this.toolbar.get(0).inert = true;
+ },
+ enable_toolbar: function() {
+ this.toolbar.get(0).inert = false;
+ },
set_menu: function(menu) {
var previous;
this.menu_def().forEach(item => {
@@ -562,7 +568,9 @@
}
};
+ this.disable_toolbar();
this.view_prm = this.screen.switch_view().done(() => {
+ this.enable_toolbar();
this.set_buttons_sensitive();
this.content.append(screen.screen_container.el);
if (attributes.res_id) {
@@ -933,11 +941,14 @@
});
},
switch_: function() {
+ this.disable_toolbar();
return this.modified_save().then(
() => this.screen.switch_view(),
- (result) => result ? this.screen.switch_view() : null);
+ (result) => result ? this.screen.switch_view() : null)
+ .always(() => this.enable_toolbar());
},
reload: function(test_modified=true) {
+ this.disable_toolbar();
const reload = () => {
return this.screen.cancel_current().then(() => {
var record_id = null;
@@ -968,16 +979,19 @@
});
});
};
+ let prm;
if (test_modified) {
- return this.modified_save().then(reload);
+ prm = this.modified_save();
} else {
- return this.screen.save_tree_state(false).then(reload);
+ prm = this.screen.save_tree_state(false);
}
+ return prm.then(reload).always(() => this.enable_toolbar());
},
copy: function() {
if (!Sao.common.MODELACCESS.get(this.screen.model_name).create) {
return jQuery.when();
}
+ this.disable_toolbar();
return this.modified_save().then(() => {
return this.screen.copy().then(() => {
this.info_bar.add(
@@ -986,7 +1000,7 @@
'info');
this.screen.count_tab_domain(true);
});
- });
+ }).always(() => this.enable_toolbar());
},
delete_: function() {
if (!Sao.common.MODELACCESS.get(this.screen.model_name)['delete']
@@ -1003,6 +1017,7 @@
"Are you sure you want to delete this record?",
"Are you sure you want to delete these %1 records?", size,
size);
return Sao.common.sur.run(msg).then(() => {
+ this.disable_toolbar();
return this.screen.remove(true, false, true).then(
() => {
this.info_bar.add(
@@ -1013,24 +1028,26 @@
this.info_bar.add(
Sao.i18n.gettext("Records not removed."),
'danger');
- });
+ }).always(() => this.enable_toolbar());
});
},
previous: function() {
return this.modified_save().then(() => {
+ this.disable_toolbar();
return this.screen.display_previous().then(() => {
this.info_bar.clear();
this.set_buttons_sensitive();
});
- });
+ }).always(() => this.enable_toolbar());
},
next: function() {
return this.modified_save().then(() => {
+ this.disable_toolbar();
return this.screen.display_next().then(() => {
this.info_bar.clear();
this.set_buttons_sensitive();
});
- });
+ }).always(() => this.enable_toolbar());
},
search: function() {
return this.modified_save().then(() => {