diff --git a/addons/web/static/src/js/chrome/action_manager.js b/addons/web/static/src/js/chrome/action_manager.js index d312746578e..b97262079ef 100644 --- a/addons/web/static/src/js/chrome/action_manager.js +++ b/addons/web/static/src/js/chrome/action_manager.js @@ -335,7 +335,7 @@ var ActionManager = Widget.extend({ // communicate its status widget.set_cp_bus(self.controlPanel.get_bus()); } - return self._startController(controller); + return self.dp.add(self._startController(controller)); }) .then(function (controller) { if (self.currentDialogController) { diff --git a/addons/web/static/tests/chrome/action_manager_tests.js b/addons/web/static/tests/chrome/action_manager_tests.js index ff8fe80a523..3308d7325ce 100644 --- a/addons/web/static/tests/chrome/action_manager_tests.js +++ b/addons/web/static/tests/chrome/action_manager_tests.js @@ -3065,6 +3065,35 @@ QUnit.module('ActionManager', { actionManager.destroy(); }); }); + + QUnit.test('properly drop client actions after new action is initiated', function (assert) { + assert.expect(1); + + var slowWillStartDef = $.Deferred(); + + var ClientAction = AbstractAction.extend({ + willStart: function () { + return slowWillStartDef; + }, + }); + + core.action_registry.add('slowAction', ClientAction); + + var actionManager = createActionManager({ + actions: this.actions, + archs: this.archs, + data: this.data, + }); + actionManager.doAction('slowAction'); + actionManager.doAction(4); + slowWillStartDef.resolve(); + assert.strictEqual(actionManager.$('.o_kanban_view').length, 1, + 'should have loaded a kanban view'); + + actionManager.destroy(); + delete core.action_registry.map.slowAction; + }); + }); });