diff --git a/addons/web/static/src/views/list/list_renderer.js b/addons/web/static/src/views/list/list_renderer.js index b59dc39818e..8fd47fe4737 100644 --- a/addons/web/static/src/views/list/list_renderer.js +++ b/addons/web/static/src/views/list/list_renderer.js @@ -882,12 +882,8 @@ export class ListRenderer extends Component { record = this.props.list.records[recordIndex] || record; }; - if (this.props.list.model.multiEdit && record.selected) { - await recordAfterResequence(); - await record.switchMode("edit"); - this.cellToFocus = { column, record }; - } else if (this.isInlineEditable(record)) { - if (record.isInEdition) { + if ((this.props.list.model.multiEdit && record.selected) || this.isInlineEditable(record)) { + if (record.isInEdition && this.props.list.editedRecord === record) { this.focusCell(column); this.cellToFocus = null; } else { diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js index eb85aa2712f..a5c88741cd3 100644 --- a/addons/web/static/tests/views/list_view_tests.js +++ b/addons/web/static/tests/views/list_view_tests.js @@ -1071,6 +1071,41 @@ QUnit.module("Views", (hooks) => { assert.verifySteps([]); }); + QUnit.test( + "multi_edit: clicking on a readonly field switches the focus to the next editable field", + async function (assert) { + await makeView({ + type: "list", + resModel: "foo", + serverData, + arch: ` + + + + `, + }); + + const firstRow = target.querySelector(".o_data_row"); + await click(firstRow, ".o_list_record_selector input"); + + let intField = firstRow.querySelector("[name='int_field']"); + intField.focus(); + await click(intField); + assert.strictEqual( + document.activeElement.closest(".o_field_widget").getAttribute("name"), + "foo" + ); + + intField = firstRow.querySelector("[name='int_field']"); + intField.focus(); + await click(intField); + assert.strictEqual( + document.activeElement.closest(".o_field_widget").getAttribute("name"), + "foo" + ); + } + ); + QUnit.test("save a record with an required field computed by another", async function (assert) { serverData.models.foo.onchanges = { foo(record) {