diff options
-rw-r--r-- | sw/qa/extras/uiwriter/data/tdf105625.fodt | 1 | ||||
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter.cxx | 12 | ||||
-rw-r--r-- | sw/source/core/crsr/callnk.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/crsr/pam.cxx | 4 |
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 |