sw/qa/core/swdoc-test.cxx | 24 ++++++++++++++++++++++++ sw/source/core/crsr/pam.cxx | 20 +++++++++++++++++++- sw/source/core/text/inftxt.cxx | 5 +---- 3 files changed, 44 insertions(+), 5 deletions(-)
New commits: commit 9c7ee2734ef5be82e89e0dfe366e674e0898cc23 Author: Miklos Vajna <vmik...@suse.cz> Date: Mon Feb 11 12:59:49 2013 +0100 fdo#59573 position after fieldmark and before annotation anchor is read-only Also revert "SwTxtPaintInfo::_DrawBackBrush: draw dark border around comment highlight" (commit 57c8c34fcdc2d594d2da3593eb9d86d0daf4e18c), as it draws confusing vertical lines inside the comment when it has multiple runs. (cherry picked from commit bd505fdb9f669f365ff39b0ef46f0742c638e333) Conflicts: sw/qa/core/swdoc-test.cxx Change-Id: If0f60e4a28878c2b31327ae3c04ae11470bc1f52 Reviewed-on: https://gerrit.libreoffice.org/2101 Reviewed-by: Michael Stahl <mst...@redhat.com> Tested-by: Michael Stahl <mst...@redhat.com> diff --git a/sw/qa/core/swdoc-test.cxx b/sw/qa/core/swdoc-test.cxx index 03ddd14..a6756a4 100644 --- a/sw/qa/core/swdoc-test.cxx +++ b/sw/qa/core/swdoc-test.cxx @@ -45,6 +45,8 @@ #include <sfx2/docfile.hxx> #include <sfx2/sfxmodelfactory.hxx> +#include <xmloff/odffields.hxx> + #include "breakit.hxx" #include "doc.hxx" #include "docsh.hxx" @@ -88,6 +90,7 @@ public: void testSwScanner(); void testUserPerceivedCharCount(); void testGraphicAnchorDeletion(); + void testFdo59573(); CPPUNIT_TEST_SUITE(SwDocTest); CPPUNIT_TEST(randomTest); @@ -98,6 +101,7 @@ public: CPPUNIT_TEST(testSwScanner); CPPUNIT_TEST(testUserPerceivedCharCount); CPPUNIT_TEST(testGraphicAnchorDeletion); + CPPUNIT_TEST(testFdo59573); CPPUNIT_TEST_SUITE_END(); private: @@ -878,6 +882,26 @@ void SwDocTest::randomTest() } } +void SwDocTest::testFdo59573() +{ + SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1); + SwPaM aPaM(aIdx); + + // Insert "abc" and create a fieldmark around "b". + OUString aTest("abc"); + m_pDoc->InsertString(aPaM, aTest); + aPaM.SetMark(); + aPaM.GetPoint()->nContent = 1; + aPaM.GetMark()->nContent = 2; + IDocumentMarkAccess* pMarksAccess = m_pDoc->getIDocumentMarkAccess(); + pMarksAccess->makeFieldBookmark(aPaM, "", ODF_COMMENTRANGE); + aPaM.GetPoint()->nContent = 4; + aPaM.GetMark()->nContent = 4; + // The problem was that the position after the fieldmark end and before the + // annotation anchor wasn't read-only. + CPPUNIT_ASSERT_EQUAL(sal_True, aPaM.HasReadonlySel(false)); +} + void SwDocTest::setUp() { BootstrapFixture::setUp(); diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx index e122212..e745e80 100644 --- a/sw/source/core/crsr/pam.cxx +++ b/sw/source/core/crsr/pam.cxx @@ -686,9 +686,9 @@ sal_Bool SwPaM::HasReadonlySel( bool bFormView ) const sw::mark::IMark* pB = NULL; bool bUnhandledMark = false; bool bCommentrangeMark = false; + const IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess(); if ( pDoc ) { - const IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess( ); pA = GetPoint() ? pMarksAccess->getFieldmarkFor( *GetPoint( ) ) : NULL; pB = GetMark( ) ? pMarksAccess->getFieldmarkFor( *GetMark( ) ) : pA; @@ -729,6 +729,24 @@ sal_Bool SwPaM::HasReadonlySel( bool bFormView ) const { bRet = !( pA == pB && pA != NULL ); } + + // Don't allow inserting characters between the 'field mark end' and + // the 'comment anchor'. + if (!bRet) + { + if (!pA && GetPoint() && GetPoint()->nNode.GetNode().IsTxtNode() && GetPoint()->nContent.GetIndex() > 0) + { + // getFieldmarkFor() searches for >= start and < end, so check for + // the previous character, to also get the fieldmark, if we're + // exactly at the end. + SwPosition aPrevChar(*GetPoint()); + aPrevChar.nContent--; + sw::mark::IFieldmark* pFieldmark = pMarksAccess->getFieldmarkFor(aPrevChar); + if (pFieldmark && pFieldmark->GetMarkEnd() == *GetPoint()) + bRet = true; + } + } + return bRet; } diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index c5bac95..2785e92 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -1117,15 +1117,12 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const const OUString& rAuthor = rPostItField.GetFld()->GetPar1(); sal_uInt16 nIndex = pNd->GetDoc()->InsertRedlineAuthor(rAuthor); pOutDev->SetFillColor( SwPostItMgr::GetColorLight(nIndex) ); - pOutDev->SetLineColor( SwPostItMgr::GetColorAnchor(nIndex) ); bFilled = true; } } if (!bFilled) - { pOutDev->SetFillColor( SwViewOption::GetFieldShadingsColor() ); - pOutDev->SetLineColor( ); - } + pOutDev->SetLineColor( ); pOutDev->DrawRect( aIntersect.SVRect() ); pOutDev->Pop(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits