From abfee0de15d6588ce5d2a10637cffc818befff47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 24 Sep 2023 21:09:34 +0200 Subject: [PATCH] Block row selected handler when unselect all of list-form aa8eb78f1b75 and d0c1933ce509 blocked the wrong method before calling unselect_all. Closes #12451 --- .../gui/window/view_form/view/list_form.py | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/tryton/tryton/gui/window/view_form/view/list_form.py b/tryton/tryton/gui/window/view_form/view/list_form.py index 2f96019b05..15a75a9798 100644 --- a/tryton/tryton/gui/window/view_form/view/list_form.py +++ b/tryton/tryton/gui/window/view_form/view/list_form.py @@ -146,15 +146,17 @@ class ViewListForm(View): if not nodes: return nodes = {n[0] for n in nodes} - self.listbox.handler_block_by_func(self.select_nodes) - self.listbox.unselect_all() - for idx, view_form in enumerate(self._view_forms): - if view_form.record.id in nodes: - row = self.listbox.get_row_at_index(idx) - if not row: - continue - self.listbox.select_row(row) - self.listbox.handler_unblock_by_func(self.select_nodes) + self.listbox.handler_block_by_func(self._row_selected) + try: + self.listbox.unselect_all() + for idx, view_form in enumerate(self._view_forms): + if view_form.record.id in nodes: + row = self.listbox.get_row_at_index(idx) + if not row: + continue + self.listbox.select_row(row) + finally: + self.listbox.handler_unblock_by_func(self._row_selected) def _row_selected(self, listbox, row): previous_record = self.record @@ -197,11 +199,11 @@ class ViewListForm(View): return # unselect_all triggers a loop in _row_selected if the record is not # valid - self.listbox.handler_block_by_func(self._select_show_row) + self.listbox.handler_block_by_func(self._row_selected) try: self.listbox.unselect_all() finally: - self.listbox.handler_unblock_by_func(self._select_show_row) + self.listbox.handler_unblock_by_func(self._row_selected) row = self.listbox.get_row_at_index(index) if not row or not row.get_realized(): return