changeset 6567de0b088b in tryton:5.0 details: https://hg.tryton.org/tryton?cmd=changeset;node=6567de0b088b description: Store record and field instead of path when editing is started
The path can not more be valid or pointing to the proper record if the treeview model is modified during the edition. issue9765 review294841002 (grafted from 445bee75c18715f87b35f9e7f20f08d053e2514b) diffstat: tryton/gui/window/view_form/view/list_gtk/widget.py | 19 ++++++++++--------- 1 files changed, 10 insertions(+), 9 deletions(-) diffs (51 lines): diff -r ffa01a5fda7b -r 6567de0b088b tryton/gui/window/view_form/view/list_gtk/widget.py --- a/tryton/gui/window/view_form/view/list_gtk/widget.py Wed Oct 21 23:21:26 2020 +0200 +++ b/tryton/gui/window/view_form/view/list_gtk/widget.py Wed Oct 28 23:59:06 2020 +0100 @@ -176,6 +176,7 @@ class GenericText(Cell): align = 0 editable = None + editing = None def __init__(self, view, attrs, renderer=None): super(GenericText, self).__init__() @@ -265,18 +266,20 @@ callback() def set_editable(self): - if not self.editable: + if not self.editable or not self.editing: return - store = self.view.treeview.get_model() - record = store.get_value(store.get_iter(self.editable_path), 0) + record, field = self.editing self.editable.set_text(self.get_textual_value(record)) def editing_started(self, cell, editable, path): def remove(editable): self.editable = None - self.editable_path = None + self.editing = None self.editable = editable - self.editable_path = path + store = self.view.treeview.get_model() + record = store.get_value(store.get_iter(path), 0) + field = record[self.attrs['name']] + self.editing = record, field editable.connect('remove-widget', remove) return False @@ -845,11 +848,9 @@ callback() def set_editable(self): - if not self.editable: + if not self.editable and not self.editing: return - store = self.view.treeview.get_model() - record = store.get_value(store.get_iter(self.editable_path), 0) - field = record[self.attrs['name']] + record, field = self.editing value = field.get(record) self.update_selection(record, field) self.set_popdown_value(self.editable, value)