diff --git a/addons/account/static/src/js/reconciliation/reconciliation_action.js b/addons/account/static/src/js/reconciliation/reconciliation_action.js index 79724846cbc..4102780c5c0 100644 --- a/addons/account/static/src/js/reconciliation/reconciliation_action.js +++ b/addons/account/static/src/js/reconciliation/reconciliation_action.js @@ -106,8 +106,7 @@ var StatementAction = Widget.extend(ControlPanelMixin, { var self = this; this.set("title", this.title); - var breadcrumbs = this.action_manager && this.action_manager.get_breadcrumbs() || [{ title: this.title, action: this }]; - this.update_control_panel({breadcrumbs: breadcrumbs, search_view_hidden: true}, {clear: true}); + this.update_control_panel({search_view_hidden: true}, {clear: true}); this.renderer.prependTo(self.$('.o_form_sheet')); this._renderLines(); @@ -122,18 +121,11 @@ var StatementAction = Widget.extend(ControlPanelMixin, { do_show: function () { this._super.apply(this, arguments); if (this.action_manager) { - var breadcrumbs = this.action_manager && this.action_manager.get_breadcrumbs() || [{ title: this.title, action: this }]; - while (breadcrumbs.length) { - if (breadcrumbs[breadcrumbs.length-1].action.widget === this) { - break; - } - breadcrumbs.pop(); - } - this.update_control_panel({breadcrumbs: breadcrumbs, search_view_hidden: true}, {clear: true}); + this.update_control_panel({search_view_hidden: true}, {clear: true}); this.action_manager.do_push_state({ action: this.params.tag, active_id: this.params.res_id, - }); + }); } }, diff --git a/addons/base_import/static/src/js/import_action.js b/addons/base_import/static/src/js/import_action.js index ee9e95fa5a0..513a663cfc2 100644 --- a/addons/base_import/static/src/js/import_action.js +++ b/addons/base_import/static/src/js/import_action.js @@ -126,7 +126,6 @@ var DataImport = Widget.extend(ControlPanelMixin, { self.renderButtons(); self.renderImportLink(); var status = { - breadcrumbs: self.action_manager.get_breadcrumbs(), cp_content: {$buttons: self.$buttons}, }; self.update_control_panel(status); @@ -505,10 +504,7 @@ var DataImport = Widget.extend(ControlPanelMixin, { this.exit(); }, exit: function () { - this.do_action({ - type: 'ir.actions.client', - tag: 'history_back' - }); + this.trigger_up('history_back'); }, onresults: function (event, from, to, message) { var no_messages = _.isEmpty(message); diff --git a/addons/board/static/src/js/action_manager_board_action.js b/addons/board/static/src/js/action_manager_board_action.js new file mode 100644 index 00000000000..3036ac0f328 --- /dev/null +++ b/addons/board/static/src/js/action_manager_board_action.js @@ -0,0 +1,33 @@ +odoo.define('board.ActionManager', function (require) { +"use strict"; + +/** + * The purpose of this file is to patch the ActionManager to properly generate + * the flags for the 'ir.actions.act_window' of model 'board.board'. + */ + +var ActionManager = require('web.ActionManager'); + +ActionManager.include({ + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @override + * @private + */ + _executeWindowAction: function (action) { + if (action.res_model === 'board.board' && action.view_mode === 'form') { + action.target = 'inline'; + _.extend(action.flags, { + hasSearchView: false, + hasSidebar: false, + headless: true, + }); + } + return this._super.apply(this, arguments); + }, +}); + +}); diff --git a/addons/board/static/src/js/dashboard.js b/addons/board/static/src/js/dashboard.js index 00b66c06312..e84529be83b 100644 --- a/addons/board/static/src/js/dashboard.js +++ b/addons/board/static/src/js/dashboard.js @@ -104,10 +104,9 @@ FormController.include({ }, /** - * We need to intercept switch_view event coming from sub views, because - * there is no view manager doing the job. Also, we don't actually want to - * switch view in dashboard, we want to do a do_action (which will open the - * record in a different breadcrumb) + * We need to intercept switch_view event coming from sub views, because we + * don't actually want to switch view in dashboard, we want to do a + * do_action (which will open the record in a different breadcrumb). * * @private * @param {OdooEvent} event @@ -126,6 +125,9 @@ FormController.include({ }); FormRenderer.include({ + custom_events: _.extend({}, FormRenderer.prototype.custom_events, { + env_updated: '_onEnvUpdated', + }), events: _.extend({}, FormRenderer.prototype.events, { 'click .oe_dashboard_column .oe_fold': '_onFoldClick', 'click .oe_dashboard_link_change_layout': '_onChangeLayout', @@ -339,6 +341,16 @@ FormRenderer.include({ }, }); }, + /** + * Stops the propagation of 'update_env' events triggered by the controllers + * instantiated by the dashboard. + * + * @override + * @private + */ + _onEnvUpdated: function (event) { + event.stopPropagation(); + }, /** * @private * @param {MouseEvent} event diff --git a/addons/board/static/src/js/favorite_menu.js b/addons/board/static/src/js/favorite_menu.js index a4d7aa11022..77cd3df4967 100644 --- a/addons/board/static/src/js/favorite_menu.js +++ b/addons/board/static/src/js/favorite_menu.js @@ -7,7 +7,6 @@ var core = require('web.core'); var Domain = require('web.Domain'); var FavoriteMenu = require('web.FavoriteMenu'); var pyeval = require('web.pyeval'); -var ViewManager = require('web.ViewManager'); var _t = core._t; var QWeb = core.qweb; @@ -23,11 +22,7 @@ FavoriteMenu.include({ if(this.action_id === undefined) { return this._super(); } - var am = this.findAncestor(function (a) { - return a instanceof ActionManager; - }); - if (am && am.get_inner_widget() instanceof ViewManager) { - this.view_manager = am.get_inner_widget(); + if (this.action.type === 'ir.actions.act_window') { this.add_to_dashboard_available = true; this.$('.o_favorites_menu').append(QWeb.render('SearchView.addtodashboard')); this.$add_to_dashboard = this.$('.o_add_to_dashboard'); @@ -71,7 +66,13 @@ FavoriteMenu.include({ context.add({ group_by: pyeval.eval('groupbys', search_data.groupbys || []) }); - context.add(this.view_manager.active_view.controller.getContext()); + // AAB: trigger_up an event that will be intercepted by the controller, + // as soon as the controller is the parent of the control panel + var am = this.findAncestor(function (a) { + return a instanceof ActionManager; + }); + var controller = am.getCurrentController(); + context.add(controller.widget.getContext()); var c = pyeval.eval('context', context); for (var k in c) { if (c.hasOwnProperty(k) && /^search_default_/.test(k)) { @@ -88,7 +89,7 @@ FavoriteMenu.include({ action_id: self.action_id || false, context_to_save: c, domain: domain, - view_mode: self.view_manager.active_view.type, + view_mode: controller.viewType, name: name, }, }) diff --git a/addons/board/views/board_templates.xml b/addons/board/views/board_templates.xml index 7e8b8d9c4a1..ac87af8ef26 100644 --- a/addons/board/views/board_templates.xml +++ b/addons/board/views/board_templates.xml @@ -3,6 +3,7 @@