summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/source/ui/view/drawvie3.cxx7
-rw-r--r--svx/inc/svx/svdhdl.hxx1
-rw-r--r--svx/source/svdraw/svdhdl.cxx20
3 files changed, 28 insertions, 0 deletions
diff --git a/sc/source/ui/view/drawvie3.cxx b/sc/source/ui/view/drawvie3.cxx
index 964fb14527bd..ed701a2d62ab 100644
--- a/sc/source/ui/view/drawvie3.cxx
+++ b/sc/source/ui/view/drawvie3.cxx
@@ -87,6 +87,10 @@ void ScDrawView::SetPageAnchored()
if ( pViewData )
pViewData->GetDocShell()->SetDrawModified();
+
+ // Remove the anchor object.
+ aHdl.RemoveAllByKind(HDL_ANCHOR);
+ aHdl.RemoveAllByKind(HDL_ANCHOR_TR);
}
}
@@ -108,6 +112,9 @@ void ScDrawView::SetCellAnchored()
if ( pViewData )
pViewData->GetDocShell()->SetDrawModified();
+
+ // Set the anchor object.
+ AddCustomHdl();
}
}
diff --git a/svx/inc/svx/svdhdl.hxx b/svx/inc/svx/svdhdl.hxx
index 895644d47784..f94a00e57acb 100644
--- a/svx/inc/svx/svdhdl.hxx
+++ b/svx/inc/svx/svdhdl.hxx
@@ -502,6 +502,7 @@ public:
// also auf dem Heap stehen, da Clear() ein delete macht.
void AddHdl(SdrHdl* pHdl, sal_Bool bAtBegin=sal_False);
SdrHdl* RemoveHdl(sal_uIntPtr nNum);
+ void RemoveAllByKind(SdrHdlKind eKind);
// Zuletzt eingefuegte Handles werden am ehesten getroffen
// (wenn Handles uebereinander liegen).
diff --git a/svx/source/svdraw/svdhdl.cxx b/svx/source/svdraw/svdhdl.cxx
index 3d2e7868a0b0..5d58e1f85e81 100644
--- a/svx/source/svdraw/svdhdl.cxx
+++ b/svx/source/svdraw/svdhdl.cxx
@@ -2081,6 +2081,26 @@ SdrHdl* SdrHdlList::RemoveHdl(sal_uIntPtr nNum)
return pRetval;
}
+void SdrHdlList::RemoveAllByKind(SdrHdlKind eKind)
+{
+ SdrHdl* p = static_cast<SdrHdl*>(aList.Last());
+ while (p)
+ {
+ if (p->GetKind() == eKind)
+ {
+ // If removing an item doesn't invalidate the current position,
+ // then perhaps it's safe to keep calling Prev here. But then I'm
+ // too lazy to find out & this Container needs to be replaced by
+ // STL anyways... :-P
+ aList.Remove(p);
+ delete p;
+ p = static_cast<SdrHdl*>(aList.Last()); // start from the back again.
+ }
+ else
+ p = static_cast<SdrHdl*>(aList.Prev());
+ }
+}
+
void SdrHdlList::Clear()
{
for (sal_uIntPtr i=0; i<GetHdlCount(); i++)