static void on_extension_removed(PeasExtensionSet *set, PeasPluginInfo *info, PeasExtension *exten, IsApplication *application) { is_debug("main", "Deactivating plugin: %s", peas_plugin_info_get_name(info)); peas_extension_call(exten, "deactivate", application); }
/** * rb_find_plugin_data_file: * @plugin: the plugin object * @name: name of the file to find * * Locates a file under the plugin's data directory. * * Returns: allocated string containing the location of the file */ char * rb_find_plugin_data_file (GObject *object, const char *name) { PeasPluginInfo *info; char *ret = NULL; const char *plugin_name = "<unknown>"; g_object_get (object, "plugin-info", &info, NULL); if (info != NULL) { char *tmp; tmp = g_build_filename (peas_plugin_info_get_data_dir (info), name, NULL); if (g_file_test (tmp, G_FILE_TEST_EXISTS)) { ret = tmp; } else { g_free (tmp); } plugin_name = peas_plugin_info_get_name (info); } if (ret == NULL) { const char *f; f = rb_file (name); if (f != NULL) { ret = g_strdup (f); } } rb_debug ("found '%s' when searching for file '%s' for plugin '%s'", ret, name, plugin_name); /* ensure it's an absolute path */ if (ret != NULL && ret[0] != '/') { char *pwd = g_get_current_dir (); char *path = g_strconcat (pwd, G_DIR_SEPARATOR_S, ret, NULL); g_free (ret); g_free (pwd); ret = path; } return ret; }
static void ide_preferences_builtin_register_plugins (IdePreferences *preferences) { PeasEngine *engine; const GList *list; guint i = 0; g_assert (IDE_IS_PREFERENCES (preferences)); engine = peas_engine_get_default (); list = peas_engine_get_plugin_list (engine); ide_preferences_add_page (preferences, "plugins", _("Extensions"), 700); ide_preferences_add_list_group (preferences, "plugins", "installed", _("Installed Extensions"), 0); ide_preferences_add_list_group (preferences, "plugins", "builtin", _("Bundled Extensions"), 100); for (; list; list = list->next, i++) { g_autofree gchar *path = NULL; PeasPluginInfo *plugin_info = list->data; const gchar *desc; const gchar *name; const gchar *group; if (peas_plugin_info_is_hidden (plugin_info)) continue; name = peas_plugin_info_get_name (plugin_info); desc = peas_plugin_info_get_description (plugin_info); path = g_strdup_printf ("/org/gnome/builder/plugins/%s/", peas_plugin_info_get_module_name (plugin_info)); if (peas_plugin_info_is_builtin (plugin_info)) group = "builtin"; else group = "installed"; ide_preferences_add_switch (preferences, "plugins", group, "org.gnome.builder.plugin", "enabled", path, NULL, name, desc, NULL, i); } }
static void mnb_home_new_widget_dialog_init (MnbHomeNewWidgetDialog *self) { ClutterActor *table, *itemview; MnbHomeNewWidgetDialogItemFactory *factory; MnbHomePluginsEngine *engine; const GList *l; self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MNB_TYPE_HOME_NEW_WIDGET_DIALOG, MnbHomeNewWidgetDialogPrivate); /* set up model and view */ self->priv->items = clutter_list_model_new (ITEMS_N_COLUMNS, G_TYPE_STRING, "Module", /* ITEMS_MODULE */ G_TYPE_STRING, "Name", /* ITEMS_NAME */ G_TYPE_STRING, "Icon" /* ITEMS_ICON */); table = mx_table_new (); mx_bin_set_child (MX_BIN (self), table); factory = g_object_new (MNB_TYPE_HOME_NEW_WIDGET_DIALOG_ITEM_FACTORY, NULL); factory->dialog = self; itemview = mx_item_view_new (); mx_table_add_actor (MX_TABLE (table), itemview, 0, 1); mx_item_view_set_model (MX_ITEM_VIEW (itemview), self->priv->items); mx_item_view_set_factory (MX_ITEM_VIEW (itemview), MX_ITEM_FACTORY (factory)); mx_item_view_add_attribute (MX_ITEM_VIEW (itemview), "module", ITEMS_MODULE); mx_item_view_add_attribute (MX_ITEM_VIEW (itemview), "label", ITEMS_NAME); mx_item_view_add_attribute (MX_ITEM_VIEW (itemview), "icon", ITEMS_ICON); clutter_actor_show_all (table); /* find plugins */ /* FIXME: should we monitor for new plugins on the fly? */ engine = mnb_home_plugins_engine_dup (); for (l = peas_engine_get_plugin_list (PEAS_ENGINE (engine)); l != NULL; l = g_list_next (l)) { PeasPluginInfo *info = l->data; char *icon; if (!peas_plugin_info_is_available (info, NULL)) continue; icon = g_build_filename ( peas_plugin_info_get_module_dir (info), peas_plugin_info_get_icon_name (info), NULL); clutter_model_append (self->priv->items, ITEMS_MODULE, peas_plugin_info_get_module_name (info), ITEMS_NAME, peas_plugin_info_get_name (info), ITEMS_ICON, icon, -1); g_free (icon); } /* add actions */ mx_dialog_add_action (MX_DIALOG (self), mx_action_new_full ("cancel", _("Cancel"), G_CALLBACK (home_new_widget_dialog_cancel), self)); g_object_unref (engine); g_object_unref (factory); }