[gnome-builder] foundry: add pipeline addin prepare phase
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] foundry: add pipeline addin prepare phase
- Date: Sat, 30 Mar 2019 00:37:20 +0000 (UTC)
commit f2b58e0b9aeabf422f75afaea04a7cb69d800b2b
Author: Christian Hergert <chergert redhat com>
Date: Fri Mar 29 17:35:10 2019 -0700
foundry: add pipeline addin prepare phase
This allows connecting to pipeline signals before the pipeline addins
load. That might be necessary to modify launchers.
src/libide/foundry/ide-pipeline-addin.c | 29 +++++++++++++++++++++++++++--
src/libide/foundry/ide-pipeline-addin.h | 25 +++++++++++++++----------
src/libide/foundry/ide-pipeline.c | 32 +++++++++++++++++++++++++++++++-
3 files changed, 73 insertions(+), 13 deletions(-)
---
diff --git a/src/libide/foundry/ide-pipeline-addin.c b/src/libide/foundry/ide-pipeline-addin.c
index ddb30331b..fceca8fec 100644
--- a/src/libide/foundry/ide-pipeline-addin.c
+++ b/src/libide/foundry/ide-pipeline-addin.c
@@ -32,9 +32,34 @@ ide_pipeline_addin_default_init (IdePipelineAddinInterface *iface)
{
}
+/**
+ * ide_pipeline_addin_prepare:
+ * @self: a #IdePipelineAddin
+ * @pipeline: an #IdePipeline
+ *
+ * This function is called before prepare so that plugins may setup
+ * signals on the pipeline that may allow them to affect how other
+ * plugins interact.
+ *
+ * For example, if you need to connect to pipeline::launcher-created,
+ * you might want to do that here.
+ *
+ * Since: 3.34
+ */
+void
+ide_pipeline_addin_prepare (IdePipelineAddin *self,
+ IdePipeline *pipeline)
+{
+ g_return_if_fail (IDE_IS_PIPELINE_ADDIN (self));
+ g_return_if_fail (IDE_IS_PIPELINE (pipeline));
+
+ if (IDE_PIPELINE_ADDIN_GET_IFACE (self)->prepare)
+ IDE_PIPELINE_ADDIN_GET_IFACE (self)->prepare (self, pipeline);
+}
+
void
ide_pipeline_addin_load (IdePipelineAddin *self,
- IdePipeline *pipeline)
+ IdePipeline *pipeline)
{
g_return_if_fail (IDE_IS_PIPELINE_ADDIN (self));
g_return_if_fail (IDE_IS_PIPELINE (pipeline));
@@ -45,7 +70,7 @@ ide_pipeline_addin_load (IdePipelineAddin *self,
void
ide_pipeline_addin_unload (IdePipelineAddin *self,
- IdePipeline *pipeline)
+ IdePipeline *pipeline)
{
GArray *ar;
diff --git a/src/libide/foundry/ide-pipeline-addin.h b/src/libide/foundry/ide-pipeline-addin.h
index 8515f638f..326aa29cb 100644
--- a/src/libide/foundry/ide-pipeline-addin.h
+++ b/src/libide/foundry/ide-pipeline-addin.h
@@ -39,20 +39,25 @@ struct _IdePipelineAddinInterface
{
GTypeInterface type_interface;
- void (*load) (IdePipelineAddin *self,
- IdePipeline *pipeline);
- void (*unload) (IdePipelineAddin *self,
- IdePipeline *pipeline);
+ void (*load) (IdePipelineAddin *self,
+ IdePipeline *pipeline);
+ void (*unload) (IdePipelineAddin *self,
+ IdePipeline *pipeline);
+ void (*prepare) (IdePipelineAddin *self,
+ IdePipeline *pipeline);
};
+IDE_AVAILABLE_IN_3_34
+void ide_pipeline_addin_prepare (IdePipelineAddin *self,
+ IdePipeline *pipeline);
IDE_AVAILABLE_IN_3_32
-void ide_pipeline_addin_load (IdePipelineAddin *self,
- IdePipeline *pipeline);
+void ide_pipeline_addin_load (IdePipelineAddin *self,
+ IdePipeline *pipeline);
IDE_AVAILABLE_IN_3_32
-void ide_pipeline_addin_unload (IdePipelineAddin *self,
- IdePipeline *pipeline);
+void ide_pipeline_addin_unload (IdePipelineAddin *self,
+ IdePipeline *pipeline);
IDE_AVAILABLE_IN_3_32
-void ide_pipeline_addin_track (IdePipelineAddin *self,
- guint stage_id);
+void ide_pipeline_addin_track (IdePipelineAddin *self,
+ guint stage_id);
G_END_DECLS
diff --git a/src/libide/foundry/ide-pipeline.c b/src/libide/foundry/ide-pipeline.c
index 4864269a0..d3e83ecfe 100644
--- a/src/libide/foundry/ide-pipeline.c
+++ b/src/libide/foundry/ide-pipeline.c
@@ -940,6 +940,27 @@ ide_pipeline_real_finished (IdePipeline *self,
IDE_EXIT;
}
+static void
+ide_pipeline_extension_prepare (IdeExtensionSetAdapter *set,
+ PeasPluginInfo *plugin_info,
+ PeasExtension *exten,
+ gpointer user_data)
+{
+ IdePipeline *self = user_data;
+ IdePipelineAddin *addin = (IdePipelineAddin *)exten;
+
+ IDE_ENTRY;
+
+ g_assert (IDE_IS_EXTENSION_SET_ADAPTER (set));
+ g_assert (plugin_info != NULL);
+ g_assert (IDE_IS_PIPELINE_ADDIN (addin));
+ g_assert (IDE_IS_PIPELINE (self));
+
+ ide_pipeline_addin_prepare (addin, self);
+
+ IDE_EXIT;
+}
+
static void
ide_pipeline_extension_added (IdeExtensionSetAdapter *set,
PeasPluginInfo *plugin_info,
@@ -1193,9 +1214,18 @@ ide_pipeline_load (IdePipeline *self)
g_signal_connect (self->addins,
"extension-added",
- G_CALLBACK (ide_pipeline_extension_added),
+ G_CALLBACK (ide_pipeline_extension_prepare),
self);
+ ide_extension_set_adapter_foreach (self->addins,
+ ide_pipeline_extension_prepare,
+ self);
+
+ g_signal_connect_after (self->addins,
+ "extension-added",
+ G_CALLBACK (ide_pipeline_extension_added),
+ self);
+
g_signal_connect (self->addins,
"extension-removed",
G_CALLBACK (ide_pipeline_extension_removed),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]