From 965c0ab49bc09d2d4fad0a4b5bfef09ee8c2b868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 19 Oct 2021 00:23:30 +0200 Subject: [PATCH] Use changed event to trigger focus out in Selection widget of Dict issue10856 review389101002 (grafted from 795501d0c8d174bc7c0c4baf4449fae150c33b46) --HG-- branch : 6.0 --- .../view_form/view/form_gtk/dictionary.py | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tryton/gui/window/view_form/view/form_gtk/dictionary.py b/tryton/gui/window/view_form/view/form_gtk/dictionary.py index 163360c1e6..8523496634 100644 --- a/tryton/gui/window/view_form/view/form_gtk/dictionary.py +++ b/tryton/gui/window/view_form/view/form_gtk/dictionary.py @@ -99,13 +99,11 @@ class DictSelectionEntry(DictEntry): # customizing entry child = widget.get_child() child.props.activates_default = True - child.connect('changed', self.parent_widget.send_modified) + child.connect('changed', self._changed) child.connect('focus-out-event', lambda w, e: self.parent_widget._focus_out()) child.connect('activate', lambda w: self.parent_widget._focus_out()) - widget.connect('notify::active', - lambda w, e: self.parent_widget._focus_out()) widget.connect( 'scroll-event', lambda c, e: c.stop_emission_by_name('scroll-event')) @@ -156,10 +154,18 @@ class DictSelectionEntry(DictEntry): if selection[1] == value: active = i break - self.widget.set_active(active) - if active == -1: - # When setting no item GTK doesn't clear the entry - self.widget.get_child().set_text('') + child = self.widget.get_child() + child.handler_block_by_func(self._changed) + try: + self.widget.set_active(active) + if active == -1: + # When setting no item GTK doesn't clear the entry + child.set_text('') + finally: + child.handler_unblock_by_func(self._changed) + + def _changed(self, selection): + GLib.idle_add(self.parent_widget._focus_out) def set_readonly(self, readonly): self.widget.set_sensitive(not readonly)