[gtk/gbsneto/filechooser-column-view: 105/105] filesystemmodel: Drop the model types




commit 269c6c340f300cc628a4bc5ecf0f846ab44bbc5c
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Oct 12 08:18:39 2022 -0400

    filesystemmodel: Drop the model types
    
    We are no longer storing extra values, so no need
    to take their types in the api.

 gtk/gtkfilechooserentry.c  |   6 +--
 gtk/gtkfilechooserwidget.c |  29 ++-----------
 gtk/gtkfilesystemmodel.c   | 106 ++++++---------------------------------------
 gtk/gtkfilesystemmodel.h   |   9 ++--
 4 files changed, 21 insertions(+), 129 deletions(-)
---
diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c
index 463f4abb52..388c149905 100644
--- a/gtk/gtkfilechooserentry.c
+++ b/gtk/gtkfilechooserentry.c
@@ -616,11 +616,7 @@ populate_completion_store (GtkFileChooserEntry *chooser_entry)
   chooser_entry->model =
       _gtk_file_system_model_new_for_directory (chooser_entry->current_folder_file,
                                                 "standard::name,standard::display-name,standard::type,"
-                                                "standard::content-type",
-                                                N_COLUMNS,
-                                                G_TYPE_FILE_INFO,
-                                                G_TYPE_STRING,
-                                                G_TYPE_STRING);
+                                                "standard::content-type");
   g_signal_connect (chooser_entry->model, "items-changed",
                     G_CALLBACK (model_items_changed_cb), chooser_entry);
   g_signal_connect (chooser_entry->model, "finished-loading",
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index b8c7092355..38e5df744a 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -352,28 +352,6 @@ static guint signals[LAST_SIGNAL] = { 0 };
                          "standard::content-type,standard::fast-content-type,time::modified,time::access," \
                          "access::can-rename,access::can-delete,access::can-trash," \
                          "standard::target-uri"
-enum {
-  /* the first 4 must be these due to settings caching sort column */
-  MODEL_COL_NAME,
-  MODEL_COL_SIZE,
-  MODEL_COL_FILE,
-  MODEL_COL_NAME_COLLATED,
-  MODEL_COL_IS_FOLDER,
-  MODEL_COL_IS_SENSITIVE,
-  MODEL_COL_ELLIPSIZE,
-  MODEL_COL_NUM_COLUMNS
-};
-
-/* This list of types is passed to _gtk_file_system_model_new*() */
-#define MODEL_COLUMN_TYPES                                      \
-        MODEL_COL_NUM_COLUMNS,                                  \
-        G_TYPE_STRING,            /* MODEL_COL_NAME */          \
-        G_TYPE_INT64,             /* MODEL_COL_SIZE */          \
-        G_TYPE_FILE,              /* MODEL_COL_FILE */          \
-        G_TYPE_STRING,            /* MODEL_COL_NAME_COLLATED */ \
-        G_TYPE_BOOLEAN,           /* MODEL_COL_IS_FOLDER */     \
-        G_TYPE_BOOLEAN,           /* MODEL_COL_IS_SENSITIVE */  \
-        PANGO_TYPE_ELLIPSIZE_MODE /* MODEL_COL_ELLIPSIZE */
 
 #define DEFAULT_RECENT_FILES_LIMIT 50
 
@@ -3998,8 +3976,7 @@ set_list_model (GtkFileChooserWidget  *impl,
 
   impl->browse_files_model =
     _gtk_file_system_model_new_for_directory (impl->current_folder,
-                                              MODEL_ATTRIBUTES,
-                                              MODEL_COLUMN_TYPES);
+                                              MODEL_ATTRIBUTES);
 
   _gtk_file_system_model_set_show_hidden (impl->browse_files_model, impl->show_hidden);
 
@@ -5868,7 +5845,7 @@ search_setup_model (GtkFileChooserWidget *impl)
 {
   g_assert (impl->search_model == NULL);
 
-  impl->search_model = _gtk_file_system_model_new (MODEL_COLUMN_TYPES);
+  impl->search_model = _gtk_file_system_model_new ();
 
   set_current_model (impl, G_LIST_MODEL (impl->search_model));
   update_columns (impl, TRUE, _("Modified"));
@@ -6032,7 +6009,7 @@ recent_start_loading (GtkFileChooserWidget *impl)
   /* Setup recent model */
   g_assert (impl->recent_model == NULL);
 
-  impl->recent_model = _gtk_file_system_model_new (MODEL_COLUMN_TYPES);
+  impl->recent_model = _gtk_file_system_model_new ();
 
   _gtk_file_system_model_set_filter (impl->recent_model, impl->current_filter);
 
diff --git a/gtk/gtkfilesystemmodel.c b/gtk/gtkfilesystemmodel.c
index 520040aaa0..8674345f88 100644
--- a/gtk/gtkfilesystemmodel.c
+++ b/gtk/gtkfilesystemmodel.c
@@ -133,8 +133,6 @@ struct _FileModelNode
   guint                 visible :1;     /* if the file is currently visible */
   guint                 filtered_out :1;/* if the file is currently filtered out (i.e. it didn't pass the 
filters) */
   guint                 frozen_add :1;  /* true if the model was frozen and the entry has not been added yet 
*/
-
-  GValue                values[1];      /* actually n_columns values */
 };
 
 struct _GtkFileSystemModel
@@ -148,7 +146,6 @@ struct _GtkFileSystemModel
 
   GCancellable *        cancellable;    /* cancellable in use for all operations - cancelled on dispose */
   GArray *              files;          /* array of FileModelNode containing all our files */
-  gsize                 node_size;     /* Size of a FileModelNode structure once its ->values field has 
n_columns */
   guint                 n_nodes_valid;  /* count of valid nodes (i.e. those whose node->row is accurate) */
   GHashTable *          file_lookup;    /* mapping of GFile => array index in model->files
                                         * This hash table doesn't always have the same number of entries as 
the files array;
@@ -156,9 +153,6 @@ struct _GtkFileSystemModel
                                         * detected.
                                         */
 
-  guint                 n_columns;      /* number of columns */
-  GType *               column_types;   /* types of each column */
-
   GtkFileFilter *       filter;         /* filter to use for deciding which nodes are visible */
 
   guint                 frozen;         /* number of times we're frozen */
@@ -214,10 +208,10 @@ static void remove_file (GtkFileSystemModel *model,
 /*** FileModelNode ***/
 
 /* Get a FileModelNode structure given an index in the model->files array of nodes */
-#define get_node(_model, _index) ((FileModelNode *) ((_model)->files->data + (_index) * (_model)->node_size))
+#define get_node(_model, _index) ((FileModelNode *) ((_model)->files->data + (_index) * sizeof 
(FileModelNode)))
 
 /* Get an index within the model->files array of nodes, given a FileModelNode* */
-#define node_index(_model, _node) (((char *) (_node) - (_model)->files->data) / (_model)->node_size)
+#define node_index(_model, _node) (((char *) (_node) - (_model)->files->data) / sizeof (FileModelNode))
 
 /* @up_to_index: smallest model->files array index that will be valid after this call
  * @up_to_row: smallest node->row that will be valid after this call
@@ -450,15 +444,9 @@ gtk_file_system_model_finalize (GObject *object)
 
   for (i = 0; i < model->files->len; i++)
     {
-      int v;
-
       FileModelNode *node = get_node (model, i);
       g_clear_object (&node->file);
       g_clear_object (&node->info);
-
-      for (v = 0; v < model->n_columns; v++)
-       if (G_VALUE_TYPE (&node->values[v]) != G_TYPE_INVALID)
-         g_value_unset (&node->values[v]);
     }
   g_array_free (model->files, TRUE);
 
@@ -469,8 +457,6 @@ gtk_file_system_model_finalize (GObject *object)
   g_clear_pointer (&model->file_lookup, g_hash_table_destroy);
   g_clear_object (&model->filter);
 
-  g_slice_free1 (sizeof (GType) * model->n_columns, model->column_types);
-
   G_OBJECT_CLASS (_gtk_file_system_model_parent_class)->finalize (object);
 }
 
@@ -703,39 +689,6 @@ gtk_file_system_model_got_enumerator (GObject *dir, GAsyncResult *res, gpointer
     }
 }
 
-static void
-gtk_file_system_model_set_n_columns (GtkFileSystemModel *model,
-                                     int                 n_columns,
-                                     va_list             args)
-{
-  guint i;
-
-  g_assert (model->files == NULL);
-  g_assert (n_columns > 0);
-
-  model->n_columns = n_columns;
-  model->column_types = g_slice_alloc (sizeof (GType) * n_columns);
-
-  model->node_size = sizeof (FileModelNode) + sizeof (GValue) * (n_columns - 1); /* minus 1 because 
FileModelNode.values[] has a default size of 1 */
-
-  for (i = 0; i < (guint) n_columns; i++)
-    {
-      GType type = va_arg (args, GType);
-      if (! _gtk_tree_data_list_check_type (type))
-       {
-         g_error ("%s: type %s cannot be a column type for GtkFileSystemModel\n", G_STRLOC, g_type_name 
(type));
-          return; /* not reached */
-       }
-
-      model->column_types[i] = type;
-    }
-
-  model->files = g_array_sized_new (FALSE, FALSE, model->node_size, FILES_PER_QUERY);
-  /* add editable node at start */
-  g_array_set_size (model->files, 1);
-  memset (get_node (model, 0), 0, model->node_size);
-}
-
 static void
 gtk_file_system_model_set_directory (GtkFileSystemModel *model,
                                      GFile *             dir,
@@ -756,23 +709,8 @@ gtk_file_system_model_set_directory (GtkFileSystemModel *model,
 
 }
 
-static GtkFileSystemModel *
-_gtk_file_system_model_new_valist (guint               n_columns,
-                                   va_list             args)
-{
-  GtkFileSystemModel *model;
-
-  model = g_object_new (GTK_TYPE_FILE_SYSTEM_MODEL, NULL);
-
-  gtk_file_system_model_set_n_columns (model, n_columns, args);
-
-  return model;
-}
-
 /**
  * _gtk_file_system_model_new:
- * @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_and_query_file()
@@ -781,17 +719,16 @@ _gtk_file_system_model_new_valist (guint               n_columns,
  * Returns: the newly created `GtkFileSystemModel`
  **/
 GtkFileSystemModel *
-_gtk_file_system_model_new (guint               n_columns,
-                            ...)
+_gtk_file_system_model_new (void)
 {
   GtkFileSystemModel *model;
-  va_list args;
 
-  g_return_val_if_fail (n_columns > 0, NULL);
+  model = g_object_new (GTK_TYPE_FILE_SYSTEM_MODEL, NULL);
 
-  va_start (args, n_columns);
-  model = _gtk_file_system_model_new_valist (n_columns, args);
-  va_end (args);
+  model->files = g_array_sized_new (FALSE, FALSE, sizeof (FileModelNode), FILES_PER_QUERY);
+  /* add editable node at start */
+  g_array_set_size (model->files, 1);
+  memset (get_node (model, 0), 0, sizeof (FileModelNode));
 
   return model;
 }
@@ -800,8 +737,6 @@ _gtk_file_system_model_new (guint               n_columns,
  * _gtk_file_system_model_new_for_directory:
  * @directory: the directory to show.
  * @attributes: (nullable): attributes to immediately load or %NULL for all
- * @n_columns: number of columns
- * @...: @n_columns `GType` types for the columns
  *
  * Creates a new `GtkFileSystemModel` object.
  *
@@ -814,21 +749,14 @@ _gtk_file_system_model_new (guint               n_columns,
  * Returns: the newly created `GtkFileSystemModel`
  **/
 GtkFileSystemModel *
-_gtk_file_system_model_new_for_directory (GFile *                    dir,
-                                          const char *              attributes,
-                                          guint                      n_columns,
-                                          ...)
+_gtk_file_system_model_new_for_directory (GFile      *dir,
+                                          const char *attributes)
 {
   GtkFileSystemModel *model;
-  va_list args;
 
   g_return_val_if_fail (G_IS_FILE (dir), NULL);
-  g_return_val_if_fail (n_columns > 0, NULL);
-
-  va_start (args, n_columns);
-  model = _gtk_file_system_model_new_valist (n_columns, args);
-  va_end (args);
 
+  model = _gtk_file_system_model_new ();
   gtk_file_system_model_set_directory (model, dir, attributes);
 
   return model;
@@ -1064,7 +992,7 @@ add_file (GtkFileSystemModel *model,
   g_return_if_fail (G_IS_FILE (file));
   g_return_if_fail (G_IS_FILE_INFO (info));
 
-  node = g_slice_alloc0 (model->node_size);
+  node = g_slice_alloc0 (sizeof (FileModelNode));
   node->file = g_object_ref (file);
   if (info)
     {
@@ -1074,7 +1002,7 @@ add_file (GtkFileSystemModel *model,
   node->frozen_add = model->frozen ? TRUE : FALSE;
 
   g_array_append_vals (model->files, node, 1);
-  g_slice_free1 (model->node_size, node);
+  g_slice_free1 (sizeof (FileModelNode), node);
 
   position = model->files->len - 1;
 
@@ -1140,7 +1068,7 @@ _gtk_file_system_model_update_file (GtkFileSystemModel *model,
                                     GFileInfo          *info)
 {
   FileModelNode *node;
-  guint i, id;
+  guint id;
 
   g_return_if_fail (GTK_IS_FILE_SYSTEM_MODEL (model));
   g_return_if_fail (G_IS_FILE (file));
@@ -1157,12 +1085,6 @@ _gtk_file_system_model_update_file (GtkFileSystemModel *model,
 
   g_set_object (&node->info, info);
 
-  for (i = 0; i < model->n_columns; i++)
-    {
-      if (G_VALUE_TYPE (&node->values[i]))
-        g_value_unset (&node->values[i]);
-    }
-
   g_file_info_set_attribute_object (info, "standard::file", G_OBJECT (file));
 }
 
diff --git a/gtk/gtkfilesystemmodel.h b/gtk/gtkfilesystemmodel.h
index e85cf641cd..57cbf4d68f 100644
--- a/gtk/gtkfilesystemmodel.h
+++ b/gtk/gtkfilesystemmodel.h
@@ -32,12 +32,9 @@ typedef struct _GtkFileSystemModel      GtkFileSystemModel;
 
 GType _gtk_file_system_model_get_type (void) G_GNUC_CONST;
 
-GtkFileSystemModel *_gtk_file_system_model_new              (guint               n_columns,
-                                                             ...);
-GtkFileSystemModel *_gtk_file_system_model_new_for_directory(GFile *             dir,
-                                                             const char *       attributes,
-                                                             guint               n_columns,
-                                                             ...);
+GtkFileSystemModel *_gtk_file_system_model_new              (void);
+GtkFileSystemModel *_gtk_file_system_model_new_for_directory(GFile              *dir,
+                                                             const char         *attributes);
 GFile *             _gtk_file_system_model_get_directory    (GtkFileSystemModel *model);
 GCancellable *      _gtk_file_system_model_get_cancellable  (GtkFileSystemModel *model);
 GFileInfo *         _gtk_file_system_model_get_info_for_file(GtkFileSystemModel *model,


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