summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2021-02-08 21:03:04 +0100
committerMichael Stahl <michael.stahl@allotropia.de>2021-02-09 11:05:11 +0100
commit793fc8c7c70faec4e6c1e9ad0c4d9f47193a181c (patch)
tree366eb6ed2443c5c7b236c606b5d2983ab3a7dbd6 /writerfilter
parent88c8e2ae2b92f806b4add25bba06e702dcb38eb5 (diff)
tdf#134592 DOCX import: preserve formatting of CREATEDATE fields
The create date of a document doesn't really change, so we can only loose if the cached result of the field is not preserved. (cherry picked from commit 3b928391b3398c1113e675ea6a542d05d9611e0a) Change-Id: I0105d9c5bb9a06cacc1f5fed2a10b6626fa80fd7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110622 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/CppunitTest_writerfilter_dmapper.mk1
-rw-r--r--writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx23
-rw-r--r--writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docxbin0 -> 13310 bytes
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx7
4 files changed, 31 insertions, 0 deletions
diff --git a/writerfilter/CppunitTest_writerfilter_dmapper.mk b/writerfilter/CppunitTest_writerfilter_dmapper.mk
index 7fe8b9035d3d..48b4ee87e087 100644
--- a/writerfilter/CppunitTest_writerfilter_dmapper.mk
+++ b/writerfilter/CppunitTest_writerfilter_dmapper.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_CppunitTest_use_libraries,writerfilter_dmapper, \
sal \
test \
unotest \
+ vcl \
))
$(eval $(call gb_CppunitTest_use_sdk_api,writerfilter_dmapper))
diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx
index 77bd616f37d6..da7501e2ef2e 100644
--- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx
@@ -19,6 +19,8 @@
#include <com/sun/star/text/XTextTablesSupplier.hpp>
#include <com/sun/star/text/XTextTable.hpp>
+#include <vcl/scheduler.hxx>
+
using namespace ::com::sun::star;
namespace
@@ -189,6 +191,27 @@ CPPUNIT_TEST_FIXTURE(Test, testFieldIfInsideIf)
// i.e. some of the inner fields escaped outside the outer field.
CPPUNIT_ASSERT_EQUAL(OUString("25"), xCell->getString());
}
+
+CPPUNIT_TEST_FIXTURE(Test, testCreateDatePreserve)
+{
+ OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "create-date-preserve.docx";
+ getComponent() = loadFromDesktop(aURL);
+ // Trigger idle layout.
+ Scheduler::ProcessEventsToIdle();
+ uno::Reference<text::XTextDocument> xTextDocument(getComponent(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(),
+ uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ uno::Reference<container::XEnumerationAccess> xPortionEnumAccess(xParaEnum->nextElement(),
+ uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xPortionEnum = xPortionEnumAccess->createEnumeration();
+ uno::Reference<text::XTextRange> xPortion(xPortionEnum->nextElement(), uno::UNO_QUERY);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 7/7/2020 10:11:00 AM
+ // - Actual : 07/07/2020
+ // i.e. the formatting of the create date field was lost.
+ CPPUNIT_ASSERT_EQUAL(OUString("7/7/2020 10:11:00 AM"), xPortion->getString());
+}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx b/writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx
new file mode 100644
index 000000000000..4a587ce0d2ef
--- /dev/null
+++ b/writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx
Binary files differ
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 580de1b9730c..0aee6c1d6598 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -6245,6 +6245,13 @@ void DomainMapper_Impl::SetFieldResult(OUString const& rResult)
xFieldProperties->setPropertyValue(
getPropertyName(bHasContent && sValue.isEmpty()? PROP_CONTENT : PROP_CURRENT_PRESENTATION),
uno::makeAny( rResult ));
+
+ if (xServiceInfo->supportsService(
+ "com.sun.star.text.TextField.DocInfo.CreateDateTime"))
+ {
+ // Creation time is const, don't try to update it.
+ xFieldProperties->setPropertyValue("IsFixed", uno::makeAny(true));
+ }
}
}
catch( const beans::UnknownPropertyException& )