[calligra] /: Fix saving of shapes in the correct order.

Thorsten Zachmann t.zachmann at zagge.de
Sun Mar 4 18:38:53 UTC 2012


Git commit 5af08715b5f9e8fb16ef9a9c48e3507203e40c1e by Thorsten Zachmann.
Committed on 04/03/2012 at 19:16.
Pushed by zachmann into branch 'master'.

Fix saving of shapes in the correct order.

The saving of the order is currently broken for quite a lot of files.

One example is slide 4 of

http://www.zagge.de/anchor/bug/open.umich.edu%252Fsites%252Fdefault%252Ffiles%252FSeverance-SI5%25302-W%25309-Week11-Sesons-and-Cookies.odp

This was caused by the commit 3fd6c20f31f946f3128af63fc433449f36c06c9d that saves the
z-index out to the file. However the way it is done is not fully correct. I works mostly
for words. With this patch we go to back to the original behaviour of not saving the z-index
as it is defined by the order of the shapes in the xml file. We still save the z-index for
words.

Please review.

I have run cstester --roundtip and it improves for odp and not regressions for odt files.

CCMAIL: calligra-devel at kde.org

M  +1    -1    libs/flake/KoShape.cpp
M  +5    -1    libs/flake/KoShapeSavingContext.h
M  +2    -1    words/part/KWOdfWriter.cpp

http://commits.kde.org/calligra/5af08715b5f9e8fb16ef9a9c48e3507203e40c1e

diff --git a/libs/flake/KoShape.cpp b/libs/flake/KoShape.cpp
index cbeed5f..5ae13c9 100644
--- a/libs/flake/KoShape.cpp
+++ b/libs/flake/KoShape.cpp
@@ -1772,7 +1772,7 @@ void KoShape::saveOdfAttributes(KoShapeSavingContext &context, int attributes) c
         }
     }
 
-    if (attributes & OdfZIndex) {
+    if (attributes & OdfZIndex && context.isSet(KoShapeSavingContext::ZIndex)) {
         context.xmlWriter().addAttribute("draw:z-index", zIndex());
     }
 
diff --git a/libs/flake/KoShapeSavingContext.h b/libs/flake/KoShapeSavingContext.h
index a61a7e8..f7d328c 100644
--- a/libs/flake/KoShapeSavingContext.h
+++ b/libs/flake/KoShapeSavingContext.h
@@ -69,7 +69,11 @@ public:
         /**
          * If set duplicate master pages will be merged to one
          */
-        UniqueMasterPages = 8
+        UniqueMasterPages = 8,
+        /**
+         * If set the z-index is saved in the shape
+         */
+        ZIndex = 16
     };
     Q_DECLARE_FLAGS(ShapeSavingOptions, ShapeSavingOption)
 
diff --git a/words/part/KWOdfWriter.cpp b/words/part/KWOdfWriter.cpp
index edd0a89..b061b96 100644
--- a/words/part/KWOdfWriter.cpp
+++ b/words/part/KWOdfWriter.cpp
@@ -79,7 +79,7 @@ QByteArray KWOdfWriter::serializeHeaderFooter(KoShapeSavingContext &context, KWT
     KoXmlWriter &savedWriter = context.xmlWriter();
 
     KoShapeSavingContext::ShapeSavingOptions options = context.options();
-    context.setOptions(KoShapeSavingContext::AutoStyleInStyleXml);
+    context.setOptions(KoShapeSavingContext::AutoStyleInStyleXml | KoShapeSavingContext::ZIndex);
     context.setXmlWriter(writer);
 
     Q_ASSERT(!fs->frames().isEmpty());
@@ -226,6 +226,7 @@ bool KWOdfWriter::save(KoOdfWriteStore &odfStore, KoEmbeddedDocumentSaver &embed
     KoChangeTracker *changeTracker = m_document->resourceManager()->resource(KoText::ChangeTracker).value<KoChangeTracker*>();
 
     KoShapeSavingContext context(*tmpBodyWriter, mainStyles, embeddedSaver);
+    context.addOption(KoShapeSavingContext::ZIndex);
 
     KoTextSharedSavingData *sharedData = new KoTextSharedSavingData;
     sharedData->setGenChanges(changes);



More information about the calligra-devel mailing list