[gnome-builder] projects: use GListModel properly for project info removal



commit 13d4491b7e46888bbeab1754939eb7b6dce7ee56
Author: Christian Hergert <chergert redhat com>
Date:   Fri Jun 26 15:08:38 2020 -0700

    projects: use GListModel properly for project info removal

 src/libide/projects/ide-recent-projects.c | 6 +++++-
 src/plugins/recent/gbp-recent-section.c   | 7 +++----
 2 files changed, 8 insertions(+), 5 deletions(-)
---
diff --git a/src/libide/projects/ide-recent-projects.c b/src/libide/projects/ide-recent-projects.c
index ededc3ae0..d5171cc8b 100644
--- a/src/libide/projects/ide-recent-projects.c
+++ b/src/libide/projects/ide-recent-projects.c
@@ -358,8 +358,10 @@ ide_recent_projects_remove (IdeRecentProjects *self,
       g_autofree gchar *file_uri = NULL;
       GSequenceIter *iter;
       GFile *file;
+      guint position;
 
-      g_assert (IDE_IS_PROJECT_INFO (liter->data));
+      g_assert (IDE_IS_PROJECT_INFO (project_info));
+      g_assert (self->projects != NULL);
 
       iter = g_sequence_lookup (self->projects,
                                 project_info,
@@ -397,7 +399,9 @@ ide_recent_projects_remove (IdeRecentProjects *self,
           g_clear_error (&error);
         }
 
+      position = g_sequence_iter_get_position (iter);
       g_sequence_remove (iter);
+      g_list_model_items_changed (G_LIST_MODEL (self), position, 1, 0);
     }
 
   if (!g_bookmark_file_to_file (projects_file, self->file_uri, &error))
diff --git a/src/plugins/recent/gbp-recent-section.c b/src/plugins/recent/gbp-recent-section.c
index 26c7be91f..fd5bc61e8 100644
--- a/src/plugins/recent/gbp-recent-section.c
+++ b/src/plugins/recent/gbp-recent-section.c
@@ -253,7 +253,6 @@ gbp_recent_section_collect_selected_cb (GtkWidget *widget,
 
       project_info = ide_greeter_row_get_project_info (row);
       *list = g_list_prepend (*list, g_object_ref (project_info));
-      gtk_widget_destroy (GTK_WIDGET (row));
     }
 }
 
@@ -380,7 +379,6 @@ gbp_recent_section_purge_selected_full (IdeGreeterSection *section,
 
   /* Remove the projects from the list of recent projects */
   projects = ide_recent_projects_get_default ();
-  ide_recent_projects_remove (projects, infos);
 
   /* Now asynchronously remove all the project files */
   reaper = dzl_directory_reaper_new ();
@@ -388,7 +386,7 @@ gbp_recent_section_purge_selected_full (IdeGreeterSection *section,
 
   for (const GList *iter = infos; iter != NULL; iter = iter->next)
     {
-      g_autoptr(IdeProjectInfo) info = iter->data;
+      IdeProjectInfo *info = iter->data;
       const gchar *name = ide_project_info_get_name (info);
       GFile *directory = _ide_project_info_get_real_directory (info);
       GFile *file = ide_project_info_get_file (info);
@@ -507,7 +505,8 @@ gbp_recent_section_purge_selected_full (IdeGreeterSection *section,
                                       gbp_recent_section_reap_cb,
                                       g_steal_pointer (&directories));
 
-  g_list_free (infos);
+  ide_recent_projects_remove (projects, infos);
+  g_list_free_full (infos, g_object_unref);
 }
 
 static void


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