Reviewers: ,
Please review this at http://codereview.tryton.org/262001/
Affected files:
M tryton/gui/window/view_form/model/field.py
M tryton/gui/window/view_form/model/group.py
M tryton/gui/window/view_form/model/record.py
M tryton/gui/window/view_form/screen/screen.py
Index: tryton/gui/window/view_form/model/field.py
===================================================================
--- a/tryton/gui/window/view_form/model/field.py
+++ b/tryton/gui/window/view_form/model/field.py
@@ -546,8 +546,8 @@
group = record.value.get(self.name)
fields = {}
if group is not None:
- group.signal_unconnect(group)
- fields = group.fields
+ fields = group.fields.copy()
+ group.destroy()
elif record.model_name == self.attrs['relation']:
fields = record.group.fields
parent_name = self.attrs.get('relation_field', '')
@@ -582,8 +582,8 @@
group = record.value.get(self.name)
fields = {}
if group is not None:
- group.signal_unconnect(group)
- fields = group.fields
+ fields = group.fields.copy()
+ group.destroy()
elif record.model_name == self.attrs['relation']:
fields = record.group.fields
if fields:
@@ -733,8 +733,8 @@
group = record.value.get(self.name)
fields = {}
if group is not None:
- group.signal_unconnect(group)
- fields = group.fields
+ fields = group.fields.copy()
+ group.destroy()
elif record.model_name == self.attrs['relation']:
fields = record.group.fields
parent_name = self.attrs.get('relation_field', '')
Index: tryton/gui/window/view_form/model/group.py
===================================================================
--- a/tryton/gui/window/view_form/model/group.py
+++ b/tryton/gui/window/view_form/model/group.py
@@ -109,7 +109,7 @@
if not self.lock_signal:
for record in self[:]:
self.signal('group-list-changed', ('record-removed',
record))
- self.pop(0)
+ self.pop(0).destroy()
if not self.lock_signal:
self.signal('group-list-changed', ('group-cleared',))
self.__id2record = {}
@@ -399,14 +399,9 @@
del self.__id2record[old_id]
def destroy(self):
+ self.clear()
super(Group, self).destroy()
self.parent = None
- self.fields = {}
- self.record_deleted, self.record_removed = [], []
- self.__id2record = None
- for record in self:
- record.destroy()
- self[:] = []
def get_by_path(self, path):
'return record by path'
Index: tryton/gui/window/view_form/model/record.py
===================================================================
--- a/tryton/gui/window/view_form/model/record.py
+++ b/tryton/gui/window/view_form/model/record.py
@@ -586,11 +586,11 @@
return self.attachment_count
def destroy(self):
- super(Record, self).destroy()
- self.group = None
for v in self.value.itervalues():
if hasattr(v, 'destroy'):
v.destroy()
+ super(Record, self).destroy()
+ self.group = None
self.value = None
self.next = None
POOL[self.model_name].remove(self)
Index: tryton/gui/window/view_form/screen/screen.py
===================================================================
--- a/tryton/gui/window/view_form/screen/screen.py
+++ b/tryton/gui/window/view_form/screen/screen.py
@@ -238,6 +238,9 @@
self.display()
def __get_current_record(self):
+ if (self.__current_record is not None
+ and self.__current_record.group is None):
+ self.__current_record = None
return self.__current_record
def __set_current_record(self, record):
--
[email protected] mailing list