From b16dbdc9c88c0a2d11fbff2e48f183353b704883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 16 Feb 2023 22:18:01 +0100 Subject: [PATCH] Grab focus on icon press It is needed to trigger the focus out event of other widgets and store the value. Closes #7868 --- tryton/tryton/gui/window/view_form/view/form_gtk/binary.py | 1 + tryton/tryton/gui/window/view_form/view/form_gtk/many2one.py | 2 ++ tryton/tryton/gui/window/view_form/view/form_gtk/widget.py | 4 +++- tryton/tryton/gui/window/view_form/view/list_gtk/widget.py | 1 + tryton/tryton/gui/window/view_form/view/screen_container.py | 1 + 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tryton/tryton/gui/window/view_form/view/form_gtk/binary.py b/tryton/tryton/gui/window/view_form/view/form_gtk/binary.py index 82a798d4da..ff5d3bced2 100644 --- a/tryton/tryton/gui/window/view_form/view/form_gtk/binary.py +++ b/tryton/tryton/gui/window/view_form/view/form_gtk/binary.py @@ -193,6 +193,7 @@ class Binary(BinaryMixin, Widget): return False def sig_icon_press(self, widget, icon_pos, event): + widget.grab_focus() if icon_pos == Gtk.EntryIconPosition.PRIMARY: self.open_() diff --git a/tryton/tryton/gui/window/view_form/view/form_gtk/many2one.py b/tryton/tryton/gui/window/view_form/view/form_gtk/many2one.py index 6a612a2226..6a548ccf75 100644 --- a/tryton/tryton/gui/window/view_form/view/form_gtk/many2one.py +++ b/tryton/tryton/gui/window/view_form/view/form_gtk/many2one.py @@ -183,6 +183,8 @@ class Many2One(Widget): rec_name=self.wid_text.get_text()) def sig_edit(self, entry=None, icon_pos=None, *args): + if entry: + entry.grab_focus() model = self.get_model() if not model or not common.MODELACCESS[model]['read']: return diff --git a/tryton/tryton/gui/window/view_form/view/form_gtk/widget.py b/tryton/tryton/gui/window/view_form/view/form_gtk/widget.py index 47f3a29c2d..31c2e956b6 100644 --- a/tryton/tryton/gui/window/view_form/view/form_gtk/widget.py +++ b/tryton/tryton/gui/window/view_form/view/form_gtk/widget.py @@ -279,7 +279,9 @@ class TranslateMixin: button.connect('clicked', self.translate) return button - def translate(self, *args): + def translate(self, widget=None, *args): + if widget: + widget.grab_focus() self.view.set_value() if self.record.id < 0 or self.record.modified: common.message( diff --git a/tryton/tryton/gui/window/view_form/view/list_gtk/widget.py b/tryton/tryton/gui/window/view_form/view/list_gtk/widget.py index fe151f5c24..443b5d0cfd 100644 --- a/tryton/tryton/gui/window/view_form/view/list_gtk/widget.py +++ b/tryton/tryton/gui/window/view_form/view/list_gtk/widget.py @@ -817,6 +817,7 @@ class M2O(GenericText): editable.set_icon_tooltip_text(pos, tooltip) def icon_press(editable, icon_pos, event): + editable.grab_focus() value = field.get(record) if not model: return diff --git a/tryton/tryton/gui/window/view_form/view/screen_container.py b/tryton/tryton/gui/window/view_form/view/screen_container.py index 300c158440..a92a644e5b 100644 --- a/tryton/tryton/gui/window/view_form/view/screen_container.py +++ b/tryton/tryton/gui/window/view_form/view/screen_container.py @@ -544,6 +544,7 @@ class ScreenContainer(object): GLib.idle_add(keypress) def icon_press(self, widget, icon_pos, event): + widget.grab_focus() if icon_pos == Gtk.EntryIconPosition.PRIMARY: self.search_box(widget) elif icon_pos == Gtk.EntryIconPosition.SECONDARY: