From 56f12033dcc48e21671f45c5d3cd2b1f8f0f26e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 10 May 2011 15:13:49 +0200 Subject: [PATCH] Fix concurrency conflict on DND for issue1991 --- tryton/gui/window/view_form/model/group.py | 6 ++++++ tryton/gui/window/view_form/view/list.py | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index e2b706be55..efe1f478c0 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -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') diff --git a/tryton/gui/window/view_form/view/list.py b/tryton/gui/window/view_form/view/list.py index 3b70c3c502..b2b3a3738a 100644 --- a/tryton/gui/window/view_form/view/list.py +++ b/tryton/gui/window/view_form/view/list.py @@ -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):