[dia] diagram-as-element: fix some typical bugs and leaks
- From: Hans Breuer <hans src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [dia] diagram-as-element: fix some typical bugs and leaks
- Date: Sun, 4 Oct 2009 17:13:37 +0000 (UTC)
commit c158797dc1e9de793e479e7c6937cb612d2df504
Author: Hans Breuer <hans breuer org>
Date: Sun Oct 4 14:48:41 2009 +0200
diagram-as-element: fix some typical bugs and leaks
- objecte_load_using_properties() is not vtable compatible
(maybe I should change the vtable?)
- don't leak the temporary file nor the DiaImage
- prefer rendering with "cairo-alpha-png"
TODO:
- extend the renderer interface to get rid of the extra DiaImage,
at least for some renderers (DiaRenderer::set_matrix?)
- the image gets updated too often, something wrong with mtime check?
- make diagrams directly selecteable in the properties dialog file entry
- allow to open the diagram stand-alone by context menu
- make new object available in the Misc sheet
- normalize filenames during save (parent diagram relative path)
objects/Misc/diagram_as_object.c | 25 ++++++++++++++++++++-----
1 files changed, 20 insertions(+), 5 deletions(-)
---
diff --git a/objects/Misc/diagram_as_object.c b/objects/Misc/diagram_as_object.c
index 0dd5ada..a70a4c0 100644
--- a/objects/Misc/diagram_as_object.c
+++ b/objects/Misc/diagram_as_object.c
@@ -76,11 +76,13 @@ _dae_create (Point *startpoint,
void *user_data,
Handle **handle1,
Handle **handle2);
+static DiaObject *
+_dae_load (ObjectNode obj_node, int version, const char *filename);
static ObjectTypeOps _dae_type_ops =
{
(CreateFunc) _dae_create,
- (LoadFunc) object_load_using_properties,
+ (LoadFunc) _dae_load, /* can't use object_load_using_properties, signature mismatch */
(SaveFunc) object_save_using_properties,
(GetDefaultsFunc) NULL,
(ApplyDefaultsFunc) NULL
@@ -91,8 +93,9 @@ DiaObjectType diagram_as_element_type =
"Misc - Diagram", /* name */
0, /* version */
(char **) diagram_as_element_xpm, /* pixmap */
-
- &_dae_type_ops /* ops */
+ &_dae_type_ops, /* ops */
+ NULL, /* pixmap_file */
+ 0 /* default_uder_data */
};
static void _dae_update_data (DiagramAsElement *dae);
@@ -197,14 +200,16 @@ _dae_draw(DiagramAsElement *dae, DiaRenderer *renderer)
gchar *imgfname = NULL;
gint fd = g_file_open_tmp ("diagram-as-elementXXXXXX.png", &imgfname, NULL);
if (fd != -1) {
- DiaExportFilter *ef = filter_guess_export_filter (imgfname);
-
+ DiaExportFilter *ef = filter_get_by_name ("cairo-alpha-png");
+ if (!ef) /* prefer cairo with alpha, but don't require it */
+ ef = filter_guess_export_filter (imgfname);
close(fd);
if (ef) {
ef->export_func (dae->data, imgfname, dae->filename, ef->user_data);
/* TODO: change export_func to return success or GError* */
dae->image = dia_image_load (imgfname);
}
+ g_unlink (imgfname);
g_free (imgfname);
}
}
@@ -255,6 +260,9 @@ _dae_destroy(DiagramAsElement *dae)
g_object_unref(dae->data);
g_free(dae->filename);
+
+ if (dae->image)
+ g_object_unref (dae->image);
element_destroy(&dae->element);
}
@@ -317,3 +325,10 @@ _dae_create (Point *startpoint,
*handle2 = obj->handles[7];
return &dae->element.object;
}
+
+static DiaObject *
+_dae_load (ObjectNode obj_node, int version, const char *filename)
+{
+ return object_load_using_properties (&diagram_as_element_type,
+ obj_node, version, filename);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]