Let the focus set by Screen.new_

The Screen.new_ method set the cursor on the right cell so we should set the
focus only when no new record is created.

issue8508
review263911002
This commit is contained in:
Cédric Krier committed 2019-07-25 10:16:31 +02:00
1 parent 5890601e9d
commit 19977d8dfa
1 file changed
+21 -30
+21 -30
View File
@@ -1411,7 +1411,7 @@
return this._get_column_td(this.edited_column);
},
key_press: function(event_) {
var current_td, selector, next_column, next_idx, i, next_row;
var current_td, selector, next_column, next_idx, i;
var states;
if ((event_.which != Sao.common.TAB_KEYCODE) &&
@@ -1444,22 +1444,10 @@
} else if (event_.which == Sao.common.UP_KEYCODE ||
event_.which == Sao.common.DOWN_KEYCODE ||
event_.which == Sao.common.RETURN_KEYCODE) {
if (event_.which == Sao.common.UP_KEYCODE) {
next_row = this.el.prev('tr');
} else if (event_.which == Sao.common.DOWN_KEYCODE) {
next_row = this.el.next('tr');
} else {
if (this.tree.attributes.editable == 'bottom') {
next_row = this.el.next('tr');
} else {
next_row = this.el.prev('tr');
}
}
next_column = this.edited_column;
this.record.validate(this.tree.get_fields())
.then(function(validate) {
if (!validate) {
next_row = null;
var invalid_fields =
this.record.invalid_fields();
for (i = 0; i < this.tree.columns.length; i++) {
@@ -1469,6 +1457,8 @@
break;
}
}
this._get_column_td(next_column)
.find(':input,[tabindex=0]').focus();
} else {
var prm = jQuery.when();
if (!this.tree.screen.group.parent) {
@@ -1479,6 +1469,18 @@
prm.fail(function() {
widget.focus();
});
var next_row;
if (event_.which == Sao.common.UP_KEYCODE) {
next_row = this.el.prev('tr');
} else if (event_.which == Sao.common.DOWN_KEYCODE) {
next_row = this.el.next('tr');
} else {
if (this.tree.attributes.editable == 'bottom') {
next_row = this.el.next('tr');
} else {
next_row = this.el.prev('tr');
}
}
if (!next_row.length &&
((event_.which == Sao.common.RETURN_KEYCODE) ||
((event_.which == Sao.common.UP_KEYCODE) &&
@@ -1491,27 +1493,16 @@
var limit = ((this.tree.screen.size_limit !== null) &&
(model.length >= this.tree.screen.size_limit));
if (access.create && !limit) {
prm = prm.then(function() {
prm.then(function() {
return this.tree.screen.new_();
}.bind(this))
.then(function() {
var rows = this.tree.tbody.children('tr');
if (this.tree.attributes.editable == 'bottom') {
next_row = rows.last();
} else {
next_row = rows.first();
}
}.bind(this));
}.bind(this));
}
} else {
this._get_column_td(next_column, next_row)
.trigger('click')
.find(':input,[tabindex=0]').focus();
}
return prm;
}
}.bind(this)).then(function() {
window.setTimeout(function() {
this._get_column_td(next_column, next_row)
.click()
.find(':input,[tabindex=0]').focus();
}.bind(this), 0);
}.bind(this));
} else if (event_.which == Sao.common.ESC_KEYCODE) {
this.tree.edit_row(null);