static void ide_application_plugins_enabled_changed (IdeApplication *self, const gchar *key, GSettings *settings) { PeasPluginInfo *plugin_info; PeasEngine *engine; gboolean enabled; g_assert (IDE_IS_APPLICATION (self)); g_assert (dzl_str_equal0 (key, "enabled")); g_assert (G_IS_SETTINGS (settings)); enabled = g_settings_get_boolean (settings, key); engine = peas_engine_get_default (); plugin_info = g_object_get_data (G_OBJECT (settings), "PEAS_PLUGIN_INFO"); g_assert (plugin_info != NULL); if (enabled && ide_application_can_load_plugin (self, plugin_info) && !peas_plugin_info_is_loaded (plugin_info)) peas_engine_load_plugin (engine, plugin_info); else if (!enabled && peas_plugin_info_is_loaded (plugin_info)) peas_engine_unload_plugin (engine, plugin_info); }
static void test_extension_seed_plugin_info (PeasEngine *engine) { PeasPluginInfo *info; PeasExtension *extension; PeasExtensionSeed *sexten; SeedValue seed_value; GValue gvalue = { 0 }; info = peas_engine_get_plugin_info (engine, "extension-seed"); g_assert (peas_engine_load_plugin (engine, info)); extension = peas_engine_create_extension (engine, info, INTROSPECTION_TYPE_CALLABLE, NULL); g_assert (PEAS_IS_EXTENSION (extension)); sexten = (PeasExtensionSeed *) extension; seed_value = seed_object_get_property (sexten->js_context, sexten->js_object, "plugin_info"); g_assert (seed_value_to_gvalue (sexten->js_context, seed_value, PEAS_TYPE_PLUGIN_INFO, &gvalue, NULL)); g_assert (g_value_get_boxed (&gvalue) == info); g_value_unset (&gvalue); g_object_unref (extension); }
static void test_extension_gjs_plugin_info (PeasEngine *engine) { PeasPluginInfo *info; PeasExtension *extension; PeasExtensionGjs *gexten; jsval js_value; GValue gvalue = { 0 }; info = peas_engine_get_plugin_info (engine, "extension-gjs"); g_assert (peas_engine_load_plugin (engine, info)); extension = peas_engine_create_extension (engine, info, INTROSPECTION_TYPE_CALLABLE, NULL); g_assert (PEAS_IS_EXTENSION (extension)); gexten = (PeasExtensionGjs *) extension; g_value_init (&gvalue, PEAS_TYPE_PLUGIN_INFO); g_assert (JS_GetProperty (gexten->js_context, gexten->js_object, "plugin_info", &js_value)); g_assert (gjs_value_to_g_value (gexten->js_context, js_value, &gvalue)); g_assert (g_value_get_boxed (&gvalue) == info); g_value_unset (&gvalue); g_object_unref (extension); }
static void test_extension_gjs_nonexistent (PeasEngine *engine) { PeasPluginInfo *info; testing_util_push_log_hook ("*Failed to open *extension-gjs-nonexistent.js*"); testing_util_push_log_hook ("Error loading plugin 'extension-gjs-nonexistent'"); info = peas_engine_get_plugin_info (engine, "extension-gjs-nonexistent"); g_assert (!peas_engine_load_plugin (engine, info)); }
static void on_plugin_list_notify(PeasEngine *engine, GParamSpec *pspec, gpointer user_data) { const GList *plugins = peas_engine_get_plugin_list(engine); while (plugins != NULL) { PeasPluginInfo *info = PEAS_PLUGIN_INFO(plugins->data); peas_engine_load_plugin(engine, info); plugins = plugins->next; } }
void ide_application_load_plugins (IdeApplication *self) { PeasEngine *engine; const GList *list; g_return_if_fail (IDE_IS_APPLICATION (self)); engine = peas_engine_get_default (); list = peas_engine_get_plugin_list (engine); for (; list; list = list->next) { PeasPluginInfo *plugin_info = list->data; GSettings *settings; const gchar *module_name; module_name = peas_plugin_info_get_module_name (plugin_info); settings = _ide_application_plugin_get_settings (self, module_name); g_object_set_data (G_OBJECT (settings), "PEAS_PLUGIN_INFO", plugin_info); g_signal_connect_object (settings, "changed::enabled", G_CALLBACK (ide_application_plugins_enabled_changed), self, G_CONNECT_SWAPPED); if (!g_settings_get_boolean (settings, "enabled")) continue; /* * If we are running the unit tests, we don't want to load plugins here, * but defer until the test is loading to perform the loading. However, * we do want all of the other machinery above to be setup. */ if (self->mode == IDE_APPLICATION_MODE_TESTS) continue; if (ide_application_can_load_plugin (self, plugin_info)) { g_debug ("Loading plugin \"%s\"", peas_plugin_info_get_module_name (plugin_info)); peas_engine_load_plugin (engine, plugin_info); } } }
static void liferea_plugins_engine_init (LifereaPluginsEngine * engine) { gchar *typelib_dir; GError *error = NULL; PeasPluginInfo *plugin_installer_plugin_info = NULL; engine->priv = G_TYPE_INSTANCE_GET_PRIVATE (engine, LIFEREA_TYPE_PLUGINS_ENGINE, LifereaPluginsEnginePrivate); peas_engine_enable_loader (PEAS_ENGINE (engine), "python3"); engine->priv->plugin_settings = g_settings_new ("net.sf.liferea.plugins"); /* Require Lifereas's typelib. */ typelib_dir = g_build_filename (PACKAGE_LIB_DIR, "girepository-1.0", NULL); if (!g_irepository_require_private (g_irepository_get_default (), typelib_dir, "Liferea", "3.0", 0, &error)) { g_warning ("Could not load Liferea repository: %s", error->message); g_error_free (error); error = NULL; } g_free (typelib_dir); /* This should be moved to libpeas */ if (!g_irepository_require (g_irepository_get_default (), "Peas", "1.0", 0, &error)) { g_warning ("Could not load Peas repository: %s", error->message); g_error_free (error); error = NULL; } if (!g_irepository_require (g_irepository_get_default (), "PeasGtk", "1.0", 0, &error)) { g_warning ("Could not load PeasGtk repository: %s", error->message); g_error_free (error); error = NULL; } peas_engine_add_search_path (PEAS_ENGINE (engine), g_build_filename (g_get_user_data_dir (), "liferea", "plugins", NULL), g_build_filename (g_get_user_data_dir (), "liferea", "plugins", NULL)); peas_engine_add_search_path (PEAS_ENGINE (engine), g_build_filename (PACKAGE_LIB_DIR, "plugins", NULL), g_build_filename (PACKAGE_DATA_DIR, "plugins", NULL)); g_settings_bind (engine->priv->plugin_settings, "active-plugins", engine, "loaded-plugins", G_SETTINGS_BIND_DEFAULT); plugin_installer_plugin_info = peas_engine_get_plugin_info (PEAS_ENGINE (engine), "plugin-installer"); if (plugin_installer_plugin_info) peas_engine_load_plugin (PEAS_ENGINE (engine), plugin_installer_plugin_info); else g_warning ("The plugin-installer plugin was not found."); }
void gb_plugins_init (void) { PeasEngine *engine; const GList *list; /* * Ensure plugin-extensible types are registered. * This allows libgnome-builder.la to be linked and not drop * important symbols. */ g_type_ensure (GB_TYPE_APPLICATION); g_type_ensure (GB_TYPE_DOCUMENT); g_type_ensure (GB_TYPE_TREE); g_type_ensure (GB_TYPE_TREE_BUILDER); g_type_ensure (GB_TYPE_TREE_NODE); g_type_ensure (GB_TYPE_VIEW); g_type_ensure (GB_TYPE_VIEW_GRID); g_type_ensure (GB_TYPE_WORKBENCH); g_type_ensure (GB_TYPE_WORKSPACE); engine = peas_engine_get_default (); peas_engine_enable_loader (engine, "python3"); if (g_getenv ("GB_IN_TREE_PLUGINS") != NULL) { GDir *dir; g_irepository_require_private (g_irepository_get_default (), BUILDDIR"/libide", "Ide", "1.0", 0, NULL); if ((dir = g_dir_open (BUILDDIR"/plugins", 0, NULL))) { const gchar *name; while ((name = g_dir_read_name (dir))) { gchar *path; path = g_build_filename (BUILDDIR, "plugins", name, NULL); peas_engine_prepend_search_path (engine, path, path); g_free (path); } g_dir_close (dir); } } else { peas_engine_prepend_search_path (engine, PACKAGE_LIBDIR"/gnome-builder/plugins", PACKAGE_DATADIR"/gnome-builder/plugins"); } list = peas_engine_get_plugin_list (engine); for (; list; list = list->next) { if (peas_plugin_info_is_builtin (list->data)) peas_engine_load_plugin (engine, list->data); } }