diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-11-14 18:59:11 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-11-14 18:59:11 (GMT) |
commit | 411879e9de9f04ed47a268141cdafaef9b68486f (patch) | |
tree | 673027199ac92c89bc2e5da0ffdc9b6bdbe783e4 /lib | |
parent | cd0e6aa1013a3c166881091c9a506240a38baa71 (diff) |
More binding friendly API for SugarPreview.
Fix a leak.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sugar/sugar-preview.c | 21 | ||||
-rw-r--r-- | lib/sugar/sugar-preview.h | 2 |
2 files changed, 18 insertions, 5 deletions
diff --git a/lib/sugar/sugar-preview.c b/lib/sugar/sugar-preview.c index d20f609..f54045b 100644 --- a/lib/sugar/sugar-preview.c +++ b/lib/sugar/sugar-preview.c @@ -39,16 +39,22 @@ sugar_preview_get_pixbuf(SugarPreview *preview) { GdkPixbuf *pixbuf; + if (preview->pixbuf != NULL) { + return preview->pixbuf; + } + if (preview->image == NULL) { return NULL; } - pixbuf = gdk_pixbuf_get_from_image(NULL, preview->image, NULL, - 0, 0, 0, 0, - preview->image->width, - preview->image->height); + preview->pixbuf = gdk_pixbuf_get_from_image(NULL, preview->image, NULL, + 0, 0, 0, 0, + preview->image->width, + preview->image->height); + g_object_unref(G_OBJECT(preview->image)); + preview->image = NULL; - return pixbuf; + return preview->pixbuf; } void @@ -58,6 +64,10 @@ sugar_preview_clear(SugarPreview *preview) g_object_unref(G_OBJECT(preview->image)); preview->image = NULL; } + if (preview->pixbuf != NULL) { + g_object_unref(G_OBJECT(preview->pixbuf)); + preview->pixbuf = NULL; + } } void @@ -104,4 +114,5 @@ static void sugar_preview_init(SugarPreview *preview) { preview->image = NULL; + preview->pixbuf = NULL; } diff --git a/lib/sugar/sugar-preview.h b/lib/sugar/sugar-preview.h index 1cd3bb4..6029cc1 100644 --- a/lib/sugar/sugar-preview.h +++ b/lib/sugar/sugar-preview.h @@ -38,6 +38,8 @@ struct _SugarPreview { GObject base_instance; GdkImage *image; + GdkPixbuf *pixbuf; + int width; int height; }; |