Reviewers: ,


Please review this at http://codereview.tryton.org/850003/

Affected files:
  M tryton/gui/main.py
  M tryton/gui/window/form.py
  M tryton/gui/window/view_form/screen/screen.py


Index: tryton/gui/main.py
===================================================================

--- a/tryton/gui/main.py
+++ b/tryton/gui/main.py
@@ -1060,6 +1060,7 @@
             else:
                 res = False
         if self.menu_screen:
+            self.menu_screen.save_tree_state()
             self.menu_screen.destroy()
             self.menu_screen = None
         self.menu_expander_clear()
@@ -1151,6 +1152,8 @@
         vbox.pack_start(self.global_search_entry, False, False)
         vbox.show_all()
 
+        if self.menu_screen:
+            self.menu_screen.save_tree_state()
         self.menu_screen = None
         self.menu_expander_clear()
         action = PYSONDecoder().decode(prefs['pyson_menu'])

Index: tryton/gui/window/form.py
===================================================================

--- a/tryton/gui/window/form.py
+++ b/tryton/gui/window/form.py
@@ -349,6 +349,7 @@
         self.screen.cancel_current()
         set_cursor = False
         if self.screen.current_view.view_type != 'form':
+            self.screen.save_tree_state(do_rpc=False)
             obj_id = self.id_get()
             self.screen.search_filter(self.screen.screen_container.get_text())
             for record in self.screen.group:
@@ -356,6 +357,11 @@
                     self.screen.current_record = record
                     set_cursor = True
                     break
+        else:
+            for widgets in self.screen.current_view.widgets.itervalues():
+                for widget in widgets:
+                    if hasattr(widget, 'screen'):
+                        widget.screen.save_tree_state(do_rpc=False)
         self.screen.display(set_cursor=set_cursor)
         self.message_info('')
         self.activate_save()
@@ -447,6 +453,7 @@
         self.update_attachment_count()
 
     def modified_save(self):
+        self.screen.set_tree_state()
         self.screen.current_view.set_value()
         if self.screen.modified():
             value = sur_3b(

Index: tryton/gui/window/view_form/screen/screen.py
===================================================================

--- a/tryton/gui/window/view_form/screen/screen.py
+++ b/tryton/gui/window/view_form/screen/screen.py
@@ -301,7 +301,6 @@
         return False
 
     def destroy(self):
-        self.save_tree_state()
         self.group.destroy()
         for view in self.views:
             view.destroy()
@@ -619,7 +618,7 @@
             self.expanded_nodes[parent][view.children_field] = expanded_nodes
         view.expand_nodes(expanded_nodes)
 
-    def save_tree_state(self):
+    def save_tree_state(self, do_rpc=True):
         view = self.current_view
         if (not CONFIG['client.save_tree_expanded_state']
                 or not view
@@ -631,15 +630,16 @@
         parent = self.parent.id if self.parent else None
         paths = view.get_expanded_paths()
         self.expanded_nodes[parent][view.children_field] = paths
-        json_domain = self.get_tree_domain(parent)
-        json_paths = json.dumps(paths)
-        try:
-            RPCExecute('model', 'ir.ui.view_tree_expanded_state',
-                'set_expanded', self.model_name, json_domain,
-                self.current_view.children_field, json_paths,
-                process_exception=False)
-        except (TrytonServerError, TrytonServerUnavailable):
-            pass
+        if do_rpc:
+            json_domain = self.get_tree_domain(parent)
+            json_paths = json.dumps(paths)
+            try:
+                RPCExecute('model', 'ir.ui.view_tree_expanded_state',
+                    'set_expanded', self.model_name, json_domain,
+                    self.current_view.children_field, json_paths,
+                    process_exception=False)
+            except (TrytonServerError, TrytonServerUnavailable):
+                pass
 
     def get_tree_domain(self, parent):
         if parent:

Reply via email to