changeset 3aed04dfbd0c in tryton:5.6 details: https://hg.tryton.org/tryton?cmd=changeset;node=3aed04dfbd0c description: Use editable path to update editable on display
The current record is not necessary linked to the editable. For example when a new record is added, the current record is changed before the editing is done. Also the CellRendererCombo does not emit remove-widget when focus is changed which prevent to clear the editable variables. issue9618 issue9266 review314471002 (grafted from 07b4d22509fcbabb19118233e1cacfb4f15d5f3a) diffstat: tryton/gui/window/view_form/view/list.py | 2 +- tryton/gui/window/view_form/view/list_gtk/widget.py | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diffs (70 lines): diff -r 76a9fa354426 -r 3aed04dfbd0c tryton/gui/window/view_form/view/list.py --- a/tryton/gui/window/view_form/view/list.py Sun Oct 18 15:58:43 2020 +0200 +++ b/tryton/gui/window/view_form/view/list.py Wed Oct 21 23:21:26 2020 +0200 @@ -1045,7 +1045,7 @@ if not name: continue widget = self.get_column_widget(column) - widget.set_editable(current_record) + widget.set_editable() if decoder.decode(widget.attrs.get('tree_invisible', '0')): column.set_visible(False) elif name == self.screen.exclude_field: diff -r 76a9fa354426 -r 3aed04dfbd0c tryton/gui/window/view_form/view/list_gtk/widget.py --- a/tryton/gui/window/view_form/view/list_gtk/widget.py Sun Oct 18 15:58:43 2020 +0200 +++ b/tryton/gui/window/view_form/view/list_gtk/widget.py Wed Oct 21 23:21:26 2020 +0200 @@ -149,7 +149,7 @@ cell.set_property('foreground', foreground) cell.set_property('foreground-set', bool(foreground)) - def set_editable(self, record): + def set_editable(self): pass @@ -294,15 +294,18 @@ if callback: callback() - def set_editable(self, record): - if not record or not self.editable: + def set_editable(self): + if not self.editable: return + record, field = self._get_record_field_from_path(self.editable_path) 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.editable = editable + self.editable_path = path editable.connect('remove-widget', remove) return False @@ -977,10 +980,10 @@ if callback: callback() - def set_editable(self, record): - if not record or not self.editable: + def set_editable(self): + if not self.editable: return - field = record[self.attrs['name']] + record, field = self._get_record_field_from_path(self.editable_path) value = self.get_value(record, field) self.update_selection(record, field) self.set_popdown_value(self.editable, value) @@ -988,6 +991,10 @@ 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')) selection_shortcuts(editable)