[nautilus/wip/antoniof/new-list-view: 4/6] view-icon-controller: Don't leak list model item refs
- From: António Fernandes <antoniof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/antoniof/new-list-view: 4/6] view-icon-controller: Don't leak list model item refs
- Date: Thu, 10 Feb 2022 15:48:31 +0000 (UTC)
commit 3a2d9d26c64f0d26ede1e14853094de1f90e8a4c
Author: António Fernandes <antoniof gnome org>
Date: Thu Feb 10 12:30:28 2022 +0000
view-icon-controller: Don't leak list model item refs
Due to a bug in the docs, I've been under the mistaken impression that
g_list_model_get_item() didn't pass a reference to the caller.
https://gitlab.gnome.org/GNOME/gi-docgen/-/issues/127
Use scoped autocleanup to fix this.
src/nautilus-view-icon-controller.c | 36 +++++++++++++++++++++---------------
src/nautilus-view-model.c | 10 +++++-----
2 files changed, 26 insertions(+), 20 deletions(-)
---
diff --git a/src/nautilus-view-icon-controller.c b/src/nautilus-view-icon-controller.c
index d2cadef60..74633bf93 100644
--- a/src/nautilus-view-icon-controller.c
+++ b/src/nautilus-view-icon-controller.c
@@ -285,7 +285,7 @@ real_get_selection (NautilusFilesView *files_view)
n_selected = g_list_model_get_n_items (G_LIST_MODEL (selection));
for (guint i = 0; i < n_selected; i++)
{
- NautilusViewItemModel *item_model;
+ g_autoptr (NautilusViewItemModel) item_model = NULL;
item_model = g_list_model_get_item (G_LIST_MODEL (selection), i);
selected_files = g_list_prepend (selected_files,
@@ -587,14 +587,16 @@ static void
set_icon_size (NautilusViewIconController *self,
gint icon_size)
{
- NautilusViewItemModel *current_item_model;
- guint i = 0;
+ guint n_items;
- while ((current_item_model = NAUTILUS_VIEW_ITEM_MODEL (g_list_model_get_item (G_LIST_MODEL
(self->model), i))))
+ n_items = g_list_model_get_n_items (G_LIST_MODEL (self->model));
+ for (guint i = 0; i < n_items; i++)
{
+ g_autoptr (NautilusViewItemModel) current_item_model = NULL;
+
+ current_item_model = g_list_model_get_item (G_LIST_MODEL (self->model), i);
nautilus_view_item_model_set_icon_size (current_item_model,
get_icon_size_for_zoom_level (self->zoom_level));
- i++;
}
}
@@ -688,7 +690,7 @@ static GdkRectangle *
real_compute_rename_popover_pointing_to (NautilusFilesView *files_view)
{
NautilusViewIconController *self = NAUTILUS_VIEW_ICON_CONTROLLER (files_view);
- NautilusViewItemModel *item;
+ g_autoptr (NautilusViewItemModel) item = NULL;
GtkWidget *item_ui;
/* We only allow one item to be renamed with a popover */
@@ -708,7 +710,6 @@ real_reveal_for_selection_context_menu (NautilusFilesView *files_view)
guint n_selected;
GtkWidget *focus_child;
guint i;
- NautilusViewItemModel *item;
GtkWidget *item_ui;
selection = gtk_selection_filter_model_new (GTK_SELECTION_MODEL (self->model));
@@ -720,6 +721,8 @@ real_reveal_for_selection_context_menu (NautilusFilesView *files_view)
focus_child = gtk_widget_get_focus_child (GTK_WIDGET (self->view_ui));
for (i = 0; i < n_selected; i++)
{
+ g_autoptr (NautilusViewItemModel) item = NULL;
+
item = g_list_model_get_item (G_LIST_MODEL (selection), i);
item_ui = nautilus_view_item_model_get_item_ui (item);
if (item_ui != NULL && gtk_widget_get_parent (item_ui) == focus_child)
@@ -954,7 +957,7 @@ get_first_visible_item (NautilusViewIconController *self)
scrolled_y = gtk_adjustment_get_value (self->vadjustment);
for (guint i = 0; i < n_items; i++)
{
- NautilusViewItemModel *item;
+ g_autoptr (NautilusViewItemModel) item = NULL;
GtkWidget *item_ui;
item = g_list_model_get_item (G_LIST_MODEL (self->model), i);
@@ -980,7 +983,7 @@ real_get_first_visible_file (NautilusFilesView *files_view)
{
NautilusViewIconController *self = NAUTILUS_VIEW_ICON_CONTROLLER (files_view);
guint i;
- NautilusViewItemModel *item;
+ g_autoptr (NautilusViewItemModel) item = NULL;
gchar *uri = NULL;
i = get_first_visible_item (self);
@@ -1137,7 +1140,7 @@ static void
real_select_first (NautilusFilesView *files_view)
{
NautilusViewIconController *self = NAUTILUS_VIEW_ICON_CONTROLLER (files_view);
- NautilusViewItemModel *item;
+ g_autoptr (NautilusViewItemModel) item = NULL;
NautilusFile *file;
g_autoptr (GList) selection = NULL;
@@ -1236,7 +1239,7 @@ prioritize_thumbnailing_on_idle (NautilusViewIconController *self)
guint next_index;
gdouble y;
guint last_index;
- NautilusViewItemModel *item;
+ g_autoptr (NautilusViewItemModel) first_item = NULL;
NautilusFile *file;
self->prioritize_thumbnailing_handle_id = 0;
@@ -1248,15 +1251,16 @@ prioritize_thumbnailing_on_idle (NautilusViewIconController *self)
return;
}
- item = g_list_model_get_item (G_LIST_MODEL (self->model), first_index);
+ first_item = g_list_model_get_item (G_LIST_MODEL (self->model), first_index);
- first_visible_child = nautilus_view_item_model_get_item_ui (item);
+ first_visible_child = nautilus_view_item_model_get_item_ui (first_item);
for (next_index = first_index + 1; next_index < g_list_model_get_n_items (G_LIST_MODEL (self->model));
next_index++)
{
- item = g_list_model_get_item (G_LIST_MODEL (self->model), next_index);
+ g_autoptr (NautilusViewItemModel) next_item = NULL;
- next_child = nautilus_view_item_model_get_item_ui (item);
+ next_item = g_list_model_get_item (G_LIST_MODEL (self->model), next_index);
+ next_child = nautilus_view_item_model_get_item_ui (next_item);
if (next_child == NULL)
{
break;
@@ -1275,6 +1279,8 @@ prioritize_thumbnailing_on_idle (NautilusViewIconController *self)
/* Do the iteration in reverse to give higher priority to the top */
for (gint i = 0; i <= last_index - first_index; i++)
{
+ g_autoptr (NautilusViewItemModel) item = NULL;
+
item = g_list_model_get_item (G_LIST_MODEL (self->model), last_index - i);
g_return_if_fail (item != NULL);
diff --git a/src/nautilus-view-model.c b/src/nautilus-view-model.c
index 4c5d15011..947bfa2c2 100644
--- a/src/nautilus-view-model.c
+++ b/src/nautilus-view-model.c
@@ -292,22 +292,24 @@ nautilus_view_model_get_items_from_files (NautilusViewModel *self,
GQueue *files)
{
GList *l;
- NautilusViewItemModel *item_model;
+ guint n_items;
GQueue *item_models;
+ n_items = g_list_model_get_n_items (G_LIST_MODEL (self->internal_model));
item_models = g_queue_new ();
for (l = g_queue_peek_head_link (files); l != NULL; l = l->next)
{
NautilusFile *file1;
- gint i = 0;
file1 = NAUTILUS_FILE (l->data);
- while ((item_model = g_list_model_get_item (G_LIST_MODEL (self->internal_model), i)))
+ for (guint i = 0; i < n_items; i++)
{
+ g_autoptr (NautilusViewItemModel) item_model = NULL;
NautilusFile *file2;
g_autofree gchar *file1_uri = NULL;
g_autofree gchar *file2_uri = NULL;
+ item_model = g_list_model_get_item (G_LIST_MODEL (self->internal_model), i);
file2 = nautilus_view_item_model_get_file (item_model);
file1_uri = nautilus_file_get_uri (file1);
file2_uri = nautilus_file_get_uri (file2);
@@ -316,8 +318,6 @@ nautilus_view_model_get_items_from_files (NautilusViewModel *self,
g_queue_push_tail (item_models, item_model);
break;
}
-
- i++;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]