From 47d5ddd05759815a8a11d4083298e1b81bf02163 Mon Sep 17 00:00:00 2001 From: 2 Date: Fri, 12 Oct 2001 22:27:56 +0000 Subject: Unhook from all events before removing folder. 2001-10-12 * camel-vee-folder.c (camel_vee_folder_remove_folder): Unhook from all events before removing folder. (camel_vee_folder_add_folder): Hook onto delete event. (camel_vee_folder_finalise): Unhook from deleted event for suibfolder. (subfolder_deleted): When the folder is deleted, remove it from the vfolder automagically. svn path=/trunk/; revision=13639 --- camel/ChangeLog | 9 +++++++++ camel/camel-vee-folder.c | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) (limited to 'camel') diff --git a/camel/ChangeLog b/camel/ChangeLog index d4bb72ea95..22326dda8f 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,12 @@ +2001-10-12 + + * camel-vee-folder.c (camel_vee_folder_remove_folder): Unhook from + all events before removing folder. + (camel_vee_folder_add_folder): Hook onto delete event. + (camel_vee_folder_finalise): Unhook from deleted event for suibfolder. + (subfolder_deleted): When the folder is deleted, remove it from + the vfolder automagically. + 2001-10-11 * camel-vee-folder.c (vee_search_by_uids): convert the uids list diff --git a/camel/camel-vee-folder.c b/camel/camel-vee-folder.c index 81a38ae7b5..26f724ab56 100644 --- a/camel/camel-vee-folder.c +++ b/camel/camel-vee-folder.c @@ -72,7 +72,7 @@ static void vee_folder_remove_folder(CamelVeeFolder *vf, CamelFolder *source); static void message_changed(CamelFolder *f, const char *uid, CamelVeeFolder *vf); static void folder_changed(CamelFolder *sub, CamelFolderChangeInfo *changes, CamelVeeFolder *vf); - +static void subfolder_deleted(CamelFolder *f, void *event_data, CamelVeeFolder *vf); static void folder_changed_remove_uid(CamelFolder *sub, const char *uid, const char hash[8], int keep, CamelVeeFolder *vf); @@ -176,6 +176,7 @@ camel_vee_folder_finalise (CamelObject *obj) if (vf != folder_unmatched) { camel_object_unhook_event((CamelObject *)f, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf); camel_object_unhook_event((CamelObject *)f, "message_changed", (CamelObjectEventHookFunc) message_changed, vf); + camel_object_unhook_event((CamelObject *)f, "deleted", (CamelObjectEventHookFunc) subfolder_deleted, vf); /* this updates the vfolder */ if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0) vee_folder_remove_folder(vf, f); @@ -354,6 +355,7 @@ camel_vee_folder_add_folder(CamelVeeFolder *vf, CamelFolder *sub) camel_object_hook_event((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc)folder_changed, vf); camel_object_hook_event((CamelObject *)sub, "message_changed", (CamelObjectEventHookFunc)message_changed, vf); + camel_object_hook_event((CamelObject *)sub, "deleted", (CamelObjectEventHookFunc)subfolder_deleted, vf); vee_folder_build_folder(vf, sub, NULL); } @@ -391,6 +393,10 @@ camel_vee_folder_remove_folder(CamelVeeFolder *vf, CamelFolder *sub) vee_folder_remove_folder(vf, sub); + camel_object_unhook_event((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf); + camel_object_unhook_event((CamelObject *)sub, "message_changed", (CamelObjectEventHookFunc) message_changed, vf); + camel_object_unhook_event((CamelObject *)sub, "deleted", (CamelObjectEventHookFunc) subfolder_deleted, vf); + camel_object_unref((CamelObject *)sub); } @@ -1333,3 +1339,10 @@ message_changed(CamelFolder *f, const char *uid, CamelVeeFolder *vf) folder_changed(f, changes, vf); camel_folder_change_info_free(changes); } + +/* track vanishing folders */ +static void +subfolder_deleted(CamelFolder *f, void *event_data, CamelVeeFolder *vf) +{ + camel_vee_folder_remove_folder(vf, f); +} -- cgit v1.2.3