[Libreoffice-commits] .: sc/source svx/inc svx/source

Kohei Yoshida kohei at kemper.freedesktop.org
Fri Dec 9 13:33:52 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 4345b5cb72980dc351147da77505ed06a93028ab
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