summaryrefslogtreecommitdiff
path: root/gtk/gtkfilesystemmodel.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@novell.com>2009-09-02 17:10:46 -0500
committerBenjamin Otte <otte@gnome.org>2009-10-15 22:06:16 +0200
commit908911d6db7b5a2304b0421ecf37c181768b4c66 (patch)
tree9423e428ce8891e7cc4d9a30467978eed3813876 /gtk/gtkfilesystemmodel.c
parentad2e6ff52c254c950602b4327fc314e9eb94ff26 (diff)
downloadgtk+-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.c70
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? */