Rely on editing property of renderer to set value
In Python3, the 'remove-widget' is not trigger when the selected row is changed. This makes the attribute editabletree_entry not reliable. Instead we should use the editing property of the renderer and manage the editable reference on the widget (which is a cleaner separation concept). This allows also to remove duplicate code in set_value by calling on_editing_done. issue7936 review46711002
This commit is contained in:
1 parent
257978a01f
commit
c7dfe09cb8
2 files changed
+9
-21
No files matched your search
@@ -115,21 +115,12 @@ class EditableTreeView(TreeView):
|
||||
|
||||
def set_value(self):
|
||||
path, column = self.get_cursor()
|
||||
model = self.get_model()
|
||||
if not path or not column or not column.name:
|
||||
return True
|
||||
record = model.get_value(model.get_iter(path), 0)
|
||||
field = record[column.name]
|
||||
if hasattr(field, 'editabletree_entry'):
|
||||
entry = field.editabletree_entry
|
||||
if isinstance(entry, (Date, Time)):
|
||||
entry.activate()
|
||||
txt = entry.props.value
|
||||
elif isinstance(entry, gtk.Entry):
|
||||
txt = entry.get_text()
|
||||
else:
|
||||
txt = entry.get_active_text()
|
||||
self.on_quit_cell(record, column, txt)
|
||||
for renderer in column.get_cell_renderers():
|
||||
if renderer.props.editing:
|
||||
widget = self.view.get_column_widget(column)
|
||||
self.on_editing_done(widget.editable)
|
||||
return True
|
||||
|
||||
def on_keypressed(self, entry, event):
|
||||
@@ -235,14 +226,6 @@ class EditableTreeView(TreeView):
|
||||
field = record[column.name]
|
||||
if isinstance(entry, gtk.Entry):
|
||||
entry.set_max_length(int(field.attrs.get('size', 0)))
|
||||
# store in the record the entry widget to get the value in
|
||||
# set_value
|
||||
field.editabletree_entry = entry
|
||||
|
||||
def remove_widget(widget):
|
||||
if hasattr(field, 'editabletree_entry'):
|
||||
del field.editabletree_entry
|
||||
entry.connect('remove-widget', remove_widget)
|
||||
record.modified_fields.setdefault(column.name)
|
||||
return False
|
||||
|
||||
|
||||
@@ -170,6 +170,7 @@ class Affix(Cell):
|
||||
|
||||
class GenericText(Cell):
|
||||
align = 0
|
||||
editable = None
|
||||
|
||||
def __init__(self, view, attrs, renderer=None):
|
||||
super(GenericText, self).__init__()
|
||||
@@ -259,6 +260,10 @@ class GenericText(Cell):
|
||||
callback()
|
||||
|
||||
def editing_started(self, cell, editable, path):
|
||||
def remove(editable):
|
||||
self.editable = None
|
||||
self.editable = editable
|
||||
editable.connect('remove-widget', remove)
|
||||
return False
|
||||
|
||||
def _get_record_field(self, path):
|
||||
|
||||
Reference in new issue
Block a user