Changeset 2926
- Timestamp:
- 11/08/07 15:32:09
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c
r2925 r2926 50 50 if (TNY_IS_FOLDER (folder)) { 51 51 tny_folder_add_observer (folder, TNY_FOLDER_OBSERVER (self)); 52 self->fol_obs = g_list_prepend (self->fol_obs, folder); 52 53 g_object_unref (self); 53 54 } … … 59 60 if (TNY_IS_FOLDER_STORE (store)) { 60 61 tny_folder_store_add_observer (store, TNY_FOLDER_STORE_OBSERVER (self)); 62 self->store_obs = g_list_prepend (self->store_obs, store); 61 63 g_object_unref (self); 62 64 } … … 64 66 65 67 static void 66 remove_folder_observer_weak (TnyGtkFolderStoreTreeModel *self, TnyFolder *folder )68 remove_folder_observer_weak (TnyGtkFolderStoreTreeModel *self, TnyFolder *folder, gboolean final) 67 69 { 68 70 if (TNY_IS_FOLDER (folder)) { 69 71 g_object_ref (self); 72 if (!final) 73 self->fol_obs = g_list_remove (self->fol_obs, folder); 70 74 tny_folder_remove_observer (folder, TNY_FOLDER_OBSERVER (self)); 71 75 } … … 73 77 74 78 static void 75 remove_folder_store_observer_weak (TnyGtkFolderStoreTreeModel *self, TnyFolderStore *store )79 remove_folder_store_observer_weak (TnyGtkFolderStoreTreeModel *self, TnyFolderStore *store, gboolean final) 76 80 { 77 81 if (TNY_IS_FOLDER_STORE (store)) { 78 82 g_object_ref (self); 83 if (!final) 84 self->store_obs = g_list_remove (self->store_obs, store); 79 85 tny_folder_store_remove_observer (store, TNY_FOLDER_STORE_OBSERVER (self)); 80 86 } … … 487 493 { 488 494 TnyGtkFolderStoreTreeModel *me = (TnyGtkFolderStoreTreeModel*) object; 495 GList *copy = me->fol_obs; 496 497 while (copy) { 498 remove_folder_observer_weak (me, (TnyFolder *) copy->data, TRUE); 499 copy = g_list_next (copy); 500 } 501 502 copy = me->store_obs; 503 while (copy) { 504 remove_folder_store_observer_weak (me, (TnyFolderStore *) copy->data, TRUE); 505 copy = g_list_next (copy); 506 } 507 508 if (me->fol_obs) 509 g_list_free (me->fol_obs); 510 me->fol_obs = NULL; 511 512 if (me->store_obs) 513 g_list_free (me->store_obs); 514 me->store_obs = NULL; 489 515 490 516 g_mutex_lock (me->iterator_lock); … … 526 552 static GType types[] = { G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT, G_TYPE_OBJECT }; 527 553 554 me->fol_obs = NULL; 555 me->store_obs = NULL; 528 556 me->iterator_lock = g_mutex_new (); 529 557 … … 830 858 if (fol == folder) { 831 859 832 remove_folder_observer_weak (me, TNY_FOLDER (folder) );833 remove_folder_store_observer_weak (me, TNY_FOLDER_STORE (folder) );860 remove_folder_observer_weak (me, TNY_FOLDER (folder), FALSE); 861 remove_folder_store_observer_weak (me, TNY_FOLDER_STORE (folder), FALSE); 834 862 835 863 gtk_tree_store_remove (GTK_TREE_STORE (model), iter); trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.h
r2924 r2926 58 58 { 59 59 GtkTreeStore parent; 60 GList *first ;60 GList *first, *store_obs, *fol_obs; 61 61 GMutex *iterator_lock; 62 62 TnyFolderStoreQuery *query;
