138 lines
4.8 KiB
Diff
138 lines
4.8 KiB
Diff
From c72c70e1b3eb9142e98b73ac06a38fedda7fb7d2 Mon Sep 17 00:00:00 2001
|
|
From: Milan Crha <mcrha@redhat.com>
|
|
Date: Thu, 18 Jun 2020 09:54:55 +0200
|
|
Subject: [PATCH 5/5] 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 39871c6f1f..b4eab4f9f8 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;
|
|
--
|
|
2.27.0
|
|
|