A few updates to cleanup a bunch of code in libpurple.
* Add a new plugin state UNLOAD_FAILED that tracks when a plugin failed to
unload.
* Add a new signal GPluginManager::unload-plugin-failed
* Update GPluginManager::load-failed to pass the error, if any, that the
plugin returned.
* Added gplugin_manager_foreach and GPluginManagerForeachFunc to make it
easier to operate on all plugins.
/*
* Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#include<gplugin/gplugin-core.h>
#include<gplugin/gplugin-loader.h>
/**
* SECTION:gplugin-loader
* @title: Plugin Loader
* @short_description: Abstract class for loading plugins
*
* GPluginLoader defines the base behavior for loaders of all languages.
*/
/**
* GPLUGIN_TYPE_LOADER:
*
* The standard _get_type macro for #GPluginLoader.
*/
/**
* GPluginLoader:
*
* An abstract class that should not be accessed directly.
*/
/**
* GPluginLoaderClass:
* @supported_extensions: The supported_extensions vfunc returns a #GList of
* file extensions that this loader supports without the
* leading dot. For example: 'so', 'dll', 'py', etc.
* @query: The query vfunc is called when the plugin manager needs to query a
* plugin that has a file extension from @supported_extensions.
* @load: The load vfunc is called when the plugin manager wants to load a
* plugin that was previously queried by this loader.
* @unload: The unload vfunc is called when the plugin manager wants to unload
* a previously loaded plugin from this loader.
*
* #GPluginLoaderClass defines the behavior for loading plugins.