diff options
author | Corey Berla <corey@berla.me> | 2023-01-15 15:27:25 -0800 |
---|---|---|
committer | António Fernandes <antoniof@gnome.org> | 2023-01-16 22:06:16 +0000 |
commit | 109cd125a73793b99060fca6c07faf37a90e27a3 (patch) | |
tree | 5ac54a61066b9941d4ff2b991fa0db7f8dd13261 | |
parent | 47b48cb8d1b8d9252c85e814dbc305a125b0b7ec (diff) | |
download | nautilus-109cd125a73793b99060fca6c07faf37a90e27a3.tar.gz |
general: Stop leaking NautilusViewItem
We are still leaking NautilusViewItem in several places. Essentially
every NautilusViewItem (and thus every NautilusFile) ever created is
leaked. In list-base, the queue in real_add_files is freed, but not
the items themselves. Make sure to also free the results of
g_list_model_get_item() and our macro listitem_get_view_item which now
calls gtk_tree_list_row_get_item.
-rw-r--r-- | src/nautilus-grid-view.c | 4 | ||||
-rw-r--r-- | src/nautilus-list-base.c | 6 | ||||
-rw-r--r-- | src/nautilus-list-view.c | 4 |
3 files changed, 8 insertions, 6 deletions
diff --git a/src/nautilus-grid-view.c b/src/nautilus-grid-view.c index 7a2e2f90c..269e57072 100644 --- a/src/nautilus-grid-view.c +++ b/src/nautilus-grid-view.c @@ -441,7 +441,7 @@ bind_cell (GtkSignalListItemFactory *factory, gpointer user_data) { GtkWidget *cell; - NautilusViewItem *item; + g_autoptr (NautilusViewItem) item = NULL; cell = gtk_list_item_get_child (listitem); item = listitem_get_view_item (listitem); @@ -475,7 +475,7 @@ unbind_cell (GtkSignalListItemFactory *factory, GtkListItem *listitem, gpointer user_data) { - NautilusViewItem *item; + g_autoptr (NautilusViewItem) item = NULL; item = listitem_get_view_item (listitem); diff --git a/src/nautilus-list-base.c b/src/nautilus-list-base.c index 46d28e882..05385f561 100644 --- a/src/nautilus-list-base.c +++ b/src/nautilus-list-base.c @@ -1468,7 +1468,7 @@ real_add_files (NautilusFilesView *files_view, NautilusListBase *self = NAUTILUS_LIST_BASE (files_view); NautilusListBasePrivate *priv = nautilus_list_base_get_instance_private (self); g_autoptr (GQueue) files_queue = NULL; - g_autoptr (GQueue) items = NULL; + g_autoqueue (NautilusViewItem) items = NULL; files_queue = convert_glist_to_queue (files); items = convert_files_to_items (self, files_queue); @@ -1562,6 +1562,7 @@ real_preview_selection_event (NautilusFilesView *files_view, { NautilusListBase *self = NAUTILUS_LIST_BASE (files_view); NautilusListBasePrivate *priv = nautilus_list_base_get_instance_private (self); + g_autoptr (NautilusViewItem) item = NULL; guint i; gboolean rtl = (gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL); @@ -1587,7 +1588,8 @@ real_preview_selection_event (NautilusFilesView *files_view, } gtk_selection_model_select_item (GTK_SELECTION_MODEL (priv->model), i, TRUE); - set_focus_item (self, g_list_model_get_item (G_LIST_MODEL (priv->model), i)); + item = g_list_model_get_item (G_LIST_MODEL (priv->model), i); + set_focus_item (self, item); } static void diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c index 97257bea4..92fe42250 100644 --- a/src/nautilus-list-view.c +++ b/src/nautilus-list-view.c @@ -1189,7 +1189,7 @@ bind_name_cell (GtkSignalListItemFactory *factory, { GtkWidget *cell; NautilusListView *self = user_data; - NautilusViewItem *item; + g_autoptr (NautilusViewItem) item = NULL; cell = gtk_list_item_get_child (listitem); item = listitem_get_view_item (listitem); @@ -1232,7 +1232,7 @@ unbind_name_cell (GtkSignalListItemFactory *factory, gpointer user_data) { NautilusListView *self = user_data; - NautilusViewItem *item; + g_autoptr (NautilusViewItem) item = NULL; item = listitem_get_view_item (listitem); if (item == NULL) |