Hi, In <1240908768.4183.17.ca...@charmaleon> "Re: [poppler] unit test for GLib bindings" on Tue, 28 Apr 2009 10:52:48 +0200, Carlos Garcia Campos <[email protected]> wrote:
> patch looks good to me, could you send it again attached to the mail and > generated with git format-patch, please? Sure. I attach it. Thanks, -- kou
>From 7c4a492703bfa288a6e2946759d0bd3bedc2c867 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou <[email protected]> Date: Wed, 29 Apr 2009 09:52:21 +0900 Subject: [PATCH] [glib] PopplerAttachment refers its document. --- glib/poppler-attachment.cc | 41 +++++++++++++++++++++++++++++++++++------ 1 files changed, 35 insertions(+), 6 deletions(-) diff --git a/glib/poppler-attachment.cc b/glib/poppler-attachment.cc index f6dbfd2..78bc72f 100644 --- a/glib/poppler-attachment.cc +++ b/glib/poppler-attachment.cc @@ -29,11 +29,13 @@ typedef struct _PopplerAttachmentPrivate PopplerAttachmentPrivate; struct _PopplerAttachmentPrivate { - Object obj_stream; + Object *obj_stream; + PopplerDocument *document; }; #define POPPLER_ATTACHMENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), POPPLER_TYPE_ATTACHMENT, PopplerAttachmentPrivate)) +static void poppler_attachment_dispose (GObject *obj); static void poppler_attachment_finalize (GObject *obj); G_DEFINE_TYPE (PopplerAttachment, poppler_attachment, G_TYPE_OBJECT) @@ -46,11 +48,35 @@ poppler_attachment_init (PopplerAttachment *attachment) static void poppler_attachment_class_init (PopplerAttachmentClass *klass) { + G_OBJECT_CLASS (klass)->dispose = poppler_attachment_dispose; G_OBJECT_CLASS (klass)->finalize = poppler_attachment_finalize; g_type_class_add_private (klass, sizeof (PopplerAttachmentPrivate)); } static void +poppler_attachment_dispose (GObject *obj) +{ + PopplerAttachmentPrivate *priv; + + priv = POPPLER_ATTACHMENT_GET_PRIVATE (obj); + + if (priv->obj_stream) + { + priv->obj_stream->free(); + delete priv->obj_stream; + priv->obj_stream = NULL; + } + + if (priv->document) + { + g_object_unref (priv->document); + priv->document = NULL; + } + + G_OBJECT_CLASS (poppler_attachment_parent_class)->dispose (obj); +} + +static void poppler_attachment_finalize (GObject *obj) { PopplerAttachment *attachment; @@ -69,8 +95,6 @@ poppler_attachment_finalize (GObject *obj) g_string_free (attachment->checksum, TRUE); attachment->checksum = NULL; - POPPLER_ATTACHMENT_GET_PRIVATE (attachment)->obj_stream.free(); - G_OBJECT_CLASS (poppler_attachment_parent_class)->finalize (obj); } @@ -81,12 +105,16 @@ _poppler_attachment_new (PopplerDocument *document, EmbFile *emb_file) { PopplerAttachment *attachment; + PopplerAttachmentPrivate *priv; g_assert (document != NULL); g_assert (emb_file != NULL); attachment = (PopplerAttachment *) g_object_new (POPPLER_TYPE_ATTACHMENT, NULL); - + priv = POPPLER_ATTACHMENT_GET_PRIVATE (attachment); + + priv->document = (PopplerDocument *) g_object_ref (document); + if (emb_file->name ()) attachment->name = _poppler_goo_string_to_utf8 (emb_file->name ()); if (emb_file->description ()) @@ -101,7 +129,8 @@ _poppler_attachment_new (PopplerDocument *document, attachment->checksum = g_string_new_len (emb_file->checksum ()->getCString (), emb_file->checksum ()->getLength ()); - emb_file->streamObject().copy(&POPPLER_ATTACHMENT_GET_PRIVATE (attachment)->obj_stream); + priv->obj_stream = new Object(); + emb_file->streamObject().copy(priv->obj_stream); return attachment; } @@ -214,7 +243,7 @@ poppler_attachment_save_to_callback (PopplerAttachment *attachment, g_return_val_if_fail (POPPLER_IS_ATTACHMENT (attachment), FALSE); - stream = POPPLER_ATTACHMENT_GET_PRIVATE (attachment)->obj_stream.getStream(); + stream = POPPLER_ATTACHMENT_GET_PRIVATE (attachment)->obj_stream->getStream(); stream->reset(); do -- 1.6.2.4
_______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
