[gthumb] reuse the GSettings object when writing metadata with exiv2
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] reuse the GSettings object when writing metadata with exiv2
- Date: Thu, 24 Nov 2011 16:31:47 +0000 (UTC)
commit 67aca056f568085c9e0b00c7de4fb44fbe9e7c53
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Nov 24 16:14:02 2011 +0100
reuse the GSettings object when writing metadata with exiv2
added a GSettings object to the private data to avoid to create
and destroy a GSettings object for each call to
gth_metadata_provider_exiv2_write
.../exiv2_tools/gth-metadata-provider-exiv2.c | 53 ++++++++++++++------
.../exiv2_tools/gth-metadata-provider-exiv2.h | 2 +
2 files changed, 40 insertions(+), 15 deletions(-)
---
diff --git a/extensions/exiv2_tools/gth-metadata-provider-exiv2.c b/extensions/exiv2_tools/gth-metadata-provider-exiv2.c
index 03ff634..806f79f 100644
--- a/extensions/exiv2_tools/gth-metadata-provider-exiv2.c
+++ b/extensions/exiv2_tools/gth-metadata-provider-exiv2.c
@@ -28,9 +28,27 @@
#include "gth-metadata-provider-exiv2.h"
+struct _GthMetadataProviderExiv2Private {
+ GSettings *general_settings;
+};
+
+
G_DEFINE_TYPE (GthMetadataProviderExiv2, gth_metadata_provider_exiv2, GTH_TYPE_METADATA_PROVIDER)
+static void
+gth_metadata_provider_exiv2_finalize (GObject *object)
+{
+ GthMetadataProviderExiv2 *self;
+
+ self = GTH_METADATA_PROVIDER_EXIV2 (object);
+
+ _g_object_unref (self->priv->general_settings);
+
+ G_OBJECT_CLASS (gth_metadata_provider_exiv2_parent_class)->finalize (object);
+}
+
+
static gboolean
gth_metadata_provider_exiv2_can_read (GthMetadataProvider *self,
const char *mime_type,
@@ -108,25 +126,23 @@ gth_metadata_provider_exiv2_read (GthMetadataProvider *self,
static void
-gth_metadata_provider_exiv2_write (GthMetadataProvider *self,
+gth_metadata_provider_exiv2_write (GthMetadataProvider *base,
GthMetadataWriteFlags flags,
GthFileData *file_data,
const char *attributes,
GCancellable *cancellable)
{
- GSettings *settings;
- gboolean store_metadata_in_files;
- void *buffer = NULL;
- gsize size;
- GError *error = NULL;
- GObject *metadata;
- int i;
-
- settings = g_settings_new (GTHUMB_GENERAL_SCHEMA);
- store_metadata_in_files = g_settings_get_boolean (settings, PREF_GENERAL_STORE_METADATA_IN_FILES);
- g_object_unref (settings);
-
- if (((flags & GTH_METADATA_WRITE_FORCE_EMBEDDED) != GTH_METADATA_WRITE_FORCE_EMBEDDED) && ! store_metadata_in_files)
+ GthMetadataProviderExiv2 *self = GTH_METADATA_PROVIDER_EXIV2 (base);
+ void *buffer = NULL;
+ gsize size;
+ GError *error = NULL;
+ GObject *metadata;
+ int i;
+
+ if (self->priv->general_settings == NULL)
+ self->priv->general_settings = g_settings_new (GTHUMB_GENERAL_SCHEMA);
+
+ if (! (flags & GTH_METADATA_WRITE_FORCE_EMBEDDED) && ! g_settings_get_boolean (self->priv->general_settings, PREF_GENERAL_STORE_METADATA_IN_FILES))
return;
if (! exiv2_supports_writes (gth_file_data_get_mime_type (file_data)))
@@ -289,8 +305,14 @@ gth_metadata_provider_exiv2_write (GthMetadataProvider *self,
static void
gth_metadata_provider_exiv2_class_init (GthMetadataProviderExiv2Class *klass)
{
+ GObjectClass *object_class;
GthMetadataProviderClass *mp_class;
+ g_type_class_add_private (klass, sizeof (GthMetadataProviderExiv2Private));
+
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gth_metadata_provider_exiv2_finalize;
+
mp_class = GTH_METADATA_PROVIDER_CLASS (klass);
mp_class->can_read = gth_metadata_provider_exiv2_can_read;
mp_class->can_write = gth_metadata_provider_exiv2_can_write;
@@ -302,5 +324,6 @@ gth_metadata_provider_exiv2_class_init (GthMetadataProviderExiv2Class *klass)
static void
gth_metadata_provider_exiv2_init (GthMetadataProviderExiv2 *self)
{
- /* void */
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_METADATA_PROVIDER_EXIV2, GthMetadataProviderExiv2Private);
+ self->priv->general_settings = NULL;
}
diff --git a/extensions/exiv2_tools/gth-metadata-provider-exiv2.h b/extensions/exiv2_tools/gth-metadata-provider-exiv2.h
index 0b823c7..cdb5e59 100644
--- a/extensions/exiv2_tools/gth-metadata-provider-exiv2.h
+++ b/extensions/exiv2_tools/gth-metadata-provider-exiv2.h
@@ -35,10 +35,12 @@
typedef struct _GthMetadataProviderExiv2 GthMetadataProviderExiv2;
typedef struct _GthMetadataProviderExiv2Class GthMetadataProviderExiv2Class;
+typedef struct _GthMetadataProviderExiv2Private GthMetadataProviderExiv2Private;
struct _GthMetadataProviderExiv2
{
GthMetadataProvider __parent;
+ GthMetadataProviderExiv2Private *priv;
};
struct _GthMetadataProviderExiv2Class
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]