[evolution/gnome-3-36] I#979 - Undeletable empty item in folder list
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/gnome-3-36] I#979 - Undeletable empty item in folder list
- Date: Thu, 18 Jun 2020 07:56:58 +0000 (UTC)
commit 0d4839da08b171dd27bf336000ce207841c331c6
Author: Milan Crha <mcrha redhat com>
Date: Thu Jun 18 09:54:55 2020 +0200
I#979 - Undeletable empty item in folder list
Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/979
src/mail/em-folder-tree-model.c | 34 +++++++++++++++++++---------------
src/mail/em-folder-tree-model.h | 2 +-
src/mail/em-folder-tree.c | 5 ++---
3 files changed, 22 insertions(+), 19 deletions(-)
---
diff --git a/src/mail/em-folder-tree-model.c b/src/mail/em-folder-tree-model.c
index d43fb1e1c4..0d3e50fedc 100644
--- a/src/mail/em-folder-tree-model.c
+++ b/src/mail/em-folder-tree-model.c
@@ -1385,7 +1385,7 @@ em_folder_tree_model_set_session (EMFolderTreeModel *model,
g_object_notify (G_OBJECT (model), "session");
}
-void
+gboolean
em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
GtkTreeIter *iter,
CamelStore *store,
@@ -1414,18 +1414,18 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
gboolean folder_is_outbox = FALSE;
gchar *uri;
- g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model));
- g_return_if_fail (iter != NULL);
- g_return_if_fail (CAMEL_IS_STORE (store));
- g_return_if_fail (fi != NULL);
+ g_return_val_if_fail (EM_IS_FOLDER_TREE_MODEL (model), FALSE);
+ g_return_val_if_fail (iter != NULL, FALSE);
+ g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
+ g_return_val_if_fail (fi != NULL, FALSE);
si = folder_tree_model_store_index_lookup (model, store);
- g_return_if_fail (si != NULL);
+ g_return_val_if_fail (si != NULL, FALSE);
/* Make sure we don't already know about it. */
if (g_hash_table_lookup (si->full_hash, fi->full_name)) {
store_info_unref (si);
- return;
+ return FALSE;
}
if (!si->loaded)
@@ -1568,7 +1568,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
g_signal_emit (model, signals[LOADED_ROW], 0, path, iter);
g_signal_emit (model, signals[LOADING_ROW], 0, path, iter);
gtk_tree_path_free (path);
- return;
+ return TRUE;
}
if (fi->child) {
@@ -1587,8 +1587,9 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
emitted = TRUE;
}
- em_folder_tree_model_set_folder_info (
- model, &sub, store, fi, fully_loaded);
+ if (!em_folder_tree_model_set_folder_info (model, &sub, store, fi, fully_loaded))
+ gtk_tree_store_remove (tree_store, &sub);
+
fi = fi->next;
} while (fi);
}
@@ -1598,6 +1599,8 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
g_signal_emit (model, signals[LOADED_ROW], 0, path, iter);
gtk_tree_path_free (path);
}
+
+ return TRUE;
}
static void
@@ -1676,8 +1679,9 @@ folder_tree_model_folder_renamed_cb (CamelStore *store,
gtk_tree_path_free (path);
gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &root);
- em_folder_tree_model_set_folder_info (
- EM_FOLDER_TREE_MODEL (model), &iter, store, info, TRUE);
+
+ if (!em_folder_tree_model_set_folder_info (EM_FOLDER_TREE_MODEL (model), &iter, store, info, TRUE))
+ gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
}
static void
@@ -1741,9 +1745,9 @@ folder_tree_model_folder_subscribed_cb (CamelStore *store,
gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent);
- em_folder_tree_model_set_folder_info (
- EM_FOLDER_TREE_MODEL (model), &iter, store, fi,
- (fi->flags & (CAMEL_FOLDER_NOINFERIORS | CAMEL_FOLDER_NOCHILDREN)) != 0);
+ if (!em_folder_tree_model_set_folder_info (EM_FOLDER_TREE_MODEL (model), &iter, store, fi,
+ (fi->flags & (CAMEL_FOLDER_NOINFERIORS | CAMEL_FOLDER_NOCHILDREN)) != 0))
+ gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
}
static void
diff --git a/src/mail/em-folder-tree-model.h b/src/mail/em-folder-tree-model.h
index 1402144e4c..45784278be 100644
--- a/src/mail/em-folder-tree-model.h
+++ b/src/mail/em-folder-tree-model.h
@@ -123,7 +123,7 @@ EMailSession * em_folder_tree_model_get_session
void em_folder_tree_model_set_session
(EMFolderTreeModel *model,
EMailSession *session);
-void em_folder_tree_model_set_folder_info
+gboolean em_folder_tree_model_set_folder_info
(EMFolderTreeModel *model,
GtkTreeIter *iter,
CamelStore *store,
diff --git a/src/mail/em-folder-tree.c b/src/mail/em-folder-tree.c
index 3fca8b16d7..670c6b4b52 100644
--- a/src/mail/em-folder-tree.c
+++ b/src/mail/em-folder-tree.c
@@ -363,9 +363,8 @@ folder_tree_get_folder_info_cb (CamelStore *store,
GTK_TREE_STORE (model),
&iter, &root);
- em_folder_tree_model_set_folder_info (
- EM_FOLDER_TREE_MODEL (model),
- &iter, store, child_info, TRUE);
+ if (!em_folder_tree_model_set_folder_info (EM_FOLDER_TREE_MODEL (model),
&iter, store, child_info, TRUE))
+ gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
}
child_info = child_info->next;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]