[dia] diagram-as-element: serialize relative filenames
- From: Hans Breuer <hans src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dia] diagram-as-element: serialize relative filenames
- Date: Fri, 30 Jul 2010 15:08:39 +0000 (UTC)
commit 4f2d03889116b1c34b915c6bbff6564d62d4b1c9
Author: Hans Breuer <hans breuer org>
Date: Fri Jul 30 15:30:23 2010 +0200
diagram-as-element: serialize relative filenames
objects/Misc/diagram_as_object.c | 42 ++++++++++++++++++++++++++++++++++++-
1 files changed, 40 insertions(+), 2 deletions(-)
---
diff --git a/objects/Misc/diagram_as_object.c b/objects/Misc/diagram_as_object.c
index cb72d75..42b55ee 100644
--- a/objects/Misc/diagram_as_object.c
+++ b/objects/Misc/diagram_as_object.c
@@ -78,12 +78,14 @@ _dae_create (Point *startpoint,
Handle **handle2);
static DiaObject *
_dae_load (ObjectNode obj_node, int version, const char *filename);
+static void
+_dae_save (DiaObject *obj, ObjectNode obj_node, const char *filename);
static ObjectTypeOps _dae_type_ops =
{
(CreateFunc) _dae_create,
(LoadFunc) _dae_load, /* can't use object_load_using_properties, signature mismatch */
- (SaveFunc) object_save_using_properties,
+ (SaveFunc) _dae_save, /* overwrite for filename normalization */
(GetDefaultsFunc) NULL,
(ApplyDefaultsFunc) NULL
};
@@ -337,6 +339,42 @@ _dae_create (Point *startpoint,
static DiaObject *
_dae_load (ObjectNode obj_node, int version, const char *filename)
{
- return object_load_using_properties (&diagram_as_element_type,
+ DiaObject *obj;
+ DiagramAsElement *dae;
+
+ obj = object_load_using_properties (&diagram_as_element_type,
obj_node, version, filename);
+ /* filename de-normalization */
+ dae = (DiagramAsElement*)obj;
+ if (strlen(dae->filename) && !g_path_is_absolute (dae->filename)) {
+ gchar *dirname = g_path_get_dirname (filename);
+ gchar *filename = g_build_filename (dirname, dae->filename, NULL);
+ g_free (dae->filename);
+ dae->filename = filename;
+ g_free (dirname);
+ }
+ return obj;
+}
+
+static void
+_dae_save (DiaObject *obj, ObjectNode obj_node, const char *filename)
+{
+ DiagramAsElement *dae;
+ /* filename normalization */
+ gchar *saved_path = NULL;
+
+ dae = (DiagramAsElement*)obj;
+ if (strlen(dae->filename) && g_path_is_absolute (dae->filename)) {
+ gchar *dirname = g_path_get_dirname (filename);
+ if (strstr (dae->filename, dirname) == dae->filename) {
+ saved_path = dae->filename;
+ dae->filename += (strlen (dirname) + 1);
+ }
+ g_free (dirname);
+ }
+ object_save_using_properties (obj, obj_node, diagram_as_element_type.version, filename);
+
+ if (saved_path) {
+ dae->filename = saved_path;
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]