|
|
63f0e84 |
From ed23329485dfdda07f444bd61276a2f630da31a4 Mon Sep 17 00:00:00 2001
|
|
|
63f0e84 |
From: Michael Stahl <mstahl@redhat.com>
|
|
|
63f0e84 |
Date: Fri, 5 Dec 2014 18:04:39 +0100
|
|
|
63f0e84 |
Subject: [PATCH 3/5] fdo#86795: xmloff: ODF import: do not import checkbox
|
|
|
63f0e84 |
fieldmark ...
|
|
|
63f0e84 |
|
|
|
63f0e84 |
... if it has start/end, because Writer will become grumpy and crash.
|
|
|
63f0e84 |
|
|
|
63f0e84 |
(cherry picked from commit 25fd11e78279aef5a6b7656347758e5c67a9c45a)
|
|
|
63f0e84 |
|
|
|
63f0e84 |
Conflicts:
|
|
|
63f0e84 |
xmloff/source/text/XMLTextMarkImportContext.cxx
|
|
|
63f0e84 |
|
|
|
63f0e84 |
Change-Id: I6024051249eeac6ed9e43856fa77db969287f888
|
|
|
63f0e84 |
Reviewed-on: https://gerrit.libreoffice.org/13319
|
|
|
63f0e84 |
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
|
|
|
63f0e84 |
Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
|
|
|
63f0e84 |
(cherry picked from commit b903e2a7ac730865d9a6ee48fb0392ecff2c7d30)
|
|
|
63f0e84 |
---
|
|
|
63f0e84 |
xmloff/source/text/XMLTextMarkImportContext.cxx | 49 +++++++++++++++++--------
|
|
|
63f0e84 |
1 file changed, 34 insertions(+), 15 deletions(-)
|
|
|
63f0e84 |
|
|
|
63f0e84 |
diff --git a/xmloff/source/text/XMLTextMarkImportContext.cxx b/xmloff/source/text/XMLTextMarkImportContext.cxx
|
|
|
63f0e84 |
index 73ee88d..7720533 100644
|
|
|
63f0e84 |
--- a/xmloff/source/text/XMLTextMarkImportContext.cxx
|
|
|
63f0e84 |
+++ b/xmloff/source/text/XMLTextMarkImportContext.cxx
|
|
|
63f0e84 |
@@ -143,7 +143,7 @@ static const char *lcl_getFormFieldmarkName(OUString &name)
|
|
|
63f0e84 |
return NULL;
|
|
|
63f0e84 |
}
|
|
|
63f0e84 |
|
|
|
63f0e84 |
-static OUString lcl_getFieldmarkName(OUString &name)
|
|
|
63f0e84 |
+static OUString lcl_getFieldmarkName(OUString const& name)
|
|
|
63f0e84 |
{
|
|
|
63f0e84 |
static const char sFormtext[]=ODF_FORMTEXT;
|
|
|
63f0e84 |
if (name.equalsAscii("msoffice.field.FORMTEXT") ||
|
|
|
63f0e84 |
@@ -288,19 +288,40 @@ void XMLTextMarkImportContext::EndElement()
|
|
|
63f0e84 |
|
|
|
63f0e84 |
bool bImportAsField=((lcl_MarkType)nTmp==TypeFieldmarkEnd && m_rHelper.hasCurrentFieldCtx());
|
|
|
63f0e84 |
|
|
|
63f0e84 |
- // insert reference
|
|
|
63f0e84 |
- const Reference<XInterface> xContent(
|
|
|
63f0e84 |
- CreateAndInsertMark(GetImport(),
|
|
|
63f0e84 |
- (bImportAsField?sAPI_fieldmark:sAPI_bookmark),
|
|
|
63f0e84 |
- m_sBookmarkName,
|
|
|
63f0e84 |
- xInsertionCursor,
|
|
|
63f0e84 |
- m_sXmlId) );
|
|
|
63f0e84 |
- if (pRDFaAttributes)
|
|
|
63f0e84 |
+ // fdo#86795 check if it's actually a checkbox first
|
|
|
63f0e84 |
+ bool isInvalid(false);
|
|
|
63f0e84 |
+ OUString fieldmarkTypeName;
|
|
|
63f0e84 |
+ if (bImportAsField && m_rHelper.hasCurrentFieldCtx())
|
|
|
63f0e84 |
{
|
|
|
63f0e84 |
- const Reference<rdf::XMetadatable>
|
|
|
63f0e84 |
- xMeta(xContent, UNO_QUERY);
|
|
|
63f0e84 |
- GetImport().GetRDFaImportHelper().AddRDFa(
|
|
|
63f0e84 |
- xMeta, pRDFaAttributes);
|
|
|
63f0e84 |
+
|
|
|
63f0e84 |
+ OUString const type(m_rHelper.getCurrentFieldType());
|
|
|
63f0e84 |
+ fieldmarkTypeName = lcl_getFieldmarkName(type);
|
|
|
63f0e84 |
+ if (fieldmarkTypeName == ODF_FORMCHECKBOX ||
|
|
|
63f0e84 |
+ fieldmarkTypeName == ODF_FORMDROPDOWN)
|
|
|
63f0e84 |
+ { // sw can't handle checkbox with start+end
|
|
|
63f0e84 |
+ SAL_INFO("xmloff.text", "invalid fieldmark-start/fieldmark-end ignored");
|
|
|
63f0e84 |
+ isInvalid = true;
|
|
|
63f0e84 |
+ }
|
|
|
63f0e84 |
+ }
|
|
|
63f0e84 |
+
|
|
|
63f0e84 |
+ Reference<XInterface> xContent;
|
|
|
63f0e84 |
+ if (!isInvalid)
|
|
|
63f0e84 |
+ {
|
|
|
63f0e84 |
+ // insert reference
|
|
|
63f0e84 |
+ xContent = CreateAndInsertMark(GetImport(),
|
|
|
63f0e84 |
+ (bImportAsField
|
|
|
63f0e84 |
+ ? OUString(sAPI_fieldmark)
|
|
|
63f0e84 |
+ : OUString(sAPI_bookmark)),
|
|
|
63f0e84 |
+ m_sBookmarkName,
|
|
|
63f0e84 |
+ xInsertionCursor,
|
|
|
63f0e84 |
+ m_sXmlId);
|
|
|
63f0e84 |
+ if (pRDFaAttributes)
|
|
|
63f0e84 |
+ {
|
|
|
63f0e84 |
+ const Reference<rdf::XMetadatable>
|
|
|
63f0e84 |
+ xMeta(xContent, UNO_QUERY);
|
|
|
63f0e84 |
+ GetImport().GetRDFaImportHelper().AddRDFa(
|
|
|
63f0e84 |
+ xMeta, pRDFaAttributes);
|
|
|
63f0e84 |
+ }
|
|
|
63f0e84 |
}
|
|
|
63f0e84 |
|
|
|
63f0e84 |
if ((lcl_MarkType)nTmp==TypeFieldmarkEnd) {
|
|
|
63f0e84 |
@@ -308,8 +329,6 @@ void XMLTextMarkImportContext::EndElement()
|
|
|
63f0e84 |
// setup fieldmark...
|
|
|
63f0e84 |
Reference< ::com::sun::star::text::XFormField> xFormField(xContent, UNO_QUERY);
|
|
|
63f0e84 |
if (xFormField.is() && m_rHelper.hasCurrentFieldCtx()) {
|
|
|
63f0e84 |
- OUString givenTypeName=m_rHelper.getCurrentFieldType();
|
|
|
63f0e84 |
- OUString fieldmarkTypeName=lcl_getFieldmarkName(givenTypeName);
|
|
|
63f0e84 |
|
|
|
63f0e84 |
xFormField->setFieldType(fieldmarkTypeName);
|
|
|
63f0e84 |
m_rHelper.setCurrentFieldParamsTo(xFormField);
|
|
|
63f0e84 |
--
|
|
|
63f0e84 |
1.9.3
|
|
|
63f0e84 |
|