[gnome-builder] gui: add helper to get workbench from context



commit 5bb7b1da914b007dc1751c5242d07b4c79d0db09
Author: Christian Hergert <chergert redhat com>
Date:   Wed Mar 13 23:19:14 2019 -0700

    gui: add helper to get workbench from context
    
    This private function can be used to get a workbench from a
    given context pointer. In 3.34, we can probably make it public
    but I don't want to add new API during patch releases.

 src/libide/gui/ide-gui-private.h |  1 +
 src/libide/gui/ide-workbench.c   | 24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+)
---
diff --git a/src/libide/gui/ide-gui-private.h b/src/libide/gui/ide-gui-private.h
index 634312a3d..a400d0eb8 100644
--- a/src/libide/gui/ide-gui-private.h
+++ b/src/libide/gui/ide-gui-private.h
@@ -93,6 +93,7 @@ void      _ide_workspace_set_context            (IdeWorkspace        *workspace,
                                                  IdeContext          *context);
 gboolean  _ide_workbench_is_last_workspace      (IdeWorkbench        *self,
                                                  IdeWorkspace        *workspace);
+IdeWorkbench *_ide_workbench_from_context       (IdeContext           *context);
 void      _ide_header_bar_init_shortcuts        (IdeHeaderBar        *self);
 void      _ide_header_bar_show_menu             (IdeHeaderBar        *self);
 void      _ide_gtk_progress_bar_start_pulsing   (GtkProgressBar      *progress);
diff --git a/src/libide/gui/ide-workbench.c b/src/libide/gui/ide-workbench.c
index cdec87604..4690d914b 100644
--- a/src/libide/gui/ide-workbench.c
+++ b/src/libide/gui/ide-workbench.c
@@ -171,6 +171,24 @@ ignore_error (GError *error)
          g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED);
 }
 
+/**
+ * ide_workbench_from_context:
+ * @context: an #IdeContext
+ *
+ * Helper to get the #IdeWorkbench for a given context.
+ *
+ * Returns: (transfer none) (nullable): an #IdeWorkbench or %NULL
+ *
+ * Since: 3.34
+ */
+IdeWorkbench *
+_ide_workbench_from_context (IdeContext *context)
+{
+  g_return_val_if_fail (IDE_IS_CONTEXT (context), NULL);
+
+  return IDE_WORKBENCH (g_object_get_data (G_OBJECT (context), "WORKBENCH"));
+}
+
 static void
 ide_workbench_set_context (IdeWorkbench *self,
                            IdeContext   *context)
@@ -185,6 +203,9 @@ ide_workbench_set_context (IdeWorkbench *self,
   if (context == NULL)
     context = new_context = ide_context_new ();
 
+  /* backpointer for the workbench */
+  g_object_set_data (G_OBJECT (context), "WORKBENCH", self);
+
   g_set_object (&self->context, context);
 
   /* Make sure we have access to buffer manager early */
@@ -366,6 +387,9 @@ ide_workbench_finalize (GObject *object)
 
   g_assert (IDE_IS_MAIN_THREAD ());
 
+  if (self->context != NULL)
+    g_object_set_data (G_OBJECT (self->context), "WORKBENCH", NULL);
+
   g_clear_object (&self->build_system);
   g_clear_object (&self->vcs);
   g_clear_object (&self->search_engine);


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