diff --git a/tryton/gui/window/form.py b/tryton/gui/window/form.py index 76cadedd3f..60d97a2d0b 100644 --- a/tryton/gui/window/form.py +++ b/tryton/gui/window/form.py @@ -346,6 +346,9 @@ class Form(SignalEvent, TabContent): 'green') def sig_save(self, widget=None): + if widget: + # Called from button so we must save the tree state + self.screen.save_tree_state() if not common.MODELACCESS[self.model]['write']: return if self.screen.save_current(): @@ -370,11 +373,13 @@ class Form(SignalEvent, TabContent): self.activate_save() def sig_reload(self, test_modified=True): - if test_modified and not self.modified_save(): + if test_modified: + if not self.modified_save(): return False + else: + self.screen.save_tree_state(store=False) self.screen.cancel_current() set_cursor = False - self.screen.save_tree_state(store=False) record_id = (self.screen.current_record.id if self.screen.current_record else None) if self.screen.current_view.view_type != 'form': diff --git a/tryton/gui/window/view_form/screen/screen.py b/tryton/gui/window/view_form/screen/screen.py index 52c74df0a4..33f8c16154 100644 --- a/tryton/gui/window/view_form/screen/screen.py +++ b/tryton/gui/window/view_form/screen/screen.py @@ -615,7 +615,8 @@ class Screen(SignalEvent): state = self.tree_states[parent][view.children_field] if state: state_timestamp, expanded_nodes, selected_nodes = state - if timestamp != state_timestamp: + if (timestamp != state_timestamp + and view.view_type != 'form'): state = None if state is None and CONFIG['client.save_tree_state']: json_domain = self.get_tree_domain(parent) @@ -639,6 +640,9 @@ class Screen(SignalEvent): record = None for node in selected_nodes[0]: new_record = self.group.get(node) + if node < 0 and -node < len(self.group): + # Negative id is the index of the new record + new_record = self.group[-node] if not new_record: break else: @@ -662,8 +666,12 @@ class Screen(SignalEvent): if hasattr(widget, 'screen'): widget.screen.save_tree_state(store) if len(self.views) == 1 and self.current_record: + path = self.current_record.id + if path < 0: + path = -self.current_record.group.index( + self.current_record) self.tree_states[parent][view.children_field] = ( - timestamp, [], [[self.current_record.id]]) + timestamp, [], [[path]]) elif view.view_type == 'tree': paths = view.get_expanded_paths() selected_paths = view.get_selected_paths()