Merge branch 'more-filesystemmodel-cleanups' into 'main'
filesystemmodel: Crop tree model cruft See merge request GNOME/gtk!5402
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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__ */
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
#include <gio/gio.h>
|
||||
|
||||
#include "gtkfilesystemmodel.h"
|
||||
#include "gtkfilesystemmodelprivate.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#define __GTK_SEARCH_ENGINE_MODEL_H__
|
||||
|
||||
#include "gtksearchengineprivate.h"
|
||||
#include "gtkfilesystemmodel.h"
|
||||
#include "gtkfilesystemmodelprivate.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user