aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-folder-tree-model.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2009-05-30 13:07:39 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-06-01 21:00:01 +0800
commitaefa76d0b3a1497f3b7fed75070733b6848127e2 (patch)
tree3d8d8690a4be9e387b819fcb5d4c4260d92421ae /mail/em-folder-tree-model.c
parent878989677a3c8d0a4e3b7c26757a2c6be6ea0d3d (diff)
downloadgsoc2013-evolution-aefa76d0b3a1497f3b7fed75070733b6848127e2.tar
gsoc2013-evolution-aefa76d0b3a1497f3b7fed75070733b6848127e2.tar.gz
gsoc2013-evolution-aefa76d0b3a1497f3b7fed75070733b6848127e2.tar.bz2
gsoc2013-evolution-aefa76d0b3a1497f3b7fed75070733b6848127e2.tar.lz
gsoc2013-evolution-aefa76d0b3a1497f3b7fed75070733b6848127e2.tar.xz
gsoc2013-evolution-aefa76d0b3a1497f3b7fed75070733b6848127e2.tar.zst
gsoc2013-evolution-aefa76d0b3a1497f3b7fed75070733b6848127e2.zip
Bug 323037 – Folder emblem to show new mail arrival
Diffstat (limited to 'mail/em-folder-tree-model.c')
-rw-r--r--mail/em-folder-tree-model.c51
1 files changed, 36 insertions, 15 deletions
diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c
index 659eaa7bff..b1ee7eff2d 100644
--- a/mail/em-folder-tree-model.c
+++ b/mail/em-folder-tree-model.c
@@ -70,19 +70,6 @@ struct _EMFolderTreeModelPrivate {
gpointer shell_backend; /* weak pointer */
};
-static GType col_types[] = {
- G_TYPE_STRING, /* display name */
- G_TYPE_POINTER, /* store object */
- G_TYPE_STRING, /* full name */
- G_TYPE_STRING, /* icon name */
- G_TYPE_STRING, /* uri */
- G_TYPE_UINT, /* unread count */
- G_TYPE_UINT, /* flags */
- G_TYPE_BOOLEAN, /* is a store node */
- G_TYPE_BOOLEAN, /* is a folder node */
- G_TYPE_BOOLEAN, /* has not-yet-loaded subfolders */
-};
-
static void account_changed (EAccountList *accounts, EAccount *account, gpointer user_data);
static void account_removed (EAccountList *accounts, EAccount *account, gpointer user_data);
@@ -365,6 +352,20 @@ folder_tree_model_init (EMFolderTreeModel *model)
GHashTable *store_hash;
GHashTable *uri_hash;
+ GType col_types[] = {
+ G_TYPE_STRING, /* display name */
+ G_TYPE_POINTER, /* store object */
+ G_TYPE_STRING, /* full name */
+ G_TYPE_STRING, /* icon name */
+ G_TYPE_STRING, /* uri */
+ G_TYPE_UINT, /* unread count */
+ G_TYPE_UINT, /* flags */
+ G_TYPE_BOOLEAN, /* is a store node */
+ G_TYPE_BOOLEAN, /* is a folder node */
+ G_TYPE_BOOLEAN, /* has not-yet-loaded subfolders */
+ G_TYPE_UINT /* last known unread count */
+ };
+
store_hash = g_hash_table_new_full (
g_direct_hash, g_direct_equal,
(GDestroyNotify) NULL,
@@ -668,10 +669,13 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model, GtkTreeIter *ite
COL_BOOL_IS_STORE, FALSE,
COL_BOOL_IS_FOLDER, TRUE,
COL_BOOL_LOAD_SUBDIRS, load,
+ COL_UINT_UNREAD_LAST_SEL, 0,
-1);
if (unread != ~0)
- gtk_tree_store_set (tree_store, iter, COL_UINT_UNREAD, unread, -1);
+ gtk_tree_store_set (
+ tree_store, iter, COL_UINT_UNREAD, unread,
+ COL_UINT_UNREAD_LAST_SEL, unread, -1);
if (load) {
/* create a placeholder node for our subfolders... */
@@ -687,6 +691,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model, GtkTreeIter *ite
COL_BOOL_IS_FOLDER, FALSE,
COL_STRING_URI, NULL,
COL_UINT_UNREAD, 0,
+ COL_UINT_UNREAD_LAST_SEL, 0,
-1);
path = gtk_tree_model_get_path ((GtkTreeModel *) model, iter);
@@ -994,6 +999,7 @@ em_folder_tree_model_add_store (EMFolderTreeModel *model, CamelStore *store, con
COL_BOOL_IS_STORE, FALSE,
COL_STRING_URI, NULL,
COL_UINT_UNREAD, 0,
+ COL_UINT_UNREAD_LAST_SEL, 0,
-1);
g_free (uri);
@@ -1448,6 +1454,8 @@ em_folder_tree_model_set_unread_count (EMFolderTreeModel *model, CamelStore *sto
GtkTreeRowReference *row;
GtkTreePath *tree_path;
GtkTreeIter iter;
+ guint old_unread = 0;
+ gchar *uri, *sel_uri;
g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model));
g_return_if_fail (CAMEL_IS_STORE (store));
@@ -1476,7 +1484,20 @@ em_folder_tree_model_set_unread_count (EMFolderTreeModel *model, CamelStore *sto
gtk_tree_path_free (tree_path);
- gtk_tree_store_set ((GtkTreeStore *) model, &iter, COL_UINT_UNREAD, unread, -1);
+ sel_uri = em_folder_tree_model_get_selected (model);
+ gtk_tree_model_get (
+ GTK_TREE_MODEL (model), &iter,
+ COL_UINT_UNREAD_LAST_SEL, &old_unread,
+ COL_STRING_URI, &uri, -1);
+ if (!(g_strcmp0 (sel_uri, uri) != 0 && unread > old_unread))
+ old_unread = unread;
+ gtk_tree_store_set (
+ GTK_TREE_STORE (model), &iter,
+ COL_UINT_UNREAD, unread,
+ COL_UINT_UNREAD_LAST_SEL, old_unread, -1);
+
+ g_free (uri);
+ g_free (sel_uri);
/* May be this is from where we should propagate unread count to parents etc. */
emft_model_unread_count_changed (GTK_TREE_MODEL (model), &iter);