diff options
author | Federico Mena Quintero <federico@novell.com> | 2009-09-02 17:10:46 -0500 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2009-10-15 22:06:16 +0200 |
commit | 908911d6db7b5a2304b0421ecf37c181768b4c66 (patch) | |
tree | 9423e428ce8891e7cc4d9a30467978eed3813876 /gtk/gtkfilesystemmodel.c | |
parent | ad2e6ff52c254c950602b4327fc314e9eb94ff26 (diff) | |
download | gtk+-908911d6db7b5a2304b0421ecf37c181768b4c66.tar.gz |
Factory out functions to emit row_inserted, row_changed, row_deleted
This is to avoid temporary variables for the path/iter and to avoid duplicated code.
Signed-off-by: Federico Mena Quintero <federico@novell.com>
Diffstat (limited to 'gtk/gtkfilesystemmodel.c')
-rw-r--r-- | gtk/gtkfilesystemmodel.c | 70 |
1 files changed, 43 insertions, 27 deletions
diff --git a/gtk/gtkfilesystemmodel.c b/gtk/gtkfilesystemmodel.c index 0baad5e864..c2fe884e0e 100644 --- a/gtk/gtkfilesystemmodel.c +++ b/gtk/gtkfilesystemmodel.c @@ -192,12 +192,44 @@ gtk_tree_path_new_from_node (GtkFileSystemModel *model, guint id) } static void -node_set_visible (GtkFileSystemModel *model, guint id, gboolean visible) +emit_row_inserted_for_node (GtkFileSystemModel *model, guint id) +{ + GtkTreePath *path; + GtkTreeIter iter; + + path = gtk_tree_path_new_from_node (model, id); + ITER_INIT_FROM_INDEX (model, &iter, id); + gtk_tree_model_row_inserted (GTK_TREE_MODEL (model), path, &iter); + gtk_tree_path_free (path); +} + +static void +emit_row_changed_for_node (GtkFileSystemModel *model, guint id) { - FileModelNode *node = get_node (model, id); GtkTreePath *path; GtkTreeIter iter; + path = gtk_tree_path_new_from_node (model, id); + ITER_INIT_FROM_INDEX (model, &iter, id); + gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter); + gtk_tree_path_free (path); +} + +static void +emit_row_deleted_for_visible_index (GtkFileSystemModel *model, guint visible_index) +{ + GtkTreePath *path; + + path = gtk_tree_path_new_from_indices (visible_index, -1); + gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path); + gtk_tree_path_free (path); +} + +static void +node_set_visible (GtkFileSystemModel *model, guint id, gboolean visible) +{ + FileModelNode *node = get_node (model, id); + if (node->visible == visible || node->frozen_add) return; @@ -206,18 +238,18 @@ node_set_visible (GtkFileSystemModel *model, guint id, gboolean visible) { node->visible = TRUE; node_invalidate_index (model, id); - path = gtk_tree_path_new_from_node (model, id); - ITER_INIT_FROM_INDEX (model, &iter, id); - gtk_tree_model_row_inserted (GTK_TREE_MODEL (model), path, &iter); - gtk_tree_path_free (path); + emit_row_inserted_for_node (model, id); } else { - path = gtk_tree_path_new_from_node (model, id); + guint visible_index; + + visible_index = node_get_index (model, id); + g_assert (visible_index < model->files->len); + node->visible = FALSE; node_invalidate_index (model, id); - gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path); - gtk_tree_path_free (path); + emit_row_deleted_for_visible_index (model, visible_index); } } @@ -1664,15 +1696,7 @@ _gtk_file_system_model_update_file (GtkFileSystemModel *model, } if (node->visible) - { - GtkTreePath *path; - GtkTreeIter iter; - - path = gtk_tree_path_new_from_node (model, id); - ITER_INIT_FROM_INDEX (model, &iter, id); - gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter); - gtk_tree_path_free (path); - } + emit_row_changed_for_node (model, id); if (requires_resort) gtk_file_system_model_sort_node (model, id); @@ -1845,15 +1869,7 @@ _gtk_file_system_model_clear_cache (GtkFileSystemModel *model, } if (changed && node->visible) - { - GtkTreePath *path; - GtkTreeIter iter; - - path = gtk_tree_path_new_from_node (model, i); - ITER_INIT_FROM_INDEX (model, &iter, i); - gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter); - gtk_tree_path_free (path); - } + emit_row_changed_for_node (model, i); } /* FIXME: resort? */ |