sc/source/ui/view/drawvie3.cxx | 7 +++++++ svx/inc/svx/svdhdl.hxx | 1 + svx/source/svdraw/svdhdl.cxx | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+)
New commits: commit 656b578086f88f262002869c3632fdbd95a66784 Author: Kohei Yoshida <[email protected]> Date: Fri Dec 9 16:31:30 2011 -0500 fdo#38545: Show/hide anchor when the anchoring status changes. Setting a page-anchored object to cell-anchored didn't show the anchor immediately until you unselect the object and re-select it. Same for the cell-anchored to page-anchored direction. This commit fixes it. diff --git a/sc/source/ui/view/drawvie3.cxx b/sc/source/ui/view/drawvie3.cxx index 964fb14..ed701a2 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 895644d..f94a00e 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 3d2e786..5d58e1f 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++) _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
