Reviewers: ,


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

Affected files:
  M tryton/gui/window/view_form/view/form_gtk/many2one.py
  M tryton/gui/window/view_form/view/list_gtk/parser.py
  M tryton/gui/window/win_form.py


Index: tryton/gui/window/view_form/view/form_gtk/many2one.py
===================================================================

--- a/tryton/gui/window/view_form/view/form_gtk/many2one.py
+++ b/tryton/gui/window/view_form/view/form_gtk/many2one.py
@@ -181,13 +181,13 @@
         screen = self.get_screen()

         def callback(result):
-            if result and screen.save_current():
+            if result:
                 self.field.set_client(self.record,
                     self.value_from_id(screen.current_record.id,
                         screen.current_record.rec_name()))
                 self.display(self.record, self.field)
             self.focus_out = True
-        WinForm(screen, callback, new=True)
+        WinForm(screen, callback, new=True, save_current=True)

     def sig_edit(self, widget):
         if not common.MODELACCESS[self.get_model()]['read']:
@@ -204,18 +204,15 @@
             screen.load([self.id_from_value(self.field.get(self.record))])

             def callback(result):
-                if result and screen.save_current():
+                if result:
                     self.field.set_client(self.record,
                         self.value_from_id(screen.current_record.id,
                             screen.current_record.rec_name()),
                         force_change=True)
-                elif result:
-                    screen.display()
-                    return WinForm(screen, callback)
                 self.focus_out = True
                 self.display(self.record, self.field)
                 self.changed = True
-            WinForm(screen, callback)
+            WinForm(screen, callback, save_current=True)
             return
         elif model and not self._readonly:
             domain = self.field.domain_get(self.record)

Index: tryton/gui/window/view_form/view/list_gtk/parser.py
===================================================================

--- a/tryton/gui/window/view_form/view/list_gtk/parser.py
+++ b/tryton/gui/window/view_form/view/list_gtk/parser.py
@@ -647,20 +647,17 @@
             mode=['form'])

         def open_callback(result):
-            if result and screen.save_current():
+            if result:
                 value = (screen.current_record.id,
                     screen.current_record.rec_name())
                 field.set_client(record, value, force_change=True)
-            elif result:
-                screen.display()
-                return WinForm(screen, open_callback)
             if callback:
                 callback()
         if obj_id:
             screen.load([obj_id])
-            WinForm(screen, open_callback)
+            WinForm(screen, open_callback, save_current=True)
         else:
-            WinForm(screen, open_callback, new=True)
+            WinForm(screen, open_callback, new=True, save_current=True)

     def search_remote(self, record, relation, ids=None, domain=None,
             context=None, callback=None):

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

--- a/tryton/gui/window/win_form.py
+++ b/tryton/gui/window/win_form.py
@@ -16,12 +16,14 @@
     "Form window"

     def __init__(self, screen, callback, view_type='form',
-            new=False, many=False, domain=None, context=None):
+            new=False, many=False, domain=None, context=None,
+            save_current=False):
         NoModal.__init__(self)
         self.screen = screen
         self.callback = callback
         self.domain = domain
         self.context = context
+        self.save_current = save_current
         self.prev_view = self.screen.current_view
         self.screen.screen_container.alternate_view = True
         switch_new = False
@@ -375,6 +377,9 @@
                 and self.screen.current_record is not None):
             validate = self.screen.current_record.validate(
                 self.screen.current_view.get_fields())
+            if validate and self.save_current:
+                if not self.screen.save_current():
+                    validate = False
             if not validate:
                 self.screen.set_cursor()
                 self.screen.display()
@@ -389,7 +394,6 @@
             result = False
         else:
             result = response_id not in cancel_responses
-        self.callback(result)
         self.destroy()

     def new(self):



--
[email protected] mailing list

Reply via email to