diff --git a/tryton/tryton/common/popup_menu.py b/tryton/tryton/common/popup_menu.py index 8fc6146e14..8c287cb9fb 100644 --- a/tryton/tryton/common/popup_menu.py +++ b/tryton/tryton/common/popup_menu.py @@ -17,7 +17,7 @@ from tryton.gui.window.view_form.screen import Screen _ = gettext.gettext -def populate(menu, model, record, title='', field=None, context=None): +def populate(menu, model, record, title='', attributes=None, context=None): ''' Fill menu with the actions of model for the record. If title is filled, the actions will be put in a submenu. @@ -30,6 +30,9 @@ def populate(menu, model, record, title='', field=None, context=None): elif record.id < 0: return + if attributes is None: + attributes = {} + def load(record): if isinstance(record, int): screen = Screen(model, context=context) @@ -83,10 +86,10 @@ def populate(menu, model, record, title='', field=None, context=None): def edit(menuitem): with Window(hide_current=True, allow_similar=True): Window.create(model, - view_ids=field.attrs.get('view_ids', '').split(','), + view_ids=attributes.get('view_ids', '').split(','), res_id=id_(record), mode=['form'], - name=field.attrs.get('string'), + name=attributes.get('string'), context=context) if title: @@ -102,7 +105,7 @@ def populate(menu, model, record, title='', field=None, context=None): if len(action_menu): action_menu.append(Gtk.SeparatorMenuItem()) - if field: + if attributes: edit_item = Gtk.MenuItem(label=_('Edit...')) edit_item.connect('activate', edit) action_menu.append(edit_item) diff --git a/tryton/tryton/gui/window/view_form/view/form_gtk/many2one.py b/tryton/tryton/gui/window/view_form/view/form_gtk/many2one.py index 079614deda..fde4f7ae66 100644 --- a/tryton/tryton/gui/window/view_form/view/form_gtk/many2one.py +++ b/tryton/tryton/gui/window/view_form/view/form_gtk/many2one.py @@ -341,7 +341,7 @@ class Many2One(Widget): if self.has_target(value): populate( menu, self.get_model(), self.id_from_value(value), - '', self.field, self.field.get_context(self.record)) + '', self.attrs, self.field.get_context(self.record)) return True def _set_completion(self): diff --git a/tryton/tryton/gui/window/view_form/view/list.py b/tryton/tryton/gui/window/view_form/view/list.py index f1d7528d29..3c51911a30 100644 --- a/tryton/tryton/gui/window/view_form/view/list.py +++ b/tryton/tryton/gui/window/view_form/view/list.py @@ -1049,7 +1049,10 @@ class ViewTree(View): parent = parent.parent else: populate(menu, group.model_name, record) + current_col = defaultdict(lambda: -1) for col in self.treeview.get_columns(): + if col.name: + current_col[col.name] += 1 if not col.get_visible() or not col.name: continue field = group.fields[col.name] @@ -1066,9 +1069,10 @@ class ViewTree(View): continue label = field.attrs['string'] context = field.get_context(record) + col_widget = self.widgets[col.name][current_col[col.name]] populate( - menu, model, record_id, title=label, field=field, - context=context) + menu, model, record_id, title=label, + attributes=col_widget.attributes, context=context) if selection.count_selected_rows() == 1: group = self.group