summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/uiwriter/data/tdf105625.fodt1
-rw-r--r--sw/qa/extras/uiwriter/uiwriter.cxx12
-rw-r--r--sw/source/core/crsr/callnk.cxx4
-rw-r--r--sw/source/core/crsr/pam.cxx4
4 files changed, 15 insertions, 6 deletions
diff --git a/sw/qa/extras/uiwriter/data/tdf105625.fodt b/sw/qa/extras/uiwriter/data/tdf105625.fodt
index 44c0577d301b..9a1d573d033f 100644
--- a/sw/qa/extras/uiwriter/data/tdf105625.fodt
+++ b/sw/qa/extras/uiwriter/data/tdf105625.fodt
@@ -3,6 +3,7 @@
<office:body>
<office:text>
<text:p><field:fieldmark field:type="vnd.oasis.opendocument.field.FORMCHECKBOX"/></text:p>
+ <text:p><field:fieldmark-start field:type="vnd.oasis.opendocument.field.FORMTEXT"/>Field<field:fieldmark-end/></text:p>
</office:text>
</office:body>
</office:document> \ No newline at end of file
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index eb49924ee181..309791efeebd 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -4273,18 +4273,24 @@ void SwUiWriterTest::testTdf105417()
void SwUiWriterTest::testTdf105625()
{
- // We should be able to edit at positions adjacent to fields.
- // Check if the start and the end of the only paragraph are not protected
- // (they are adjacent to FORMCHECKBOX)
SwDoc* pDoc = createDoc("tdf105625.fodt");
SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
uno::Reference<uno::XComponentContext> xComponentContext(comphelper::getProcessComponentContext());
// Ensure correct initial setting
comphelper::ConfigurationHelper::writeDirectKey(xComponentContext, "org.openoffice.Office.Writer/", "Cursor/Option", "IgnoreProtectedArea", css::uno::Any(false), comphelper::EConfigurationModes::Standard);
+ // We should be able to edit at positions adjacent to fields.
+ // Check if the start and the end of the 1st paragraph are not protected
+ // (they are adjacent to FORMCHECKBOX)
pWrtShell->SttPara();
CPPUNIT_ASSERT_EQUAL(false, pWrtShell->HasReadonlySel());
pWrtShell->EndPara();
CPPUNIT_ASSERT_EQUAL(false, pWrtShell->HasReadonlySel());
+ // 2nd paragraph - FORMTEXT
+ pWrtShell->Down(/*bSelect=*/false);
+ // Check selection across FORMTEXT field boundary - must be read-only
+ pWrtShell->SttPara();
+ pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false);
+ CPPUNIT_ASSERT_EQUAL(true, pWrtShell->HasReadonlySel());
}
CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest);
diff --git a/sw/source/core/crsr/callnk.cxx b/sw/source/core/crsr/callnk.cxx
index 24bfb6190be7..230850ec5973 100644
--- a/sw/source/core/crsr/callnk.cxx
+++ b/sw/source/core/crsr/callnk.cxx
@@ -195,8 +195,8 @@ SwCallLink::~SwCallLink()
{
const OUString rText = pCNd->GetTextNode()->GetText();
if( !nCmp ||
- g_pBreakIt->GetBreakIter()->getScriptType( rText, nCmp )
- != g_pBreakIt->GetBreakIter()->getScriptType( rText, nCmp - 1 ))
+ g_pBreakIt->GetBreakIter()->getScriptType( rText, nContent )
+ != g_pBreakIt->GetBreakIter()->getScriptType(rText, nAktContent))
{
rShell.CallChgLnk();
return;
diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
index ee5ad68010ed..7c58f1665391 100644
--- a/sw/source/core/crsr/pam.cxx
+++ b/sw/source/core/crsr/pam.cxx
@@ -691,7 +691,9 @@ bool SwPaM::HasReadonlySel( bool bFormView, bool /*bAnnotationMode*/ ) const
bool bAtStartA = (pA != nullptr) && (pA->GetMarkStart() == *GetPoint());
bool bAtStartB = (pB != nullptr) && (pB->GetMarkStart() == *GetMark());
- if (pA != pB)
+ if ((pA == pB) && (bAtStartA != bAtStartB))
+ bRet = true;
+ else if (pA != pB)
{
// If both points are either outside or at marks edges (i.e. selection either
// touches fields, or fully encloses it), then don't disable editing