[gtk+] file system model: Add batched insertion



commit b2ceadb057011a120ff271c74bff5d2cbd6572bd
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Jun 18 12:19:06 2015 -0400

    file system model: Add batched insertion
    
    Add a batched version of gtk_file_system_model_add_and_query_file
    that takes a list of files and avoids resorting the model for each
    individual insertion. The querying is still done one-file-at-a-time,
    so more optimization is certainly possible.

 gtk/gtkfilesystemmodel.c |   36 ++++++++++++++++++++++++++++++++++++
 gtk/gtkfilesystemmodel.h |    9 ++++++---
 2 files changed, 42 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkfilesystemmodel.c b/gtk/gtkfilesystemmodel.c
index a92be1f..096836b 100644
--- a/gtk/gtkfilesystemmodel.c
+++ b/gtk/gtkfilesystemmodel.c
@@ -2129,3 +2129,39 @@ _gtk_file_system_model_add_and_query_file (GtkFileSystemModel *model,
                            gtk_file_system_model_query_done,
                            model);
 }
+
+static void
+gtk_file_system_model_one_query_done (GObject *     object,
+                                      GAsyncResult *res,
+                                      gpointer      data)
+{
+  GtkFileSystemModel *model = data; /* only a valid pointer if not cancelled */
+
+  gtk_file_system_model_query_done (object, res, data);
+  thaw_updates (model);
+}
+
+void
+_gtk_file_system_model_add_and_query_files (GtkFileSystemModel *model,
+                                            GList              *list,
+                                            const char         *attributes)
+{
+  GList *l;
+  GFile *file;
+
+  g_return_if_fail (GTK_IS_FILE_SYSTEM_MODEL (model));
+  g_return_if_fail (attributes != NULL);
+
+  for (l = list; l; l = l->next)
+    {
+      file = (GFile *)l->data;
+      freeze_updates (model);
+      g_file_query_info_async (file,
+                               attributes,
+                               G_FILE_QUERY_INFO_NONE,
+                               IO_PRIORITY,
+                               model->cancellable,
+                               gtk_file_system_model_one_query_done,
+                               model);
+    }
+}
diff --git a/gtk/gtkfilesystemmodel.h b/gtk/gtkfilesystemmodel.h
index 6c6a051..5a2c8b1 100644
--- a/gtk/gtkfilesystemmodel.h
+++ b/gtk/gtkfilesystemmodel.h
@@ -66,9 +66,12 @@ const GValue *      _gtk_file_system_model_get_value        (GtkFileSystemModel
                                                              GtkTreeIter *       iter,
                                                              int                 column);
 
-void                _gtk_file_system_model_add_and_query_file (GtkFileSystemModel *model,
-                                                             GFile              *file,
-                                                             const char         *attributes);
+void                _gtk_file_system_model_add_and_query_file  (GtkFileSystemModel *model,
+                                                                GFile              *file,
+                                                                const char         *attributes);
+void                _gtk_file_system_model_add_and_query_files (GtkFileSystemModel *model,
+                                                                GList              *files,
+                                                                const char         *attributes);
 void                _gtk_file_system_model_update_file      (GtkFileSystemModel *model,
                                                              GFile              *file,
                                                              GFileInfo          *info);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]