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:
1 parent
7e545e6df4
commit
d81eeff5c6
3 files changed
+32
-6
No files matched your search
@@ -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]
|
||||
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user