From affa8c84597651931ac7518da211616d4dd0392e Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 24 Jun 2009 18:41:03 +0200 Subject: [PATCH] Add a constructor to filesystem model that does not monitor a directory This is in preparation for switching search and recent models to use GtkFileSystemModel --- gtk/gtkfilechooserdefault.c | 2 +- gtk/gtkfilesystemmodel.c | 96 +++++++++++++++++++++++++++---------- gtk/gtkfilesystemmodel.h | 6 ++- 3 files changed, 77 insertions(+), 27 deletions(-) diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 67537537b8..d7ba26e5fe 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -6927,7 +6927,7 @@ set_list_model (GtkFileChooserDefault *impl, gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_files_tree_view), NULL); impl->browse_files_model = - _gtk_file_system_model_new (impl->current_folder, + _gtk_file_system_model_new_for_directory (impl->current_folder, MODEL_ATTRIBUTES, file_system_model_set, impl, diff --git a/gtk/gtkfilesystemmodel.c b/gtk/gtkfilesystemmodel.c index 8da4a0f218..de89c6001d 100644 --- a/gtk/gtkfilesystemmodel.c +++ b/gtk/gtkfilesystemmodel.c @@ -1136,39 +1136,85 @@ gtk_file_system_model_set_directory (GtkFileSystemModel *model, } -/** - * _gtk_file_system_model_new: - * @directory: the directory to show. - * @attributes: attributes to immediately load or %NULL for all - * @error: location to store error, or %NULL. - * - * Creates a new #GtkFileSystemModel object. The #GtkFileSystemModel - * object wraps the given @directory as a #GtkTreeModel. - * The model will query the given @attributes immediately and only add - * files with those attributes present. - * - * Return value: the newly created #GtkFileSystemModel object, or NULL if there - * was an error. - **/ -GtkFileSystemModel * -_gtk_file_system_model_new (GFile * dir, - const gchar * attributes, - GtkFileSystemModelGetValue get_func, - gpointer get_data, - guint n_columns, - ...) +static GtkFileSystemModel * +_gtk_file_system_model_new_valist (GtkFileSystemModelGetValue get_func, + gpointer get_data, + guint n_columns, + va_list args) { GtkFileSystemModel *model; - va_list args; - - g_return_val_if_fail (G_IS_FILE (dir), NULL); model = g_object_new (GTK_TYPE_FILE_SYSTEM_MODEL, NULL); model->get_func = get_func; model->get_data = get_data; - va_start (args, n_columns); gtk_file_system_model_set_n_columns (model, n_columns, args); + + return model; +} + +/** + * _gtk_file_system_model_new: + * @get_func: function to call for getting a value + * @get_data: user data argument passed to @get_func + * @n_columns: number of columns + * @...: @n_columns #GType types for the columns + * + * Creates a new #GtkFileSystemModel object. You need to add files + * to the list using _gtk_file_system_model_add_file(). + * + * Return value: the newly created #GtkFileSystemModel + **/ +GtkFileSystemModel * +_gtk_file_system_model_new (GtkFileSystemModelGetValue get_func, + gpointer get_data, + guint n_columns, + ...) +{ + GtkFileSystemModel *model; + va_list args; + + g_return_val_if_fail (get_func != NULL, NULL); + g_return_val_if_fail (n_columns > 0, NULL); + + va_start (args, n_columns); + model = _gtk_file_system_model_new_valist (get_func, get_data, n_columns, args); + va_end (args); + + return model; +} + +/** + * _gtk_file_system_model_new_for_directory: + * @directory: the directory to show. + * @attributes: attributes to immediately load or %NULL for all + * + * Creates a new #GtkFileSystemModel object. The #GtkFileSystemModel + * object wraps the given @directory as a #GtkTreeModel. + * The model will query the given directory with the given @attributes + * and add all files inside the directory automatically. If supported, + * it will also monitor the drectory and update the model's + * contents to reflect changes, if the @directory supports monitoring. + * + * Return value: the newly created #GtkFileSystemModel + **/ +GtkFileSystemModel * +_gtk_file_system_model_new_for_directory (GFile * dir, + const gchar * attributes, + GtkFileSystemModelGetValue get_func, + gpointer get_data, + guint n_columns, + ...) +{ + GtkFileSystemModel *model; + va_list args; + + g_return_val_if_fail (G_IS_FILE (dir), NULL); + g_return_val_if_fail (get_func != NULL, NULL); + g_return_val_if_fail (n_columns > 0, NULL); + + va_start (args, n_columns); + model = _gtk_file_system_model_new_valist (get_func, get_data, n_columns, args); va_end (args); gtk_file_system_model_set_directory (model, dir, attributes); diff --git a/gtk/gtkfilesystemmodel.h b/gtk/gtkfilesystemmodel.h index ae04e2f0ed..d27a647007 100644 --- a/gtk/gtkfilesystemmodel.h +++ b/gtk/gtkfilesystemmodel.h @@ -42,7 +42,11 @@ typedef gboolean (*GtkFileSystemModelGetValue) (GtkFileSystemModel *model, GValue *value, gpointer user_data); -GtkFileSystemModel *_gtk_file_system_model_new (GFile * dir, +GtkFileSystemModel *_gtk_file_system_model_new (GtkFileSystemModelGetValue get_func, + gpointer get_data, + guint n_columns, + ...); +GtkFileSystemModel *_gtk_file_system_model_new_for_directory(GFile * dir, const gchar * attributes, GtkFileSystemModelGetValue get_func, gpointer get_data,