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 ...@@ -98,6 +98,38 @@ namespace
} }
io_pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_UI_REPLACE, NULL); 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 namespace sw { namespace mark
...@@ -316,6 +348,11 @@ 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); 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) CheckboxFieldmark::CheckboxFieldmark(const SwPaM& rPaM)
: Fieldmark(rPaM) : Fieldmark(rPaM)
{ } { }
......
...@@ -593,7 +593,7 @@ namespace sw { namespace mark ...@@ -593,7 +593,7 @@ namespace sw { namespace mark
isPosInRange = true, isOtherPosInRange = true; isPosInRange = true, isOtherPosInRange = true;
} }
if(isPosInRange && (isOtherPosInRange || !pMark->IsExpanded())) if(isPosInRange && (isOtherPosInRange || !pMark->IsExpanded() || IDocumentMarkAccess::GetType(*pMark) == TEXT_FIELDMARK))
{ {
// completely in range // completely in range
...@@ -697,6 +697,9 @@ namespace sw { namespace mark ...@@ -697,6 +697,9 @@ namespace sw { namespace mark
"<MarkManager::deleteMark(..)>" "<MarkManager::deleteMark(..)>"
" - Bookmark not found."); " - Bookmark not found.");
m_vFieldmarks.erase(ppFieldmark); m_vFieldmarks.erase(ppFieldmark);
sw::mark::TextFieldmark* pTextFieldmark = dynamic_cast<sw::mark::TextFieldmark*>(ppMark->get());
if (pTextFieldmark)
pTextFieldmark->ReleaseDoc(m_pDoc);
break; break;
} }
case IDocumentMarkAccess::NAVIGATOR_REMINDER: case IDocumentMarkAccess::NAVIGATOR_REMINDER:
......
...@@ -237,6 +237,7 @@ namespace sw { ...@@ -237,6 +237,7 @@ namespace sw {
public: public:
TextFieldmark(const SwPaM& rPaM); TextFieldmark(const SwPaM& rPaM);
virtual void InitDoc(SwDoc* const io_pDoc); virtual void InitDoc(SwDoc* const io_pDoc);
void ReleaseDoc(SwDoc* const pDoc);
}; };
class CheckboxFieldmark 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