[gnome-builder] context: add helper to keep context loaded during object lifetime



commit 0321c23cc36bcb7ece3eb87c73eb20ddd8b0e32b
Author: Christian Hergert <chergert redhat com>
Date:   Wed Jan 13 17:23:48 2016 -0800

    context: add helper to keep context loaded during object lifetime
    
    This is a simple helper to keep an IdeContext loaded during the
    lifetime of an object. Typical usecase might be to attach it to
    a GTask.
    
     task = g_task_new (self, cancellable, callback, user_data);
     ide_context_hold_for_object (context, task);

 libide/ide-context.c |   18 ++++++++++++++++++
 libide/ide-context.h |    2 ++
 2 files changed, 20 insertions(+), 0 deletions(-)
---
diff --git a/libide/ide-context.c b/libide/ide-context.c
index a5a9c97..9ff39dc 100644
--- a/libide/ide-context.c
+++ b/libide/ide-context.c
@@ -1876,6 +1876,24 @@ ide_context_hold (IdeContext *self)
 }
 
 /**
+ * ide_context_hold_for_object:
+ * @self: An #IdeContext
+ * @instance: (type GObject.Object): A #GObject instance
+ *
+ * Adds a hold on @self for the lifetime of @instance.
+ */
+void
+ide_context_hold_for_object (IdeContext *self,
+                             gpointer    instance)
+{
+  g_return_if_fail (IDE_IS_CONTEXT (self));
+  g_return_if_fail (G_IS_OBJECT (instance));
+
+  ide_context_hold (self);
+  g_object_set_data_full (instance, "IDE_CONTEXT", self, (GDestroyNotify)ide_context_release);
+}
+
+/**
  * ide_context_release:
  * @self: the #IdeContext
  *
diff --git a/libide/ide-context.h b/libide/ide-context.h
index 91cec6a..ef249ee 100644
--- a/libide/ide-context.h
+++ b/libide/ide-context.h
@@ -71,6 +71,8 @@ gboolean                  ide_context_restore_finish        (IdeContext
                                                              GAsyncResult         *result,
                                                              GError              **error);
 void                      ide_context_hold                  (IdeContext           *self);
+void                      ide_context_hold_for_object       (IdeContext           *self,
+                                                             gpointer              instance);
 void                      ide_context_release               (IdeContext           *self);
 
 G_END_DECLS


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