From d9a3bd550f45df85d896a695596e57bb57b1177d Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 14 Nov 2003 17:29:06 +0000 Subject: Only set OK to sensitive if the selected node is not a store node. 2003-11-14 Jeffrey Stedfast * em-folder-selection.c (folder_selected_cb): Only set OK to sensitive if the selected node is not a store node. * em-folder-tree-model.c: Moved the store_hash and uri_hash from EMFolderTreePrivate into here instead. * em-folder-tree.c: Updated for above changes. svn path=/trunk/; revision=23355 --- mail/em-folder-tree-model.c | 81 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) (limited to 'mail/em-folder-tree-model.c') diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c index 786ac94d68..1ef56ae395 100644 --- a/mail/em-folder-tree-model.c +++ b/mail/em-folder-tree-model.c @@ -184,12 +184,60 @@ em_folder_tree_model_class_init (EMFolderTreeModelClass *klass) static void em_folder_tree_model_init (EMFolderTreeModel *model) { - ; + model->store_hash = g_hash_table_new (g_direct_hash, g_direct_equal); + model->uri_hash = g_hash_table_new (g_str_hash, g_str_equal); +} + +static void +path_hash_free (gpointer key, gpointer value, gpointer user_data) +{ + g_free (key); + gtk_tree_row_reference_free (value); +} + +static void +store_info_free (struct _EMFolderTreeModelStoreInfo *si) +{ + camel_object_remove_event (si->store, si->created_id); + camel_object_remove_event (si->store, si->deleted_id); + camel_object_remove_event (si->store, si->renamed_id); + camel_object_remove_event (si->store, si->subscribed_id); + camel_object_remove_event (si->store, si->unsubscribed_id); + + g_free (si->display_name); + camel_object_unref (si->store); + gtk_tree_row_reference_free (si->row); + g_hash_table_foreach (si->path_hash, path_hash_free, NULL); + g_free (si); } +static void +store_hash_free (gpointer key, gpointer value, gpointer user_data) +{ + struct _EMFolderTreeModelStoreInfo *si = value; + + store_info_free (si); +} + +static void +uri_hash_free (gpointer key, gpointer value, gpointer user_data) +{ + g_free (key); + gtk_tree_row_reference_free (value); +} + + static void em_folder_tree_model_finalize (GObject *obj) { + EMFolderTreeModel *model = (EMFolderTreeModel *) obj; + + g_hash_table_foreach (model->store_hash, store_hash_free, NULL); + g_hash_table_destroy (model->store_hash); + + g_hash_table_foreach (model->uri_hash, uri_hash_free, NULL); + g_hash_table_destroy (model->uri_hash); + G_OBJECT_CLASS (parent_class)->finalize (obj); } @@ -282,3 +330,34 @@ em_folder_tree_model_new (int n_columns, GType *types) return model; } + + +void +em_folder_tree_model_remove_uri (EMFolderTreeModel *model, const char *uri) +{ + GtkTreeRowReference *row; + + g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model)); + g_return_if_fail (uri != NULL); + + if ((row = g_hash_table_lookup (model->uri_hash, uri))) { + g_hash_table_remove (model->uri_hash, uri); + gtk_tree_row_reference_free (row); + } +} + + +void +em_folder_tree_model_remove_store_info (EMFolderTreeModel *model, CamelStore *store) +{ + struct _EMFolderTreeModelStoreInfo *si; + + g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model)); + g_return_if_fail (CAMEL_IS_STORE (store)); + + if (!(si = g_hash_table_lookup (model->store_hash, store))) + return; + + g_hash_table_remove (model->store_hash, si->store); + store_info_free (si); +} -- cgit