diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-01-07 18:42:14 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-01-07 18:42:14 +0000 |
commit | be8fb1e9b8f55fa23d0e13570d0c254163b45e84 (patch) | |
tree | 6aa8094788d1a56ebc68de347d33f032e7cd0d49 | |
parent | 52c97dbf67aa72b4dd0b5d47aa76440cd42327fe (diff) | |
parent | 32247bc50e63b709ae738a95a2ec71345b5fad75 (diff) | |
download | gtk+-be8fb1e9b8f55fa23d0e13570d0c254163b45e84.tar.gz |
Merge branch 'more-filesystemmodel-cleanups' into 'main'
filesystemmodel: Crop tree model cruft
See merge request GNOME/gtk!5402
-rw-r--r-- | gtk/gtkfilechooserprivate.h | 2 | ||||
-rw-r--r-- | gtk/gtkfilechooserwidget.c | 2 | ||||
-rw-r--r-- | gtk/gtkfilesystemmodel.c | 48 | ||||
-rw-r--r-- | gtk/gtkfilesystemmodelprivate.h (renamed from gtk/gtkfilesystemmodel.h) | 8 | ||||
-rw-r--r-- | gtk/gtkfilethumbnail.h | 2 | ||||
-rw-r--r-- | gtk/gtksearchenginemodelprivate.h | 2 | ||||
-rw-r--r-- | gtk/gtksearchengineprivate.h | 2 |
7 files changed, 31 insertions, 35 deletions
diff --git a/gtk/gtkfilechooserprivate.h b/gtk/gtkfilechooserprivate.h index 7f3215ff3e..c53784bcf9 100644 --- a/gtk/gtkfilechooserprivate.h +++ b/gtk/gtkfilechooserprivate.h @@ -20,7 +20,7 @@ #define __GTK_FILE_CHOOSER_PRIVATE_H__ #include "deprecated/gtkfilechooser.h" -#include "gtkfilesystemmodel.h" +#include "gtkfilesystemmodelprivate.h" #include "deprecated/gtkliststore.h" #include "gtkrecentmanager.h" #include "gtksearchengineprivate.h" diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 5152e090de..9415dc3ba5 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -36,7 +36,7 @@ #include "deprecated/gtkfilechooser.h" #include "gtkfilechooserentry.h" #include "gtkfilechooserutils.h" -#include "gtkfilesystemmodel.h" +#include "gtkfilesystemmodelprivate.h" #include "gtkfilethumbnail.h" #include "gtkgestureclick.h" #include "gtkgesturelongpress.h" diff --git a/gtk/gtkfilesystemmodel.c b/gtk/gtkfilesystemmodel.c index 5005a4c5bf..c085022e19 100644 --- a/gtk/gtkfilesystemmodel.c +++ b/gtk/gtkfilesystemmodel.c @@ -18,7 +18,7 @@ #include "config.h" -#include "gtkfilesystemmodel.h" +#include "gtkfilesystemmodelprivate.h" #include <stdlib.h> #include <string.h> @@ -41,7 +41,7 @@ typedef struct _FileModelNode FileModelNode; struct _FileModelNode { - GFile * file; /* file represented by this node or NULL for editable */ + GFile * file; /* file represented by this node */ GFileInfo * info; /* info for this file or NULL if unknown */ guint row; /* if valid (see model->n_valid_indexes), visible nodes before and including @@ -254,21 +254,21 @@ static guint node_get_for_file (GtkFileSystemModel *model, GFile *file) { - guint i; + gpointer position; + int i; - i = GPOINTER_TO_UINT (g_hash_table_lookup (model->file_lookup, file)); - if (i != 0) - return i; + if (g_hash_table_lookup_extended (model->file_lookup, + file, NULL, + &position)) + return GPOINTER_TO_UINT (position); - /* Node 0 is the editable row and has no associated file or entry in the table, so we start counting from 1. - * - * The invariant here is that the files in model->files[n] for n < g_hash_table_size (model->file_lookup) + /* The invariant here is that the files in model->files[n] for n < g_hash_table_size (model->file_lookup) * are already added to the hash table. this loop merely rebuilds our (file -> index) mapping on demand. * * If we exit the loop, the next pending batch of mappings will be resolved when this function gets called again * with another file that is not yet in the mapping. */ - for (i = g_hash_table_size (model->file_lookup) + 1; i < model->files->len; i++) + for (i = g_hash_table_size (model->file_lookup); i < model->files->len; i++) { FileModelNode *node = get_node (model, i); @@ -277,7 +277,7 @@ node_get_for_file (GtkFileSystemModel *model, return i; } - return 0; + return GTK_INVALID_LIST_POSITION; } /*** GListModel ***/ @@ -293,7 +293,7 @@ list_model_get_n_items (GListModel *list_model) { GtkFileSystemModel *model = GTK_FILE_SYSTEM_MODEL (list_model); - return model->files->len - 1; + return model->files->len; } static gpointer @@ -305,10 +305,10 @@ list_model_get_item (GListModel *list_model, /* The first items of GtkFileSystemModel is not really a file, * so ignore it. */ - if (position + 1 >= model->files->len) + if (position >= model->files->len) return NULL; - node = get_node (model, position + 1); + node = get_node (model, position); return g_object_ref (node->info); } @@ -355,8 +355,7 @@ gtk_file_system_model_refilter_all (GtkFileSystemModel *model) freeze_updates (model); - /* start at index 1, don't change the editable */ - for (i = 1; i < model->files->len; i++) + for (i = 0; i < model->files->len; i++) node_compute_visibility_and_filters (model, i); model->filter_on_thaw = FALSE; @@ -375,7 +374,8 @@ thaw_updates (GtkFileSystemModel *model) if (model->frozen > 0) return; - stuff_added = get_node (model, model->files->len - 1)->frozen_add; + stuff_added = model->files->len > 0 && + get_node (model, model->files->len - 1)->frozen_add; if (model->filter_on_thaw) gtk_file_system_model_refilter_all (model); @@ -402,7 +402,7 @@ add_file (GtkFileSystemModel *model, { FileModelNode *node; guint position; - + g_return_if_fail (GTK_IS_FILE_SYSTEM_MODEL (model)); g_return_if_fail (G_IS_FILE (file)); g_return_if_fail (G_IS_FILE_INFO (info)); @@ -422,10 +422,9 @@ add_file (GtkFileSystemModel *model, position = model->files->len - 1; if (!model->frozen) - node_compute_visibility_and_filters (model, model->files->len -1); + node_compute_visibility_and_filters (model, position); - /* Ignore the first item */ - g_list_model_items_changed (G_LIST_MODEL (model), position - 1, 0, 1); + g_list_model_items_changed (G_LIST_MODEL (model), position, 0, 1); } static void @@ -655,7 +654,7 @@ gtk_file_system_model_update_file (GtkFileSystemModel *model, g_return_if_fail (G_IS_FILE_INFO (info)); id = node_get_for_file (model, file); - if (id == 0) + if (id == GTK_INVALID_LIST_POSITION) { add_file (model, file, info); id = node_get_for_file (model, file); @@ -811,9 +810,6 @@ _gtk_file_system_model_new (void) model = g_object_new (GTK_TYPE_FILE_SYSTEM_MODEL, NULL); 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; } @@ -971,7 +967,7 @@ _gtk_file_system_model_get_info_for_file (GtkFileSystemModel *model, i = node_get_for_file (model, file); - if (i == 0) + if (i == GTK_INVALID_LIST_POSITION) return NULL; node = get_node (model, i); diff --git a/gtk/gtkfilesystemmodel.h b/gtk/gtkfilesystemmodelprivate.h index 32875eba6b..36bf750e86 100644 --- a/gtk/gtkfilesystemmodel.h +++ b/gtk/gtkfilesystemmodelprivate.h @@ -1,5 +1,5 @@ /* GTK - The GIMP Toolkit - * gtkfilesystemmodel.h: GtkTreeModel wrapping a GtkFileSystem + * gtkfilesystemmodelprivate.h: GtkTreeModel wrapping a GtkFileSystem * Copyright (C) 2003, Red Hat, Inc. * * This library is free software; you can redistribute it and/or @@ -16,8 +16,8 @@ * License along with this library. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef __GTK_FILE_SYSTEM_MODEL_H__ -#define __GTK_FILE_SYSTEM_MODEL_H__ +#ifndef __GTK_FILE_SYSTEM_MODEL_PRIVATE_H__ +#define __GTK_FILE_SYSTEM_MODEL_PRIVATE_H__ #include <gio/gio.h> #include <gtk/gtkfilefilter.h> @@ -59,4 +59,4 @@ void _gtk_file_system_model_set_filter (GtkFileSystemModel G_END_DECLS -#endif /* __GTK_FILE_SYSTEM_MODEL_H__ */ +#endif /* __GTK_FILE_SYSTEM_MODEL_PRIVATE_H__ */ diff --git a/gtk/gtkfilethumbnail.h b/gtk/gtkfilethumbnail.h index bdb3f6c46f..ad6b7eebfa 100644 --- a/gtk/gtkfilethumbnail.h +++ b/gtk/gtkfilethumbnail.h @@ -24,7 +24,7 @@ #include <gio/gio.h> -#include "gtkfilesystemmodel.h" +#include "gtkfilesystemmodelprivate.h" G_BEGIN_DECLS diff --git a/gtk/gtksearchenginemodelprivate.h b/gtk/gtksearchenginemodelprivate.h index f0b9dcf471..4799dd508b 100644 --- a/gtk/gtksearchenginemodelprivate.h +++ b/gtk/gtksearchenginemodelprivate.h @@ -21,7 +21,7 @@ #define __GTK_SEARCH_ENGINE_MODEL_H__ #include "gtksearchengineprivate.h" -#include "gtkfilesystemmodel.h" +#include "gtkfilesystemmodelprivate.h" G_BEGIN_DECLS diff --git a/gtk/gtksearchengineprivate.h b/gtk/gtksearchengineprivate.h index e23e197c34..f0d3da49b0 100644 --- a/gtk/gtksearchengineprivate.h +++ b/gtk/gtksearchengineprivate.h @@ -23,7 +23,7 @@ #define __GTK_SEARCH_ENGINE_H__ #include "gtkquery.h" -#include "gtkfilesystemmodel.h" +#include "gtkfilesystemmodelprivate.h" #include <gio/gio.h> G_BEGIN_DECLS |