summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2013-02-11 12:59:49 +0100
committerMichael Stahl <mstahl@redhat.com>2013-02-12 12:53:25 +0000
commit9c7ee2734ef5be82e89e0dfe366e674e0898cc23 (patch)
tree691a0d632f5fc6a1ebbe6f3208b46e7d8f0a08e6
parent61217a8c2f6a330b091444976267d72882cc3ca9 (diff)
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 <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r--sw/qa/core/swdoc-test.cxx24
-rw-r--r--sw/source/core/crsr/pam.cxx20
-rw-r--r--sw/source/core/text/inftxt.cxx5
3 files changed, 44 insertions, 5 deletions
diff --git a/sw/qa/core/swdoc-test.cxx b/sw/qa/core/swdoc-test.cxx
index 03ddd148bef2..a6756a4484ec 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 e122212e2fc5..e745e80d75d9 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 c5bac957a0fa..2785e92fc61c 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();
}