Stop the edition of Selection fields in editable Treeviews on focus-out

Closes #12308
(grafted from 9c81c15ec5164ed8e1e3bda05dc932c1430f65d7)

--HG--
branch : 6.0
This commit is contained in:
Nicolas Évrard committed 2023-06-05 19:09:46 +02:00
1 parent 7e545e6df4
commit d81eeff5c6
3 files changed
+32 -6

No files matched your search

+3 -2
View File
@@ -9,7 +9,8 @@ from .common import (
RPCProgress, RPCExecute, RPCContextReload, Tooltips, COLOR_SCHEMES,
filter_domain, timezoned_date, untimezoned_date, humanize, get_hostname,
get_port, resize_pixbuf, data2pixbuf, apply_label_attributes, ellipsize,
get_align, date_format, idle_add, check_version, TRYTON_ICON, setup_window)
get_align, date_format, idle_add, check_version, TRYTON_ICON, setup_window,
get_gdk_backend)
from .domain_inversion import (
domain_inversion, eval_domain, localize_domain, merge, inverse_leaf,
filter_leaf, prepare_reference_domain, extract_reference_models, concat,
@@ -30,4 +31,4 @@ __all__ = [
localize_domain, merge, inverse_leaf, filter_leaf,
prepare_reference_domain, extract_reference_models, concat, simplify,
unique_value, EvalEnvironment, timedelta, check_version, TRYTON_ICON,
setup_window]
setup_window, get_gdk_backend]
+14
View File
@@ -1339,3 +1339,17 @@ def idle_add(func):
def setup_window(window):
if sys.platform == 'darwin':
window.set_mnemonic_modifier(Gdk.ModifierType.CONTROL_MASK)
def get_gdk_backend():
if sys.platform == 'darwin':
return 'macos'
elif sys.platform == 'win32':
return 'win32'
else:
dm = Gdk.DisplayManager.get()
default = dm.props.default_display
dm_class_name = default.__class__.__name__.lower()
if 'wayland' in dm_class_name:
return 'wayland'
return 'x11'
@@ -14,6 +14,7 @@ from tryton.gui.window.win_form import WinForm
from tryton.gui.window.view_form.screen import Screen
from tryton.common import file_selection, file_open, file_write
import tryton.common as common
from tryton.common import get_gdk_backend
from tryton.common.cellrendererbutton import CellRendererButton
from tryton.common.cellrenderertext import CellRendererText, \
CellRendererTextCompletion
@@ -1076,10 +1077,12 @@ class Selection(GenericText, SelectionMixin, PopdownMixin):
def editing_started(self, cell, editable, path):
super(Selection, self).editing_started(cell, editable, path)
record, field = self._get_record_field_from_path(path)
# Combobox does not emit remove-widget when focus is changed
self.editable.connect(
'editing-done',
lambda *a: self.editable.emit('remove-widget'))
gdk_backend = get_gdk_backend()
if gdk_backend == 'x11':
# Combobox does not emit remove-widget when focus is changed
self.editable.connect(
'editing-done',
lambda *a: self.editable.emit('remove-widget'))
selection_shortcuts(editable)
@@ -1087,6 +1090,14 @@ class Selection(GenericText, SelectionMixin, PopdownMixin):
return self.set_value(editable, record, field)
editable.get_child().connect('activate', set_value)
editable.get_child().connect('focus-out-event', set_value)
if gdk_backend != 'x11':
# For non X11 backend we can rely the focus-out-event to be sent
# correctly
def remove_entry(entry, event):
editable.emit('editing-done')
editable.emit('remove-widget')
editable.get_child().connect('focus-out-event', remove_entry)
editable.connect('changed', set_value)
self.update_selection(record, field)