[gnome-builder] gui: give IdeApplicationAddin an activate callback



commit 709387cb75724f55d50cbc0d8a51834da2359c50
Author: Christian Hergert <chergert redhat com>
Date:   Thu Jan 10 14:20:16 2019 -0800

    gui: give IdeApplicationAddin an activate callback

 src/libide/gui/ide-application-addin.c | 21 +++++++++++++++++++++
 src/libide/gui/ide-application-addin.h |  5 +++++
 src/libide/gui/ide-application.c       | 21 ++++++++++++++++++++-
 3 files changed, 46 insertions(+), 1 deletion(-)
---
diff --git a/src/libide/gui/ide-application-addin.c b/src/libide/gui/ide-application-addin.c
index 557832e0e..b5e5bee6d 100644
--- a/src/libide/gui/ide-application-addin.c
+++ b/src/libide/gui/ide-application-addin.c
@@ -63,6 +63,27 @@ ide_application_addin_default_init (IdeApplicationAddinInterface *iface)
   iface->unload = ide_application_addin_real_unload;
 }
 
+/**
+ * ide_application_addin_activate:
+ * @self: a #IdeApplicationAddin
+ * @application: an #ideApplication
+ *
+ * This function is activated when the GApplication::activate signal is
+ * emitted.
+ *
+ * Since: 3.32
+ */
+void
+ide_application_addin_activate (IdeApplicationAddin *self,
+                                IdeApplication      *application)
+{
+  g_return_if_fail (IDE_IS_APPLICATION_ADDIN (self));
+  g_return_if_fail (IDE_IS_APPLICATION (application));
+
+  if (IDE_APPLICATION_ADDIN_GET_IFACE (self)->activate)
+    IDE_APPLICATION_ADDIN_GET_IFACE (self)->activate (self, application);
+}
+
 /**
  * ide_application_addin_load:
  * @self: An #IdeApplicationAddin.
diff --git a/src/libide/gui/ide-application-addin.h b/src/libide/gui/ide-application-addin.h
index 5551cd2e7..400a822b8 100644
--- a/src/libide/gui/ide-application-addin.h
+++ b/src/libide/gui/ide-application-addin.h
@@ -53,6 +53,8 @@ struct _IdeApplicationAddinInterface
                                IdeApplication          *application);
   void (*unload)              (IdeApplicationAddin     *self,
                                IdeApplication          *application);
+  void (*activate)            (IdeApplicationAddin     *self,
+                               IdeApplication          *application);
   void (*add_option_entries)  (IdeApplicationAddin     *self,
                                IdeApplication          *application);
   void (*handle_command_line) (IdeApplicationAddin     *self,
@@ -64,6 +66,9 @@ struct _IdeApplicationAddinInterface
                                IdeWorkbench            *workbench);
 };
 
+IDE_AVAILABLE_IN_3_32
+void ide_application_addin_activate            (IdeApplicationAddin     *self,
+                                                IdeApplication          *application);
 IDE_AVAILABLE_IN_3_32
 void ide_application_addin_load                (IdeApplicationAddin     *self,
                                                 IdeApplication          *application);
diff --git a/src/libide/gui/ide-application.c b/src/libide/gui/ide-application.c
index b19e96c4b..e81a70b9b 100644
--- a/src/libide/gui/ide-application.c
+++ b/src/libide/gui/ide-application.c
@@ -228,6 +228,20 @@ ide_application_activate_worker (IdeApplication *self)
   IDE_EXIT;
 }
 
+static void
+ide_application_activate_cb (PeasExtensionSet *set,
+                             PeasPluginInfo   *plugin_info,
+                             PeasExtension    *exten,
+                             gpointer          user_data)
+{
+  g_assert (PEAS_IS_EXTENSION_SET (set));
+  g_assert (plugin_info != NULL);
+  g_assert (IDE_IS_APPLICATION_ADDIN (exten));
+  g_assert (IDE_IS_APPLICATION (user_data));
+
+  ide_application_addin_activate (IDE_APPLICATION_ADDIN (exten), user_data);
+}
+
 static void
 ide_application_activate (GApplication *app)
 {
@@ -242,12 +256,17 @@ ide_application_activate (GApplication *app)
   if (ide_str_equal0 (self->type, "worker"))
     {
       ide_application_activate_worker (self);
-      return;
+      IDE_EXIT;
     }
 
   if ((window = gtk_application_get_active_window (GTK_APPLICATION (self))))
     ide_gtk_window_present (window);
 
+  if (self->addins != NULL)
+    peas_extension_set_foreach (self->addins,
+                                ide_application_activate_cb,
+                                self);
+
   IDE_EXIT;
 }
 


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