* 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 <https://www.gnu.org/licenses/>. #include "gplugin-perl5-plugin.h" /****************************************************************************** *****************************************************************************/ struct _GPluginPerlPlugin { PerlInterpreter *interpreter; GPluginPluginState state; /****************************************************************************** *****************************************************************************/ PROP_FILENAME = N_PROPERTIES, static GParamSpec *properties[N_PROPERTIES] = { /* I hate forward declarations... */ static void gplugin_perl_plugin_iface_init(GPluginPluginInterface *iface); G_DEFINE_DYNAMIC_TYPE_EXTENDED( G_IMPLEMENT_INTERFACE(GPLUGIN_TYPE_PLUGIN, gplugin_perl_plugin_iface_init)); /****************************************************************************** * GPluginPlugin Implementation *****************************************************************************/ gplugin_perl_plugin_iface_init(G_GNUC_UNUSED GPluginPluginInterface *iface) /****************************************************************************** *****************************************************************************/ gplugin_perl_plugin_get_property( GPluginPerlPlugin *plugin = GPLUGIN_PERL_PLUGIN(obj); gplugin_perl_plugin_get_interpreter(plugin)); g_value_set_string(value, plugin->filename); g_value_set_object(value, plugin->loader); g_value_set_object(value, plugin->info); g_value_set_enum(value, plugin->state); g_value_set_boxed(value, plugin->error); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); gplugin_perl_plugin_set_property( GPluginPerlPlugin *plugin = GPLUGIN_PERL_PLUGIN(obj); plugin->interpreter = g_value_get_pointer(value); plugin->filename = g_value_dup_string(value); plugin->loader = g_value_dup_object(value); plugin->info = g_value_dup_object(value); plugin->state = g_value_get_enum(value); plugin->error = g_value_dup_boxed(value); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); gplugin_perl_plugin_finalize(GObject *obj) GPluginPerlPlugin *plugin = GPLUGIN_PERL_PLUGIN(obj); perl_destruct(plugin->interpreter); perl_free(plugin->interpreter); plugin->interpreter = NULL; g_clear_pointer(&plugin->filename, g_free); g_clear_object(&plugin->loader); g_clear_object(&plugin->info); g_clear_error(&plugin->error); G_OBJECT_CLASS(gplugin_perl_plugin_parent_class)->finalize(obj); gplugin_perl_plugin_init(G_GNUC_UNUSED GPluginPerlPlugin *plugin) gplugin_perl_plugin_class_finalize(G_GNUC_UNUSED GPluginPerlPluginClass *klass) gplugin_perl_plugin_class_init(GPluginPerlPluginClass *klass) GObjectClass *obj_class = G_OBJECT_CLASS(klass); obj_class->get_property = gplugin_perl_plugin_get_property; obj_class->set_property = gplugin_perl_plugin_set_property; obj_class->finalize = gplugin_perl_plugin_finalize; properties[PROP_INTERPRETER] = g_param_spec_pointer( "The PERL interpreter for this plugin", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(obj_class, N_PROPERTIES, properties); g_object_class_override_property(obj_class, PROP_FILENAME, "filename"); g_object_class_override_property(obj_class, PROP_LOADER, "loader"); g_object_class_override_property(obj_class, PROP_INFO, "info"); g_object_class_override_property(obj_class, PROP_STATE, "state"); g_object_class_override_property(obj_class, PROP_ERROR, "error"); /****************************************************************************** *****************************************************************************/ gplugin_perl_plugin_register(GTypeModule *module) gplugin_perl_plugin_register_type(module); gplugin_perl_plugin_get_interpreter(GPluginPerlPlugin *plugin) g_return_val_if_fail(GPLUGIN_PERL_IS_PLUGIN(plugin), NULL); return plugin->interpreter;