[gnome-builder/wip/chergert/layout] workbench: add helper to locate addin by module name



commit dc69d9ad5512b989023b7e250ca129b99daa4cc1
Author: Christian Hergert <chergert redhat com>
Date:   Fri Jul 14 15:43:29 2017 -0700

    workbench: add helper to locate addin by module name
    
    It can be convenient to get at a peer object in your plugin
    based on the module name rather than resorting to something
    like g_object_set_data().

 libide/workbench/ide-workbench-addin.c |   29 +++++++++++++++++++++++++++++
 libide/workbench/ide-workbench-addin.h |    3 +++
 2 files changed, 32 insertions(+), 0 deletions(-)
---
diff --git a/libide/workbench/ide-workbench-addin.c b/libide/workbench/ide-workbench-addin.c
index 5704953..246375b 100644
--- a/libide/workbench/ide-workbench-addin.c
+++ b/libide/workbench/ide-workbench-addin.c
@@ -216,3 +216,32 @@ ide_workbench_addin_perspective_set (IdeWorkbenchAddin *self,
 
   IDE_WORKBENCH_ADDIN_GET_IFACE (self)->perspective_set (self, perspective);
 }
+
+/**
+ * ide_workbench_addin_find_by_module_name:
+ * @workbench: a #IdeWorkbench
+ * @addin_name: the name of the addin
+ *
+ * This locates a loaded #IdeWorkbenchAddin based on the module name.
+ * If the module is missing or has not been loaded, %NULL is returned.
+ *
+ * Returns: (transfer none) (nullable): An #IdeWorkbenchAddin or %NULL
+ *
+ * Since: 3.26
+ */
+IdeWorkbenchAddin *
+ide_workbench_addin_find_by_module_name (IdeWorkbench *workbench,
+                                         const gchar  *module_name)
+{
+  PeasPluginInfo *plugin_info;
+  PeasExtension *exten = NULL;
+
+  g_return_val_if_fail (IDE_IS_WORKBENCH (workbench), NULL);
+  g_return_val_if_fail (module_name != NULL, NULL);
+
+  plugin_info = peas_engine_get_plugin_info (peas_engine_get_default (), module_name);
+  if (plugin_info != NULL)
+    exten = peas_extension_set_get_extension (workbench->addins, plugin_info);
+
+  return exten ? IDE_WORKBENCH_ADDIN (exten) : NULL;
+}
diff --git a/libide/workbench/ide-workbench-addin.h b/libide/workbench/ide-workbench-addin.h
index 1b01fdc..d71ba9e 100644
--- a/libide/workbench/ide-workbench-addin.h
+++ b/libide/workbench/ide-workbench-addin.h
@@ -56,6 +56,9 @@ struct _IdeWorkbenchAddinInterface
                                 IdePerspective         *perspective);
 };
 
+IdeWorkbenchAddin *ide_workbench_addin_find_by_module_name (IdeWorkbench *workbench,
+                                                            const gchar  *addin_name);
+
 gchar    *ide_workbench_addin_get_id          (IdeWorkbenchAddin      *self);
 void      ide_workbench_addin_load            (IdeWorkbenchAddin      *self,
                                                IdeWorkbench           *workbench);


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