[evolution] I#1965 - Mail: Special folder icon not udpated after change



commit 2688d2e26f67569b5d4a4436837fb59622f5dd82
Author: Milan Crha <mcrha redhat com>
Date:   Fri Oct 7 12:36:28 2022 +0200

    I#1965 - Mail: Special folder icon not udpated after change
    
    Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1965

 src/mail/em-folder-tree-model.c         | 42 +++++++++++++++++++++++++++++++++
 src/mail/em-folder-tree-model.h         |  3 +++
 src/modules/mail/e-mail-shell-backend.c |  8 +++++++
 3 files changed, 53 insertions(+)
---
diff --git a/src/mail/em-folder-tree-model.c b/src/mail/em-folder-tree-model.c
index 81947a7ba9..7b36ab9edc 100644
--- a/src/mail/em-folder-tree-model.c
+++ b/src/mail/em-folder-tree-model.c
@@ -2326,3 +2326,45 @@ em_folder_tree_model_update_row_tweaks (EMFolderTreeModel *model,
        g_free (icon_filename);
        g_free (folder_uri);
 }
+
+void
+em_folder_tree_model_update_folder_icons_for_store (EMFolderTreeModel *model,
+                                                   CamelStore *store)
+{
+       GtkTreeModel *tree_model;
+       GHashTableIter iter;
+       gpointer value;
+       StoreInfo *si;
+
+       g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model));
+       g_return_if_fail (CAMEL_IS_STORE (store));
+
+       si = folder_tree_model_store_index_lookup (model, store);
+       if (!si)
+               return;
+
+       tree_model = GTK_TREE_MODEL (model);
+
+       g_hash_table_iter_init (&iter, si->full_hash);
+
+       while (g_hash_table_iter_next (&iter, NULL, &value)) {
+               GtkTreeRowReference *row = value;
+
+               if (gtk_tree_row_reference_valid (row)) {
+                       gchar *folder_uri = NULL;
+                       GtkTreePath *path;
+                       GtkTreeIter iter;
+
+                       path = gtk_tree_row_reference_get_path (row);
+                       gtk_tree_model_get_iter (tree_model, &iter, path);
+                       gtk_tree_path_free (path);
+
+                       gtk_tree_model_get (tree_model, &iter, COL_STRING_FOLDER_URI, &folder_uri, -1);
+                       if (folder_uri)
+                               em_folder_tree_model_update_folder_icon (model, folder_uri);
+                       g_free (folder_uri);
+               }
+       }
+
+       store_info_unref (si);
+}
diff --git a/src/mail/em-folder-tree-model.h b/src/mail/em-folder-tree-model.h
index aec76ca04f..a0f50956a6 100644
--- a/src/mail/em-folder-tree-model.h
+++ b/src/mail/em-folder-tree-model.h
@@ -180,6 +180,9 @@ void                em_folder_tree_model_user_marked_unread
 void           em_folder_tree_model_update_row_tweaks
                                        (EMFolderTreeModel *model,
                                         GtkTreeIter *iter);
+void           em_folder_tree_model_update_folder_icons_for_store
+                                       (EMFolderTreeModel *model,
+                                        CamelStore *store);
 
 G_END_DECLS
 
diff --git a/src/modules/mail/e-mail-shell-backend.c b/src/modules/mail/e-mail-shell-backend.c
index 40cfec4d03..121e271be7 100644
--- a/src/modules/mail/e-mail-shell-backend.c
+++ b/src/modules/mail/e-mail-shell-backend.c
@@ -870,6 +870,14 @@ mail_shell_backend_changes_committed_cb (EMailConfigWindow *window,
        service = camel_session_ref_service (CAMEL_SESSION (session), uid);
        g_return_if_fail (service != NULL);
 
+       if (CAMEL_IS_STORE (service)) {
+               EMFolderTreeModel *model;
+
+               model = em_folder_tree_model_get_default ();
+               if (model)
+                       em_folder_tree_model_update_folder_icons_for_store (model, CAMEL_STORE (service));
+       }
+
        shell_backend = E_SHELL_BACKEND (mail_shell_backend);
 
        shell = e_shell_backend_get_shell (shell_backend);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]