[gnome-builder] context: reap old buffers before restoring



commit 6b59c8b312fb1343c31a967578581a7c59ceb1b0
Author: Christian Hergert <chergert redhat com>
Date:   Wed Jan 24 18:47:23 2018 -0800

    context: reap old buffers before restoring
    
    When combined with the previous commit, we explicitly force reaping of
    old buffers instead of relying on the initialization to (incorrectly)
    do so.

 src/libide/ide-context.c | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)
---
diff --git a/src/libide/ide-context.c b/src/libide/ide-context.c
index eca239db0..fdddd796e 100644
--- a/src/libide/ide-context.c
+++ b/src/libide/ide-context.c
@@ -1125,6 +1125,42 @@ ide_context_init_runtimes (gpointer             source_object,
     g_task_return_boolean (task, TRUE);
 }
 
+static void
+ide_context_reap_unsaved_files_cb (GObject      *object,
+                                   GAsyncResult *result,
+                                   gpointer      user_data)
+{
+  IdeUnsavedFiles *unsaved_files = (IdeUnsavedFiles *)object;
+  g_autoptr(GTask) task = user_data;
+  g_autoptr(GError) error = NULL;
+
+  g_assert (IDE_IS_UNSAVED_FILES (unsaved_files));
+
+  if (!ide_unsaved_files_reap_finish (unsaved_files, result, &error))
+    g_task_return_error (task, g_steal_pointer (&error));
+  else
+    g_task_return_boolean (task, TRUE);
+}
+
+static void
+ide_context_reap_unsaved_files (gpointer             source_object,
+                                GCancellable        *cancellable,
+                                GAsyncReadyCallback  callback,
+                                gpointer             user_data)
+{
+  IdeContext *self = source_object;
+  g_autoptr(GTask) task = NULL;
+
+  g_return_if_fail (IDE_IS_CONTEXT (self));
+
+  task = g_task_new (self, cancellable, callback, user_data);
+  g_task_set_source_tag (task, ide_context_reap_unsaved_files);
+  ide_unsaved_files_reap_async (self->unsaved_files,
+                                cancellable,
+                                ide_context_reap_unsaved_files_cb,
+                               g_steal_pointer (&task));
+}
+
 static void
 ide_context_init_unsaved_files_cb (GObject      *object,
                                    GAsyncResult *result,
@@ -1154,10 +1190,11 @@ ide_context_init_unsaved_files (gpointer             source_object,
   g_return_if_fail (IDE_IS_CONTEXT (self));
 
   task = g_task_new (self, cancellable, callback, user_data);
+  g_task_set_source_tag (task, ide_context_init_unsaved_files);
   ide_unsaved_files_restore_async (self->unsaved_files,
                                    cancellable,
                                    ide_context_init_unsaved_files_cb,
-                                   g_object_ref (task));
+                                  g_steal_pointer (&task));
 }
 
 static void
@@ -1750,6 +1787,7 @@ ide_context_init_async (GAsyncInitable      *initable,
                         ide_context_init_services,
                         ide_context_init_project_name,
                         ide_context_init_snippets,
+                        ide_context_reap_unsaved_files,
                         ide_context_init_unsaved_files,
                         ide_context_init_add_recent,
                         ide_context_init_search_engine,


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