From bb3b0c0a009cbf5f699a37c656b43bdc5a12b7b0 Mon Sep 17 00:00:00 2001 From: Felix Riemann Date: Sun, 12 Aug 2012 15:53:18 +0200 Subject: Add new plugin hook for per-application plugins These will be loaded on application initialization and disabled once the application is disposed. origin commit: https://gitlab.gnome.org/GNOME/eog/commit/cdfe77e --- src/eom-application.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/eom-application.c') diff --git a/src/eom-application.c b/src/eom-application.c index 6135ae1..1ab52d1 100644 --- a/src/eom-application.c +++ b/src/eom-application.c @@ -30,6 +30,7 @@ #include "eom-session.h" #include "eom-window.h" #include "eom-application.h" +#include "eom-application-activatable.h" #include "eom-util.h" #include @@ -86,6 +87,9 @@ eom_application_finalize (GObject *object) g_free (application->toolbars_file); application->toolbars_file = NULL; } + + g_clear_object (&application->extensions); + if (application->plugin_engine) { g_object_unref (application->plugin_engine); application->plugin_engine = NULL; @@ -146,6 +150,24 @@ eom_application_class_init (EomApplicationClass *eom_application_class) application_class->before_emit = eom_application_before_emit; } +static void +on_extension_added (PeasExtensionSet *set, + PeasPluginInfo *info, + PeasExtension *exten, + EomApplication *app) +{ + eom_application_activatable_activate (EOM_APPLICATION_ACTIVATABLE (exten)); +} + +static void +on_extension_removed (PeasExtensionSet *set, + PeasPluginInfo *info, + PeasExtension *exten, + EomApplication *app) +{ + eom_application_activatable_deactivate (EOM_APPLICATION_ACTIVATABLE (exten)); +} + static void eom_application_init (EomApplication *eom_application) { @@ -175,6 +197,17 @@ eom_application_init (EomApplication *eom_application) EGG_TB_MODEL_NOT_REMOVABLE); eom_application_load_accelerators (); + + eom_application->extensions = peas_extension_set_new ( + PEAS_ENGINE (eom_application->plugin_engine), + EOM_TYPE_APPLICATION_ACTIVATABLE, + "app", EOM_APPLICATION (eom_application), + NULL); + peas_extension_set_call (eom_application->extensions, "activate"); + g_signal_connect (eom_application->extensions, "extension-added", + G_CALLBACK (on_extension_added), eom_application); + g_signal_connect (eom_application->extensions, "extension-removed", + G_CALLBACK (on_extension_removed), eom_application); } /** -- cgit v1.2.1