From de681d39eb1980215c71de9b338e24d0031c0d27 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Sat, 30 May 2009 01:07:39 -0400 Subject: Bug 323037 – Folder emblem to show new mail arrival MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mail/em-folder-tree-model.c | 51 ++++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 15 deletions(-) (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 a12b453e53..f04cf03720 100644 --- a/mail/em-folder-tree-model.c +++ b/mail/em-folder-tree-model.c @@ -65,19 +65,6 @@ #define u(x) /* unread count debug */ #define d(x) -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 */ -}; - /* GObject virtual method overrides */ static void em_folder_tree_model_class_init (EMFolderTreeModelClass *klass); static void em_folder_tree_model_init (EMFolderTreeModel *model); @@ -374,6 +361,20 @@ em_folder_tree_model_new (const gchar *evolution_dir) EMFolderTreeModel *model; gchar *filename; + 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 */ + }; + model = g_object_new (EM_TYPE_FOLDER_TREE_MODEL, NULL); gtk_tree_store_set_column_types ((GtkTreeStore *) model, NUM_COLUMNS, col_types); gtk_tree_sortable_set_sort_column_id ((GtkTreeSortable *) model, @@ -540,13 +541,16 @@ 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); target = em_event_target_new_custom_icon (em_event_peek(), tree_store, iter, fi->full_name, EM_EVENT_CUSTOM_ICON); e_event_emit ((EEvent *)em_event_peek (), "folder.customicon", (EEventTarget *) target); 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... */ @@ -562,6 +566,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); @@ -869,6 +874,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); @@ -1323,6 +1329,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)); @@ -1351,7 +1359,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); -- cgit