[Libreoffice-commits] .: Branch 'libreoffice-4-0' - sc/inc sc/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sat Jan 26 16:59:02 PST 2013


 sc/inc/drwlayer.hxx              |    1 +
 sc/source/core/data/drwlayer.cxx |    7 +++++++
 sc/source/ui/view/viewfun7.cxx   |    8 ++++++--
 3 files changed, 14 insertions(+), 2 deletions(-)

New commits:
commit c4820200312e3d50a12d3605147772759938bcf6
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Fri Jan 25 12:57:14 2013 -0500

    fdo#59056: Re-calculate cell anchor position of a pasted drawing object.
    
    Else it would re-use the anchor position of the original one (minus the
    sheet index which is correctly adjusted).
    
    Change-Id: I52d11eb9953ee7539c9d5da41edd7dd28604587c
    Reviewed-on: https://gerrit.libreoffice.org/1869
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/inc/drwlayer.hxx b/sc/inc/drwlayer.hxx
index 298d619..72b980d 100644
--- a/sc/inc/drwlayer.hxx
+++ b/sc/inc/drwlayer.hxx
@@ -166,6 +166,7 @@ public:
     String          GetNewGraphicName( long* pnCounter = NULL ) const;
     void            EnsureGraphicNames();
 
+    static bool IsCellAnchored( const SdrObject& rObj );
     static void             SetPageAnchored( SdrObject& );
     static void             SetCellAnchored( SdrObject&, const ScDrawObjData &rAnchor );
     // Updates rAnchor based on position of rObj
diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index 76d6794..8ea4fca 100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -1787,6 +1787,13 @@ void ScDrawLayer::UpdateCellAnchorFromPositionEnd( SdrObject &rObj, const ScDocu
         pAnchor->maEndOffset.X() = aCellRect.Right()-aObjRect.Left();
 }
 
+bool ScDrawLayer::IsCellAnchored( const SdrObject& rObj )
+{
+    // Cell anchored object always has a user data, to store the anchor cell
+    // info. If it doesn't then it's page-anchored.
+    return GetFirstUserDataOfType(&rObj, SC_UD_OBJDATA) != NULL;
+}
+
 void ScDrawLayer::SetPageAnchored( SdrObject &rObj )
 {
     DeleteFirstUserDataOfType(&rObj, SC_UD_OBJDATA);
diff --git a/sc/source/ui/view/viewfun7.cxx b/sc/source/ui/view/viewfun7.cxx
index c69dc65..63e2f1a 100644
--- a/sc/source/ui/view/viewfun7.cxx
+++ b/sc/source/ui/view/viewfun7.cxx
@@ -172,8 +172,8 @@ void ScViewFunc::PasteDraw( const Point& rLogicPos, SdrModel* pModel,
                     pDestPage->InsertObject( pNeuObj );
                     pScDrawView->AddUndo(new SdrUndoInsertObj( *pNeuObj ));
 
-                    //  Chart braucht nicht mehr getrennt behandelt zu werden,
-                    //  weil es seine Daten jetzt selber hat
+                    if (ScDrawLayer::IsCellAnchored(*pNeuObj))
+                        ScDrawLayer::SetCellAnchoredFromPosition(*pNeuObj, *GetViewData()->GetDocument(), nTab);
                 }
             }
 
@@ -238,6 +238,10 @@ void ScViewFunc::PasteDraw( const Point& rLogicPos, SdrModel* pModel,
             {
                 if ( pObject->ISA(SdrUnoObj) && pObject->GetLayer() != SC_LAYER_CONTROLS )
                     pObject->NbcSetLayer(SC_LAYER_CONTROLS);
+
+                if (ScDrawLayer::IsCellAnchored(*pObject))
+                    ScDrawLayer::SetCellAnchoredFromPosition(*pObject, *GetViewData()->GetDocument(), nTab);
+
                 pObject = aIter.Next();
             }
         }


More information about the Libreoffice-commits mailing list