changeset 725a9a58bf73 in tryton:5.4
details: https://hg.tryton.org/tryton?cmd=changeset;node=725a9a58bf73
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 1a8da8f7ec03 -r 725a9a58bf73 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 1a8da8f7ec03 -r 725a9a58bf73 
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
@@ -148,7 +148,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'))
 
         def set_value(*a):
             return self.set_value(editable, record, field)

Reply via email to