diff -r a2294b0ec2e8 tryton/tryton/common/popup_menu.py --- a/tryton/tryton/common/popup_menu.py Wed May 11 10:42:28 2016 +0200 +++ b/tryton/tryton/common/popup_menu.py Mon May 30 15:16:30 2016 +0200 @@ -12,7 +12,7 @@ _ = gettext.gettext -def populate(menu, model, record, title='', field=None): +def populate(menu, model, record, title='', field=None, parent_screen=None): ''' Fill menu with the actions of model for the record. If title is filled, the actions will be put in a submenu. @@ -38,6 +38,8 @@ return record def activate(menuitem, action, atype): + if parent_screen: + parent_screen.save_tree_state() rec = load(record) action = Action.evaluate(action, atype, rec) data = { diff -r a2294b0ec2e8 tryton/tryton/gui/window/view_form/view/list.py --- a/tryton/tryton/gui/window/view_form/view/list.py Wed May 11 10:42:28 2016 +0200 +++ b/tryton/tryton/gui/window/view_form/view/list.py Mon May 30 15:16:30 2016 +0200 @@ -872,7 +872,7 @@ menu = gtk.Menu() menu.popup(None, None, None, event.button, event.time) - def pop(menu, group, record): + def pop(menu, group, record, screen): copy_item = gtk.ImageMenuItem('gtk-copy') copy_item.connect('activate', lambda x: self.on_copy()) menu.append(copy_item) @@ -886,7 +886,8 @@ break parent = parent.parent else: - populate(menu, group.model_name, record) + populate(menu, group.model_name, record, + parent_screen=screen) for col in self.treeview.get_columns(): if not col.get_visible() or not col.name: continue @@ -903,10 +904,11 @@ if not model: continue label = field.attrs['string'] - populate(menu, model, record_id, title=label, field=field) + populate(menu, model, record_id, title=label, field=field, + parent_screen=screen) menu.show_all() # Delay filling of popup as it can take time - gobject.idle_add(pop, menu, group, record) + gobject.idle_add(pop, menu, group, record, self.screen) elif event.button == 2: event.button = 1 event.state |= gtk.gdk.MOD1_MASK