diff --git a/tryton/gui/window/view_form/view/form_gtk/many2one.py b/tryton/gui/window/view_form/view/form_gtk/many2one.py index a8448d2439..82b647175a 100644 --- a/tryton/gui/window/view_form/view/form_gtk/many2one.py +++ b/tryton/gui/window/view_form/view/form_gtk/many2one.py @@ -177,13 +177,13 @@ class Many2One(WidgetInterface): 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 self.focus_out or not self.field: @@ -198,18 +198,15 @@ class Many2One(WidgetInterface): 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) diff --git a/tryton/gui/window/view_form/view/list_gtk/parser.py b/tryton/gui/window/view_form/view/list_gtk/parser.py index 335db528c3..b67cd6f30b 100644 --- a/tryton/gui/window/view_form/view/list_gtk/parser.py +++ b/tryton/gui/window/view_form/view/list_gtk/parser.py @@ -627,20 +627,17 @@ class M2O(Char): 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): diff --git a/tryton/gui/window/win_form.py b/tryton/gui/window/win_form.py index 9b27b928b9..f6536583d7 100644 --- a/tryton/gui/window/win_form.py +++ b/tryton/gui/window/win_form.py @@ -16,12 +16,14 @@ class WinForm(NoModal): "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 @@ -366,6 +368,9 @@ class WinForm(NoModal): 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()