[Libreoffice-commits] .: Branch 'libreoffice-3-5' - sc/source svx/inc svx/source
Kohei Yoshida
kohei at kemper.freedesktop.org
Fri Dec 9 13:35:29 PST 2011
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 <kohei.yoshida at suse.com>
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++)
More information about the Libreoffice-commits
mailing list