Kaydet (Commit) 2903d85d authored tarafından Luboš Luňák's avatar Luboš Luňák

fix deleting an image anchored to last paragraph in document

It only compared nodes instead of SwPositions, thus refusing to delete
anything anchored at the last content node. Also, select-all makes
rEnd point to the last content node, after its content. So if
an anchor-to-char image is anchored at the end of the paragraph,
it points to this place, too, so that must be checked.

Change-Id: Ie0ba6ed59f47e59492ad88577392884cadb52106
üst 95f0811c
......@@ -134,7 +134,7 @@ namespace nsDelCntntType
/// will DelCntntIndex destroy a frame anchored at character at rAnchorPos?
bool IsDestroyFrameAnchoredAtChar(SwPosition const & rAnchorPos,
SwPosition const & rStart, SwPosition const & rEnd,
SwPosition const & rStart, SwPosition const & rEnd, const SwDoc* doc,
DelCntntType const nDelCntntType = nsDelCntntType::DELCNT_ALL);
// This class has to be inherited into an Undo-object if it saves content
......
......@@ -645,7 +645,7 @@ void SwUndoSaveCntnt::DelCntntIndex( const SwPosition& rMark,
if( !pHistory )
pHistory = new SwHistory;
if (IsDestroyFrameAnchoredAtChar(
*pAPos, *pStt, *pEnd, nDelCntntType))
*pAPos, *pStt, *pEnd, pDoc, nDelCntntType))
{
pHistory->Add( *pFmt, nChainInsPos );
n = n >= rSpzArr.size() ? rSpzArr.size() : n+1;
......@@ -1145,15 +1145,27 @@ OUString ShortenString(const OUString & rStr, sal_Int32 nLength, const OUString
}
bool IsDestroyFrameAnchoredAtChar(SwPosition const & rAnchorPos,
SwPosition const & rStart, SwPosition const & rEnd,
SwPosition const & rStart, SwPosition const & rEnd, const SwDoc* doc,
DelCntntType const nDelCntntType)
{
bool inSelection = rAnchorPos < rEnd;
if( rAnchorPos == rEnd )
{
const SwNodes& nodes = doc->GetNodes();
if( rEnd == SwPosition( nodes.GetEndOfContent()))
inSelection = true;
else
{
SwNodeIndex idx( nodes.GetEndOfContent());
if( SwCntntNode* last = nodes.GoPrevious( &idx ))
inSelection = rEnd == SwPosition( *last, last->Len());
}
}
// Here we identified the objects to destroy:
// - anchored between start and end of the selection
// - anchored in start of the selection with "CheckNoContent"
// - anchored in start of sel. and the selection start at pos 0
return (rAnchorPos.nNode < rEnd.nNode)
return inSelection
&& ( (nsDelCntntType::DELCNT_CHKNOCNTNT & nDelCntntType)
|| (rStart.nNode < rAnchorPos.nNode)
|| !rStart.nContent.GetIndex()
......
......@@ -237,7 +237,8 @@ sal_uLong SwReader::Read( const Reader& rOptions )
&& !IsDestroyFrameAnchoredAtChar(
*pFrameAnchor,
*pUndoPam->GetPoint(),
*pUndoPam->GetMark())
*pUndoPam->GetMark(),
pDoc)
)
)
)
......
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