diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2007-04-05 02:38:19 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2007-04-05 02:38:19 +0800 |
commit | f25bc6134575acc930b64d779cf8e47ffa84e5c8 (patch) | |
tree | 6235ddfa913ca60434d1806c3eaea8ac9689c124 | |
parent | a87c19070ae2b46d076f7e374340a35bbe2ae04b (diff) | |
download | gsoc2013-evolution-f25bc6134575acc930b64d779cf8e47ffa84e5c8.tar gsoc2013-evolution-f25bc6134575acc930b64d779cf8e47ffa84e5c8.tar.gz gsoc2013-evolution-f25bc6134575acc930b64d779cf8e47ffa84e5c8.tar.bz2 gsoc2013-evolution-f25bc6134575acc930b64d779cf8e47ffa84e5c8.tar.lz gsoc2013-evolution-f25bc6134575acc930b64d779cf8e47ffa84e5c8.tar.xz gsoc2013-evolution-f25bc6134575acc930b64d779cf8e47ffa84e5c8.tar.zst gsoc2013-evolution-f25bc6134575acc930b64d779cf8e47ffa84e5c8.zip |
Update parent rows when a child row changes. (#352713) Patch by René
2007-04-04 Matthew Barnes <mbarnes@redhat.com>
* em-folder-tree.c (emft_model_row_changed):
Update parent rows when a child row changes. (#352713)
Patch by René Stadler.
svn path=/branches/gnome-2-18/; revision=33382
-rw-r--r-- | mail/ChangeLog | 6 | ||||
-rw-r--r-- | mail/em-folder-tree.c | 24 |
2 files changed, 30 insertions, 0 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 191a8bde43..382eeb6da9 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,9 @@ +2007-04-04 Matthew Barnes <mbarnes@redhat.com> + + * em-folder-tree.c (emft_model_row_changed): + Update parent rows when a child row changes. (#352713) + Patch by René Stadler. + 2007-04-03 Matthew Barnes <mbarnes@redhat.com> * em-event.h: Don't #include <composer/e-msg-composer.h> since we diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index 234510f6cf..5b122617c2 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -160,6 +160,7 @@ static void emft_queue_save_state (EMFolderTree *emft); static void emft_update_model_expanded_state (struct _EMFolderTreePrivate *priv, GtkTreeIter *iter, gboolean expanded); +static void emft_model_row_changed (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, EMFolderTree *emft); static void emft_tree_row_activated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, EMFolderTree *emft); static gboolean emft_tree_test_collapse_row (GtkTreeView *treeview, GtkTreeIter *root, GtkTreePath *path, EMFolderTree *emft); static void emft_tree_row_expanded (GtkTreeView *treeview, GtkTreeIter *root, GtkTreePath *path, EMFolderTree *emft); @@ -539,6 +540,8 @@ em_folder_tree_construct (EMFolderTree *emft, EMFolderTreeModel *model) priv->treeview = folder_tree_new (emft, model); gtk_widget_show ((GtkWidget *) priv->treeview); + g_signal_connect (priv->model, "row-changed", G_CALLBACK (emft_model_row_changed), emft); + g_signal_connect (priv->treeview, "row-expanded", G_CALLBACK (emft_tree_row_expanded), emft); g_signal_connect (priv->treeview, "test-collapse-row", G_CALLBACK (emft_tree_test_collapse_row), emft); g_signal_connect (priv->treeview, "row-activated", G_CALLBACK (emft_tree_row_activated), emft); @@ -1855,6 +1858,27 @@ emft_update_model_expanded_state (struct _EMFolderTreePrivate *priv, GtkTreeIter } static void +emft_model_row_changed (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, EMFolderTree *emft) +{ + GtkTreeIter parent_iter, current_iter = *iter; + + g_signal_handlers_block_by_func (model, emft_model_row_changed, emft); + + /* Folders are displayed with a bold weight to indicate that + they contain unread messages. We signal that parent rows + have changed here to update them. */ + + while (gtk_tree_model_iter_parent (model, &parent_iter, ¤t_iter)) { + GtkTreePath *parent_path = gtk_tree_model_get_path (model, &parent_iter); + gtk_tree_model_row_changed (model, parent_path, &parent_iter); + gtk_tree_path_free (parent_path); + current_iter = parent_iter; + } + + g_signal_handlers_unblock_by_func (model, emft_model_row_changed, emft); +} + +static void emft_tree_row_expanded (GtkTreeView *treeview, GtkTreeIter *root, GtkTreePath *tree_path, EMFolderTree *emft) { struct _EMFolderTreePrivate *priv = emft->priv; |