diff options
author | László Németh <nemeth@numbertext.org> | 2018-06-20 16:28:13 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-07-18 15:39:57 +0200 |
commit | 61aaefd8e902f86f5f7347efdb56686638149133 (patch) | |
tree | 59457547e3247391d664d22413b2fbf6cad55084 /sw | |
parent | 88abae93c5e0a030eca36d7e33909ad52e1c71a2 (diff) |
tdf#107690 OOXML import/export of setting "Open as read-only"
Import custom document property _MarkAsFinal as LoadReadonly
setting, export LoadReadonly as _MarkAsFinal in DOCX, XLSX
and PPTX documents.
Before this fix, LibreOffice opened read-only OOXML documents
as editable, also saved and exported _MarkAsFinal=true silently,
resulting unintented read-only warning info bar in MSO.
This commit improves interoperability a lot, because this is a
basic document protection of MSO, recommended on its UI.
Note: LoadReadonly (on File->Properties...->Security, property
"Open file read-only") doesn't show "Edit read-only" info bar
from commit 630186ff4e0eba7317e542f8c3eca39ebd068721,
but it's still possible to switch on editing by Edit->Edit Mode.
MSO shows info bar for _MarkAsFinal. (There is an advantage to
hide the info bar in LibreOffice in a mixed environment,
to avoid overwriting of press-ready MSO files by LibreOffice.)
Note 2: Other differences of LoadReadonly in LO and _MarkAsFinal
in MSO: (1) Switching on editing doesn't remove the LoadReadonly
property automatically in LO. (2) Saving with LoadReadonly doesn't
switch off editing of the actual (still opened) document in LO.
(cherry picked from commit 9a5c56a9c4e04589b0a6bb710573922e459d9685
and bbdb6cb8ed0d77eeb2e413b38f29d2084bd8257b (unit tests))
Change-Id: I79897605e1fabe0708cce0b0c6216c152b201fc9
Reviewed-on: https://gerrit.libreoffice.org/56752
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth@numbertext.org>
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/open-as-read-only.docx | bin | 0 -> 4594 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport11.cxx | 7 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxexport.cxx | 4 |
3 files changed, 10 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/open-as-read-only.docx b/sw/qa/extras/ooxmlexport/data/open-as-read-only.docx Binary files differnew file mode 100644 index 000000000000..057c67ff6dfe --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/open-as-read-only.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx index 9882bb943f7b..f27c88facc67 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx @@ -394,6 +394,13 @@ DECLARE_OOXMLEXPORT_TEST(testTdf107969, "tdf107969.docx") // SAXParseException: '[word/document.xml line 2]: Extra content at the end of the document', Stream 'word/document.xml'. } +DECLARE_OOXMLEXPORT_TEST(testOpenDocumentAsReadOnly, "open-as-read-only.docx") +{ + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + CPPUNIT_ASSERT(pTextDoc->GetDocShell()->IsSecurityOptOpenReadOnly()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx index 68a04ba937d7..6199cbf94acd 100644 --- a/sw/source/filter/ww8/docxexport.cxx +++ b/sw/source/filter/ww8/docxexport.cxx @@ -887,14 +887,16 @@ void DocxExport::WriteProperties( ) // Write the core properties SwDocShell* pDocShell( m_pDoc->GetDocShell( ) ); uno::Reference<document::XDocumentProperties> xDocProps; + bool bSecurityOptOpenReadOnly = false; if ( pDocShell ) { uno::Reference<document::XDocumentPropertiesSupplier> xDPS( pDocShell->GetModel( ), uno::UNO_QUERY ); xDocProps = xDPS->getDocumentProperties(); + bSecurityOptOpenReadOnly = pDocShell->IsSecurityOptOpenReadOnly(); } - m_pFilter->exportDocumentProperties( xDocProps ); + m_pFilter->exportDocumentProperties( xDocProps, bSecurityOptOpenReadOnly ); } void DocxExport::WriteSettings() |