+
+static void
+deleted_callback (GtkFileFolder *folder,
+ FileModelNode *node)
+{
+}
+
+static void
+do_files_added (GtkFileSystemModel *model,
+ FileModelNode *parent_node,
+ GSList *uris)
+{
+ FileModelNode *children;
+ FileModelNode *prev = NULL;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ GSList *sorted_uris;
+ GSList *tmp_list;
+
+ sorted_uris = g_slist_copy (uris);
+ sorted_uris = g_slist_sort (sorted_uris, (GCompareFunc)strcmp);
+
+ if (parent_node)
+ {
+ iter.user_data = parent_node;
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
+ children = parent_node->children;
+ }
+ else
+ {
+ path = gtk_tree_path_new ();
+ children = model->roots;
+ }
+
+ gtk_tree_path_down (path);
+
+ if (parent_node && parent_node->has_dummy)
+ {
+ prev = children;
+ children = children->next;
+ gtk_tree_path_next (path);
+ }
+
+ for (tmp_list = sorted_uris; tmp_list; tmp_list = tmp_list->next)
+ {
+ const gchar *uri = tmp_list->data;
+
+ while (children && strcmp (children->uri, uri) < 0)
+ {
+ prev = children;
+ if (children->is_visible)
+ gtk_tree_path_next (path);
+
+ children = children->next;
+ }
+
+ if (children && strcmp (children->uri, uri) == 0)
+ {
+ /* Shouldn't happen */
+ }
+ else
+ {
+ FileModelNode *new;
+
+ new = file_model_node_new (model, uri);
+
+ if (children)
+ new->next = children;
+ if (prev)
+ prev->next = new;
+ else if (parent_node)
+ parent_node->children = new;
+ else
+ model->roots = new;
+
+ prev = new;
+
+ if (parent_node)
+ {
+ new->parent = parent_node;
+ new->depth = parent_node->depth + 1;
+ }
+
+ new->is_visible = file_model_node_is_visible (model, new);
+
+ if (new->is_visible)
+ {
+ GtkTreeModel *tree_model = GTK_TREE_MODEL (model);
+
+ iter.user_data = new;
+ path = gtk_tree_model_get_path (tree_model, &iter);
+ gtk_tree_model_row_inserted (tree_model, path, &iter);
+
+ if (gtk_file_system_model_iter_has_child (tree_model, &iter))
+ gtk_tree_model_row_has_child_toggled (tree_model, path, &iter);
+
+ if (parent_node && parent_node->has_dummy)
+ {
+ FileModelNode *dummy = parent_node->children;
+ GtkTreePath *dummy_path;
+
+ parent_node->children = parent_node->children->next;
+ parent_node->has_dummy = FALSE;
+ file_model_node_free (dummy);
+
+ dummy_path = gtk_tree_path_copy (path);
+ gtk_tree_path_up (dummy_path);
+ gtk_tree_path_down (dummy_path);
+
+ gtk_tree_model_row_deleted (tree_model, path);
+ gtk_tree_path_free (dummy_path);
+ }
+
+ gtk_tree_path_next (path);
+ }
+ }
+ }
+
+ gtk_tree_path_free (path);
+ g_slist_free (sorted_uris);
+}
+
+static void
+files_added_callback (GtkFileFolder *folder,
+ GSList *uris,
+ FileModelNode *node)
+{
+ do_files_added (node->model, node, uris);
+}
+
+static void
+root_files_added_callback (GtkFileFolder *folder,
+ GSList *uris,
+ GtkFileSystemModel *model)
+{
+ do_files_added (model, NULL, uris);
+}
+
+static void
+file_changed_callback (GtkFileFolder *folder,
+ const gchar *uri,
+ FileModelNode *node)
+{
+}
+
+static void
+file_removed_callback (GtkFileFolder *folder,
+ const gchar *uri,
+ FileModelNode *node)
+{
+}
+
+static void
+root_deleted_callback (GtkFileFolder *folder,
+ GtkFileSystemModel *model)
+{
+}
+
+static void
+root_file_changed_callback (GtkFileFolder *folder,
+ const gchar *uri,
+ GtkFileSystemModel *model)
+{
+}
+
+static void
+root_file_removed_callback (GtkFileFolder *folder,
+ const gchar *uri,
+ GtkFileSystemModel *model)
+{
+}
+
+