Fix concurrency conflict on DND for issue1991

This commit is contained in:
Cédric Krier committed 2011-05-10 15:13:49 +02:00
1 parent abd92a07e1
commit 56f12033dc
2 files changed
+16 -1

No files matched your search

@@ -228,6 +228,12 @@ class Group(SignalEvent, list):
self.append(record)
else:
self.insert(position, record)
for record_rm in self.record_removed:
if record_rm.id == record.id:
self.record_removed.remove(record)
for record_del in self.record_deleted:
if record_del.id == record.id:
self.record_deleted.remove(record)
self.current_idx = position
if modified:
record.modified_fields.setdefault('id')
+10 -1
View File
@@ -84,9 +84,18 @@ class AdaptModelGroup(gtk.GenericTreeModel):
group = record_pos.group
pos = group.index(record_pos) + offset
if group is not record.group:
prev_group = record.group
record.group.remove(record, remove=True, force_remove=True)
# Don't remove record from previous group
# as the new parent will change the parent
# This prevents concurrency conflict
record.group.record_removed.remove(record)
group.add(record)
record.modified_fields.setdefault(record.parent_name or 'id')
if not record.parent_name:
record.modified_fields.setdefault(prev_group.parent_name)
record.value[prev_group.parent_name] = False
else:
record.modified_fields.setdefault(record.parent_name)
group.move(record, pos)
def move_before(self, record, path):