4340: Error when adding source reference
svn: r16111
This commit is contained in:
parent
02db3c69af
commit
11411b4885
@ -66,7 +66,7 @@ class BackRefList(EmbeddedList):
|
|||||||
EmbeddedList.__init__(self, dbstate, uistate, track,
|
EmbeddedList.__init__(self, dbstate, uistate, track,
|
||||||
_('_References'), refmodel)
|
_('_References'), refmodel)
|
||||||
self._callback = callback
|
self._callback = callback
|
||||||
self.model.connect('row-inserted', self.update_label)
|
self.connectid = self.model.connect('row-inserted', self.update_label)
|
||||||
self.track_ref_for_deletion("model")
|
self.track_ref_for_deletion("model")
|
||||||
|
|
||||||
def update_label(self, *obj):
|
def update_label(self, *obj):
|
||||||
@ -78,8 +78,8 @@ class BackRefList(EmbeddedList):
|
|||||||
def right_click(self, obj, event):
|
def right_click(self, obj, event):
|
||||||
return
|
return
|
||||||
|
|
||||||
def close(self):
|
def _cleanup_local_connects(self):
|
||||||
self.model.close()
|
self.model.disconnect(self.connectid)
|
||||||
|
|
||||||
def is_empty(self):
|
def is_empty(self):
|
||||||
return self.model.count == 0
|
return self.model.count == 0
|
||||||
|
@ -54,10 +54,18 @@ class BackRefModel(gtk.ListStore):
|
|||||||
self.count = 0
|
self.count = 0
|
||||||
self.idle = gobject.idle_add(self.load_model().next)
|
self.idle = gobject.idle_add(self.load_model().next)
|
||||||
|
|
||||||
def close(self):
|
def destroy(self):
|
||||||
gobject.source_remove(self.idle)
|
gobject.source_remove(self.idle)
|
||||||
|
|
||||||
def load_model(self):
|
def load_model(self):
|
||||||
|
"""
|
||||||
|
Objects can have very large backreferences. To avoid blocking the
|
||||||
|
interface up to the moment that the model is created, this method is
|
||||||
|
called via gobject.idle_add.
|
||||||
|
WARNING: a consequence of above is that loading can still be happening
|
||||||
|
while the GUI using this model is no longer used. Disconnect any
|
||||||
|
methods before closing the GUI.
|
||||||
|
"""
|
||||||
self.count = 0
|
self.count = 0
|
||||||
for ref in self.sref_list:
|
for ref in self.sref_list:
|
||||||
self.count += 1
|
self.count += 1
|
||||||
|
@ -178,6 +178,7 @@ class EditPrimary(ManagedWindow.ManagedWindow, DbGUIElement):
|
|||||||
def _do_close(self, *obj):
|
def _do_close(self, *obj):
|
||||||
self._cleanup_db_connects()
|
self._cleanup_db_connects()
|
||||||
self.dbstate.disconnect(self.dbstate_connect_key)
|
self.dbstate.disconnect(self.dbstate_connect_key)
|
||||||
|
self._cleanup_connects()
|
||||||
self._cleanup_on_exit()
|
self._cleanup_on_exit()
|
||||||
self.get_from_handle = None
|
self.get_from_handle = None
|
||||||
self.get_from_gramps_id = None
|
self.get_from_gramps_id = None
|
||||||
@ -198,6 +199,23 @@ class EditPrimary(ManagedWindow.ManagedWindow, DbGUIElement):
|
|||||||
for tab in self.__tabs:
|
for tab in self.__tabs:
|
||||||
if hasattr(tab, 'callman'):
|
if hasattr(tab, 'callman'):
|
||||||
tab._cleanup_callbacks()
|
tab._cleanup_callbacks()
|
||||||
|
|
||||||
|
def _cleanup_connects(self):
|
||||||
|
"""
|
||||||
|
Connects to interface elements to things outside the element should be
|
||||||
|
removed before destroying the interface
|
||||||
|
"""
|
||||||
|
self._cleanup_local_connects()
|
||||||
|
for tab in [tab for tab in self.__tabs if hasattr(tab, '_cleanup_local_connects')]:
|
||||||
|
tab._cleanup_local_connects()
|
||||||
|
|
||||||
|
def _cleanup_local_connects(self):
|
||||||
|
"""
|
||||||
|
Connects to interface elements to things outside the element should be
|
||||||
|
removed before destroying the interface. This methods cleans connects
|
||||||
|
of the main interface, not of the displaytabs.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
def check_for_close(self, handles):
|
def check_for_close(self, handles):
|
||||||
"""
|
"""
|
||||||
|
@ -223,6 +223,7 @@ class EditReference(ManagedWindow.ManagedWindow, DbGUIElement):
|
|||||||
|
|
||||||
def close(self,*obj):
|
def close(self,*obj):
|
||||||
self._cleanup_db_connects()
|
self._cleanup_db_connects()
|
||||||
|
self._cleanup_connects()
|
||||||
ManagedWindow.ManagedWindow.close(self)
|
ManagedWindow.ManagedWindow.close(self)
|
||||||
self._cleanup_on_exit()
|
self._cleanup_on_exit()
|
||||||
|
|
||||||
@ -237,3 +238,20 @@ class EditReference(ManagedWindow.ManagedWindow, DbGUIElement):
|
|||||||
self._cleanup_callbacks()
|
self._cleanup_callbacks()
|
||||||
for tab in [tab for tab in self.__tabs if hasattr(tab, 'callman')]:
|
for tab in [tab for tab in self.__tabs if hasattr(tab, 'callman')]:
|
||||||
tab._cleanup_callbacks()
|
tab._cleanup_callbacks()
|
||||||
|
|
||||||
|
def _cleanup_connects(self):
|
||||||
|
"""
|
||||||
|
Connects to interface elements to things outside the element should be
|
||||||
|
removed before destroying the interface
|
||||||
|
"""
|
||||||
|
self._cleanup_local_connects()
|
||||||
|
for tab in [tab for tab in self.__tabs if hasattr(tab, '_cleanup_local_connects')]:
|
||||||
|
tab._cleanup_local_connects()
|
||||||
|
|
||||||
|
def _cleanup_local_connects(self):
|
||||||
|
"""
|
||||||
|
Connects to interface elements to things outside the element should be
|
||||||
|
removed before destroying the interface. This methods cleans connects
|
||||||
|
of the main interface, not of the displaytabs.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
@ -142,6 +142,7 @@ class EditSecondary(ManagedWindow.ManagedWindow, DbGUIElement):
|
|||||||
|
|
||||||
def close(self, *obj):
|
def close(self, *obj):
|
||||||
self._cleanup_db_connects()
|
self._cleanup_db_connects()
|
||||||
|
self._cleanup_connects()
|
||||||
ManagedWindow.ManagedWindow.close(self)
|
ManagedWindow.ManagedWindow.close(self)
|
||||||
self._cleanup_on_exit()
|
self._cleanup_on_exit()
|
||||||
|
|
||||||
@ -156,3 +157,20 @@ class EditSecondary(ManagedWindow.ManagedWindow, DbGUIElement):
|
|||||||
self._cleanup_callbacks()
|
self._cleanup_callbacks()
|
||||||
for tab in [tab for tab in self.__tabs if hasattr(tab, 'callman')]:
|
for tab in [tab for tab in self.__tabs if hasattr(tab, 'callman')]:
|
||||||
tab._cleanup_callbacks()
|
tab._cleanup_callbacks()
|
||||||
|
|
||||||
|
def _cleanup_connects(self):
|
||||||
|
"""
|
||||||
|
Connects to interface elements to things outside the element should be
|
||||||
|
removed before destroying the interface
|
||||||
|
"""
|
||||||
|
self._cleanup_local_connects()
|
||||||
|
for tab in [tab for tab in self.__tabs if hasattr(tab, '_cleanup_local_connects')]:
|
||||||
|
tab._cleanup_local_connects()
|
||||||
|
|
||||||
|
def _cleanup_local_connects(self):
|
||||||
|
"""
|
||||||
|
Connects to interface elements to things outside the element should be
|
||||||
|
removed before destroying the interface. This methods cleans connects
|
||||||
|
of the main interface, not of the displaytabs.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
Loading…
Reference in New Issue
Block a user