Kaydet (Commit) bd505fdb authored tarafından Miklos Vajna's avatar Miklos Vajna

fdo#59573 position after fieldmark and before annotation anchor is read-only

Also revert "SwTxtPaintInfo::_DrawBackBrush: draw dark border around
comment highlight" (commit 57c8c34f), as
it draws confusing vertical lines inside the comment when it has
multiple runs.

Change-Id: If0f60e4a28878c2b31327ae3c04ae11470bc1f52
üst 6865445a
...@@ -91,6 +91,7 @@ public: ...@@ -91,6 +91,7 @@ public:
void testUserPerceivedCharCount(); void testUserPerceivedCharCount();
void testGraphicAnchorDeletion(); void testGraphicAnchorDeletion();
void testFdo57938(); void testFdo57938();
void testFdo59573();
CPPUNIT_TEST_SUITE(SwDocTest); CPPUNIT_TEST_SUITE(SwDocTest);
CPPUNIT_TEST(randomTest); CPPUNIT_TEST(randomTest);
...@@ -102,6 +103,7 @@ public: ...@@ -102,6 +103,7 @@ public:
CPPUNIT_TEST(testUserPerceivedCharCount); CPPUNIT_TEST(testUserPerceivedCharCount);
CPPUNIT_TEST(testGraphicAnchorDeletion); CPPUNIT_TEST(testGraphicAnchorDeletion);
CPPUNIT_TEST(testFdo57938); CPPUNIT_TEST(testFdo57938);
CPPUNIT_TEST(testFdo59573);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
private: private:
...@@ -896,6 +898,26 @@ void SwDocTest::testFdo57938() ...@@ -896,6 +898,26 @@ void SwDocTest::testFdo57938()
CPPUNIT_ASSERT_EQUAL(false, aPaM.HasReadonlySel(false)); CPPUNIT_ASSERT_EQUAL(false, aPaM.HasReadonlySel(false));
} }
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(true, aPaM.HasReadonlySel(false));
}
void SwDocTest::setUp() void SwDocTest::setUp()
{ {
BootstrapFixture::setUp(); BootstrapFixture::setUp();
......
...@@ -687,9 +687,9 @@ bool SwPaM::HasReadonlySel( bool bFormView ) const ...@@ -687,9 +687,9 @@ bool SwPaM::HasReadonlySel( bool bFormView ) const
sw::mark::IMark* pB = NULL; sw::mark::IMark* pB = NULL;
bool bUnhandledMark = false; bool bUnhandledMark = false;
bool bCommentrangeMark = false; bool bCommentrangeMark = false;
const IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
if ( pDoc ) if ( pDoc )
{ {
const IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess( );
pA = GetPoint() ? pMarksAccess->getFieldmarkFor( *GetPoint( ) ) : NULL; pA = GetPoint() ? pMarksAccess->getFieldmarkFor( *GetPoint( ) ) : NULL;
pB = GetMark( ) ? pMarksAccess->getFieldmarkFor( *GetMark( ) ) : pA; pB = GetMark( ) ? pMarksAccess->getFieldmarkFor( *GetMark( ) ) : pA;
...@@ -730,6 +730,24 @@ bool SwPaM::HasReadonlySel( bool bFormView ) const ...@@ -730,6 +730,24 @@ bool SwPaM::HasReadonlySel( bool bFormView ) const
{ {
bRet = !( pA == pB && pA != NULL ); 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; return bRet;
} }
......
...@@ -1119,15 +1119,12 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const ...@@ -1119,15 +1119,12 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const
const OUString& rAuthor = rPostItField.GetFld()->GetPar1(); const OUString& rAuthor = rPostItField.GetFld()->GetPar1();
sal_uInt16 nIndex = pNd->GetDoc()->InsertRedlineAuthor(rAuthor); sal_uInt16 nIndex = pNd->GetDoc()->InsertRedlineAuthor(rAuthor);
pOutDev->SetFillColor( SwPostItMgr::GetColorLight(nIndex) ); pOutDev->SetFillColor( SwPostItMgr::GetColorLight(nIndex) );
pOutDev->SetLineColor( SwPostItMgr::GetColorAnchor(nIndex) );
bFilled = true; bFilled = true;
} }
} }
if (!bFilled) if (!bFilled)
{
pOutDev->SetFillColor( SwViewOption::GetFieldShadingsColor() ); pOutDev->SetFillColor( SwViewOption::GetFieldShadingsColor() );
pOutDev->SetLineColor( ); pOutDev->SetLineColor( );
}
pOutDev->DrawRect( aIntersect.SVRect() ); pOutDev->DrawRect( aIntersect.SVRect() );
pOutDev->Pop(); pOutDev->Pop();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment