summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerge Krot <Serge.Krot@cib.de>2018-12-17 17:07:23 +0100
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2019-01-18 19:11:40 +0100
commit46c6c414a6df79575517f5df67510d6f4e3d0128 (patch)
treedd340fab7d0a8ca590e0fa5228f5614b8870cc63
parent6808e1e5e2361220988dfa81cb35d03fb6e15855 (diff)
tdf#122201 sw: DOCX: allow editing of unprotected areas in protected doc
Change-Id: I5fb590745b733e2bfb934d946276857b65caf680 Reviewed-on: https://gerrit.libreoffice.org/65278 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de> Reviewed-on: https://gerrit.libreoffice.org/65501 (cherry picked from commit 63ec2e8d07dff652a68c9dc96859c4c61f26b9df) Reviewed-on: https://gerrit.libreoffice.org/65502 Reviewed-by: Michael Stahl <Michael.Stahl@cib.de>
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf122201_editUnprotectedText.odtbin0 -> 7104 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport5.cxx24
-rw-r--r--sw/source/core/crsr/pam.cxx12
3 files changed, 35 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf122201_editUnprotectedText.odt b/sw/qa/extras/ooxmlexport/data/tdf122201_editUnprotectedText.odt
new file mode 100644
index 000000000000..217c8c38a409
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf122201_editUnprotectedText.odt
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
index 54bb46946354..4b443c7ff67c 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
@@ -52,6 +52,8 @@
#include <string>
#include <config_features.h>
+#include <unocrsr.hxx>
+#include <ndtxt.hxx>
class Test : public SwModelTestBase
{
@@ -996,6 +998,28 @@ DECLARE_OOXMLEXPORT_TEST(tdf66398_permissions, "tdf66398_permissions.docx")
CPPUNIT_ASSERT(xBookmarksByName->hasByName("permission-for-group:267014232:everyone"));
}
+DECLARE_OOXMLEXPORT_TEST(tdf122201_editUnprotectedText, "tdf122201_editUnprotectedText.odt")
+{
+ // get the document
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ CPPUNIT_ASSERT(pDoc);
+
+ // get two different nodes
+ SwNodeIndex aDocEnd(pDoc->GetNodes().GetEndOfContent());
+ SwNodeIndex aDocStart(*aDocEnd.GetNode().StartOfSectionNode(), 3);
+
+ // check protected area
+ SwPaM aPaMPortected(aDocStart);
+ CPPUNIT_ASSERT(aPaMPortected.HasReadonlySel(false));
+
+ // check unprotected area
+ SwPaM aPaMUnprotected(aDocEnd);
+ CPPUNIT_ASSERT(!aPaMUnprotected.HasReadonlySel(false));
+}
+
DECLARE_OOXMLEXPORT_TEST(testSectionHeader, "sectionprot.odt")
{
if (xmlDocPtr pXmlDoc = parseExport("word/document.xml"))
diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
index 4e762bfcf218..3eaf288f7b30 100644
--- a/sw/source/core/crsr/pam.cxx
+++ b/sw/source/core/crsr/pam.cxx
@@ -597,6 +597,16 @@ bool SwPaM::HasReadonlySel( bool bFormView ) const
{
bRet = true;
}
+ else
+ {
+ const SwSectionNode* pParentSectionNd = pNd->FindSectionNode();
+ if ( pParentSectionNd != nullptr
+ && ( pParentSectionNd->GetSection().IsProtectFlag()
+ || ( bFormView && !pParentSectionNd->GetSection().IsEditInReadonlyFlag()) ) )
+ {
+ bRet = true;
+ }
+ }
}
if ( !bRet
@@ -701,7 +711,7 @@ bool SwPaM::HasReadonlySel( bool bFormView ) const
// touches fields, or fully encloses it), then don't disable editing
bRet = !( ( !pA || bAtStartA ) && ( !pB || bAtStartB ) );
}
- if( !bRet && pDoc->GetDocumentSettingManager().get( DocumentSettingId::PROTECT_FORM ) )
+ if( !bRet && pDoc->GetDocumentSettingManager().get( DocumentSettingId::PROTECT_FORM ) && (pA || pB) )
{
// Form protection case
bRet = ( pA == nullptr ) || ( pB == nullptr ) || bAtStartA || bAtStartB;