--- a/perl/gplugin-perl-loader.c Fri Jan 25 04:35:21 2019 -0500
+++ b/perl/gplugin-perl-loader.c Fri Jan 25 04:38:27 2019 -0500
@@ -26,11 +26,7 @@
-/******************************************************************************
- *****************************************************************************/
-static GObjectClass *parent_class = NULL;
-static volatile GType type_real = 0;
+G_DEFINE_DYNAMIC_TYPE(GPluginPerlLoader, gplugin_perl_loader, GPLUGIN_TYPE_LOADER); /* I can't believe I have to use this variable name... */
static PerlInterpreter *my_perl = NULL;
@@ -102,14 +98,16 @@
/******************************************************************************
*****************************************************************************/
+gplugin_perl_loader_init(G_GNUC_UNUSED GPluginPerlLoader *loader) { gplugin_perl_loader_class_init(GPluginPerlLoaderClass *klass) {
GPluginLoaderClass *loader_class = GPLUGIN_LOADER_CLASS(klass);
- parent_class = g_type_class_peek_parent(klass);
loader_class->supported_extensions =
gplugin_perl_loader_class_supported_extensions;
loader_class->query = gplugin_perl_loader_query;
@@ -121,8 +119,7 @@
-gplugin_perl_loader_class_finalize(GPluginPerlLoaderClass *klass,
+gplugin_perl_loader_class_finalize(G_GNUC_UNUSED GPluginPerlLoaderClass *klass) /* perl uninitialization */
gplugin_perl_loader_uninit_perl();
@@ -133,33 +130,5 @@
*****************************************************************************/
gplugin_perl_loader_register(GPluginNativePlugin *plugin) {
- if(g_once_init_enter(&type_real)) {
- static const GTypeInfo info = {
- .class_size = sizeof(GPluginPerlLoaderClass),
- .class_init = (GClassInitFunc)gplugin_perl_loader_class_init,
- .class_finalize = (GClassFinalizeFunc)gplugin_perl_loader_class_finalize,
- .instance_size = sizeof(GPluginPerlLoader),
- type = gplugin_native_plugin_register_type(plugin,
- g_once_init_leave(&type_real, type);
+ gplugin_perl_loader_register_type(G_TYPE_MODULE(plugin));
-gplugin_perl_loader_get_type(void) {
- if(G_UNLIKELY(type_real == 0)) {
- g_warning("gplugin_perl_loader_get_type was called before "
- "the type was registered!\n");
--- a/perl/gplugin-perl-loader.h Fri Jan 25 04:35:21 2019 -0500
+++ b/perl/gplugin-perl-loader.h Fri Jan 25 04:38:27 2019 -0500
@@ -32,21 +32,17 @@
#include <gplugin-native.h>
struct _GPluginPerlLoader {
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
struct _GPluginPerlLoaderClass {
GPluginLoaderClass parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
--- a/perl/gplugin-perl-plugin.c Fri Jan 25 04:35:21 2019 -0500
+++ b/perl/gplugin-perl-plugin.c Fri Jan 25 04:38:27 2019 -0500
@@ -26,14 +26,17 @@
-#define GPLUGIN_PERL_PLUGIN_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), GPLUGIN_TYPE_PERL_PLUGIN, GPluginPerlPluginPrivate))
/******************************************************************************
*****************************************************************************/
PerlInterpreter *interpreter;
+ GPluginPluginInfo *info; + GPluginPluginState state; } GPluginPerlPluginPrivate;
/******************************************************************************
@@ -43,11 +46,33 @@
+ PROP_FILENAME = N_PROPERTIES, static GParamSpec *properties[N_PROPERTIES] = {NULL,};
-static GObjectClass *parent_class = NULL;
-static volatile GType type_real = 0;
+/* I hate forward declarations... */ +static void gplugin_perl_plugin_iface_init(GPluginPluginInterface *iface); +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + G_ADD_PRIVATE_DYNAMIC(GPluginPerlPlugin) + G_IMPLEMENT_INTERFACE(GPLUGIN_TYPE_PLUGIN, gplugin_perl_plugin_iface_init) +/****************************************************************************** + * GPluginPlugin Implementation + *****************************************************************************/ +gplugin_perl_plugin_iface_init(G_GNUC_UNUSED GPluginPluginInterface *iface) /******************************************************************************
@@ -56,7 +81,7 @@
gplugin_perl_plugin_set_interpreter(GPluginPerlPlugin *plugin,
PerlInterpreter *interpreter)
- GPluginPerlPluginPrivate *priv = GPLUGIN_PERL_PLUGIN_GET_PRIVATE(plugin);
+ GPluginPerlPluginPrivate *priv = gplugin_perl_plugin_get_instance_private(plugin); priv->interpreter = interpreter;
@@ -69,12 +94,28 @@
GPluginPerlPlugin *plugin = GPLUGIN_PERL_PLUGIN(obj);
+ GPluginPerlPluginPrivate *priv = gplugin_perl_plugin_get_instance_private(plugin); g_value_set_pointer(value,
gplugin_perl_plugin_get_interpreter(plugin));
+ g_value_set_string(value, priv->filename); + g_value_set_object(value, priv->loader); + g_value_set_object(value, priv->info); + g_value_set_enum(value, priv->state); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -86,12 +127,28 @@
const GValue *value, GParamSpec *pspec)
GPluginPerlPlugin *plugin = GPLUGIN_PERL_PLUGIN(obj);
+ GPluginPerlPluginPrivate *priv = gplugin_perl_plugin_get_instance_private(plugin); gplugin_perl_plugin_set_interpreter(plugin,
g_value_get_pointer(value));
+ priv->filename = g_value_dup_string(value); + priv->loader = g_value_dup_object(value); + priv->info = g_value_dup_object(value); + priv->state = g_value_get_enum(value); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -99,23 +156,33 @@
gplugin_perl_plugin_finalize(GObject *obj) {
- GPluginPerlPluginPrivate *priv = GPLUGIN_PERL_PLUGIN_GET_PRIVATE(obj);
+ GPluginPerlPluginPrivate *priv = gplugin_perl_plugin_get_instance_private(GPLUGIN_PERL_PLUGIN(obj)); perl_destruct(priv->interpreter);
perl_free(priv->interpreter);
priv->interpreter = NULL;
- G_OBJECT_CLASS(parent_class)->finalize(obj);
+ g_clear_pointer(&priv->filename, g_free); + g_clear_object(&priv->loader); + g_clear_object(&priv->info); + 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);
- parent_class = g_type_class_peek_parent(klass);
- g_type_class_add_private(klass, sizeof(GPluginPerlPluginPrivate));
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;
@@ -127,50 +194,30 @@
g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
+ /* add our overrides */ + 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"); /******************************************************************************
*****************************************************************************/
-gplugin_perl_plugin_register(GPluginNativePlugin *plugin) {
- if(g_once_init_enter(&type_real)) {
- static const GTypeInfo info = {
- .class_size = sizeof(GPluginPerlPluginClass),
- .class_init = (GClassInitFunc)gplugin_perl_plugin_class_init,
- .instance_size = sizeof(GPluginPerlPlugin),
- type = gplugin_native_plugin_register_type(plugin,
- g_once_init_leave(&type_real, type);
-gplugin_perl_plugin_get_type(void) {
- if(G_UNLIKELY(type_real == 0)) {
- g_warning("gplugin_perl_plugin_get_type was called before "
- "the type was registered!\n");
+gplugin_perl_plugin_register(GPluginNativePlugin *native) + gplugin_perl_plugin_register_type(G_TYPE_MODULE(native)); -gplugin_perl_plugin_get_interpreter(const GPluginPerlPlugin *plugin) {
+gplugin_perl_plugin_get_interpreter(GPluginPerlPlugin *plugin) { GPluginPerlPluginPrivate *priv = NULL;
g_return_val_if_fail(GPLUGIN_IS_PERL_PLUGIN(plugin), NULL);
- priv = GPLUGIN_PERL_PLUGIN_GET_PRIVATE(plugin);
+ priv = gplugin_perl_plugin_get_instance_private(plugin); return priv->interpreter;
--- a/perl/gplugin-perl-plugin.h Fri Jan 25 04:35:21 2019 -0500
+++ b/perl/gplugin-perl-plugin.h Fri Jan 25 04:38:27 2019 -0500
@@ -36,29 +36,25 @@
struct _GPluginPerlPlugin {
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
struct _GPluginPerlPluginClass {
- GPluginPluginClass parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
-void gplugin_perl_plugin_register(GPluginNativePlugin *plugin);
+void gplugin_perl_plugin_register(GPluginNativePlugin *native); GType gplugin_perl_plugin_get_type(void);
-PerlInterpreter *gplugin_perl_plugin_get_interpreter(const GPluginPerlPlugin *plugin);
+PerlInterpreter *gplugin_perl_plugin_get_interpreter(GPluginPerlPlugin *plugin);