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

TextFieldmark::ReleaseDoc: properly remove text fieldmarks from SwDoc

Change-Id: I7b11cf78f106807561be77c51641796319aaf636
üst 672ca607
......@@ -98,6 +98,38 @@ namespace
}
io_pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_UI_REPLACE, NULL);
};
static void lcl_RemoveFieldMarks(Fieldmark* const pField,
SwDoc* const io_pDoc,
const sal_Unicode aStartMark,
const sal_Unicode aEndMark)
{
SwPosition& rStart = pField->GetMarkStart();
SwPosition& rEnd = pField->GetMarkEnd();
SwTxtNode const*const pStartTxtNode =
rStart.nNode.GetNode().GetTxtNode();
SwTxtNode const*const pEndTxtNode = rEnd.nNode.GetNode().GetTxtNode();
const sal_Unicode ch_start=pStartTxtNode->GetTxt().GetChar(rStart.nContent.GetIndex());
xub_StrLen nEndPos = ( rEnd == rStart || rEnd.nContent.GetIndex() == 0 ) ?
rEnd.nContent.GetIndex() : rEnd.nContent.GetIndex() - 1;
const sal_Unicode ch_end=pEndTxtNode->GetTxt().GetChar( nEndPos );
SwPaM aStartPaM(rStart);
SwPaM aEndPaM(rEnd);
io_pDoc->GetIDocumentUndoRedo().StartUndo(UNDO_UI_REPLACE, NULL);
if( ch_start == aStartMark )
{
SwPaM aStart(rStart, rStart);
aStart.End()->nContent++;
io_pDoc->DeleteRange(aStart);
}
if ( ch_end == aEndMark )
{
SwPaM aEnd(rEnd, rEnd);
aEnd.Start()->nContent--;
io_pDoc->DeleteRange(aEnd);
}
io_pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_UI_REPLACE, NULL);
};
}
namespace sw { namespace mark
......@@ -316,6 +348,11 @@ namespace sw { namespace mark
lcl_AssureFieldMarksSet(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND);
}
void TextFieldmark::ReleaseDoc(SwDoc* const pDoc)
{
lcl_RemoveFieldMarks(this, pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND);
}
CheckboxFieldmark::CheckboxFieldmark(const SwPaM& rPaM)
: Fieldmark(rPaM)
{ }
......
......@@ -593,7 +593,7 @@ namespace sw { namespace mark
isPosInRange = true, isOtherPosInRange = true;
}
if(isPosInRange && (isOtherPosInRange || !pMark->IsExpanded()))
if(isPosInRange && (isOtherPosInRange || !pMark->IsExpanded() || IDocumentMarkAccess::GetType(*pMark) == TEXT_FIELDMARK))
{
// completely in range
......@@ -697,6 +697,9 @@ namespace sw { namespace mark
"<MarkManager::deleteMark(..)>"
" - Bookmark not found.");
m_vFieldmarks.erase(ppFieldmark);
sw::mark::TextFieldmark* pTextFieldmark = dynamic_cast<sw::mark::TextFieldmark*>(ppMark->get());
if (pTextFieldmark)
pTextFieldmark->ReleaseDoc(m_pDoc);
break;
}
case IDocumentMarkAccess::NAVIGATOR_REMINDER:
......
......@@ -237,6 +237,7 @@ namespace sw {
public:
TextFieldmark(const SwPaM& rPaM);
virtual void InitDoc(SwDoc* const io_pDoc);
void ReleaseDoc(SwDoc* const pDoc);
};
class CheckboxFieldmark
......
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