summaryrefslogtreecommitdiff
path: root/libpeas/peas-plugin-info.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpeas/peas-plugin-info.c')
-rw-r--r--libpeas/peas-plugin-info.c81
1 files changed, 37 insertions, 44 deletions
diff --git a/libpeas/peas-plugin-info.c b/libpeas/peas-plugin-info.c
index 06bba97..9907957 100644
--- a/libpeas/peas-plugin-info.c
+++ b/libpeas/peas-plugin-info.c
@@ -64,48 +64,45 @@
G_DEFINE_QUARK (peas-plugin-info-error, peas_plugin_info_error)
-G_DEFINE_BOXED_TYPE (PeasPluginInfo, peas_plugin_info,
- _peas_plugin_info_ref,
- _peas_plugin_info_unref)
+G_DEFINE_FINAL_TYPE (PeasPluginInfo, peas_plugin_info, G_TYPE_OBJECT)
-PeasPluginInfo *
-_peas_plugin_info_ref (PeasPluginInfo *info)
+static void
+peas_plugin_info_finalize (GObject *object)
{
- g_atomic_int_inc (&info->refcount);
- return info;
+ PeasPluginInfo *info = PEAS_PLUGIN_INFO (object);
+
+ g_clear_pointer (&info->filename, g_free);
+ g_clear_pointer (&info->module_dir, g_free);
+ g_clear_pointer (&info->data_dir, g_free);
+ g_clear_pointer (&info->embedded, g_free);
+ g_clear_pointer (&info->module_name, g_free);
+ g_clear_pointer (&info->dependencies, g_strfreev);
+ g_clear_pointer (&info->name, g_free);
+ g_clear_pointer (&info->desc, g_free);
+ g_clear_pointer (&info->icon_name, g_free);
+ g_clear_pointer (&info->website, g_free);
+ g_clear_pointer (&info->copyright, g_free);
+ g_clear_pointer (&info->version, g_free);
+ g_clear_pointer (&info->help_uri, g_free);
+ g_clear_pointer (&info->authors, g_strfreev);
+ g_clear_pointer (&info->schema_source, g_settings_schema_source_unref);
+ g_clear_pointer (&info->external_data, g_hash_table_unref);
+ g_clear_pointer (&info->error, g_error_free);
+
+ G_OBJECT_CLASS (peas_plugin_info_parent_class)->finalize (object);
}
-void
-_peas_plugin_info_unref (PeasPluginInfo *info)
+static void
+peas_plugin_info_class_init (PeasPluginInfoClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = peas_plugin_info_finalize;
+}
+
+static void
+peas_plugin_info_init (PeasPluginInfo *info)
{
- if (!g_atomic_int_dec_and_test (&info->refcount))
- return;
-
- g_free (info->filename);
- g_free (info->module_dir);
- g_free (info->data_dir);
- g_free (info->embedded);
- g_free (info->module_name);
- g_strfreev (info->dependencies);
- g_free (info->name);
- g_free (info->desc);
- g_free (info->icon_name);
- g_free (info->website);
- g_free (info->copyright);
- g_free (info->version);
- g_free (info->help_uri);
- g_strfreev (info->authors);
-
- if (info->schema_source != NULL)
- g_settings_schema_source_unref (info->schema_source);
-
- if (info->external_data != NULL)
- g_hash_table_unref (info->external_data);
-
- if (info->error != NULL)
- g_error_free (info->error);
-
- g_free (info);
}
/*
@@ -136,11 +133,10 @@ _peas_plugin_info_new (const gchar *filename,
is_resource = g_str_has_prefix (filename, "resource://");
- info = g_new0 (PeasPluginInfo, 1);
- info->refcount = 1;
+ info = g_object_new (PEAS_TYPE_PLUGIN_INFO, NULL);
plugin_file = g_key_file_new ();
-
+
if (is_resource)
{
bytes = g_resources_lookup_data (filename + strlen ("resource://"),
@@ -323,11 +319,8 @@ _peas_plugin_info_new (const gchar *filename,
error:
- g_free (info->embedded);
+ g_object_unref (info);
g_free (loader);
- g_free (info->module_name);
- g_free (info->name);
- g_free (info);
g_clear_pointer (&bytes, g_bytes_unref);
g_key_file_free (plugin_file);