[Libreoffice-commits] core.git: include/svx sd/qa svx/source

Miklos Vajna vmiklos at collabora.co.uk
Wed Aug 3 11:07:20 UTC 2016


 include/svx/svdundo.hxx                      |    8 +++++---
 sd/qa/unit/tiledrendering/tiledrendering.cxx |   13 +++++++++++++
 svx/source/svdraw/svdundo.cxx                |   11 +++++++++++
 3 files changed, 29 insertions(+), 3 deletions(-)

New commits:
commit 4acac00df5a85ff006ecead06c4018e88caaf401
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Aug 3 11:39:07 2016 +0200

    svx: track view shell id in SdrUndoAction
    
    This is used in Impress e.g. when resizing a picture.
    
    Change-Id: I2e0a9228ed0ff9ecfd72696ef84e56f88e4c0f70
    Reviewed-on: https://gerrit.libreoffice.org/27822
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/include/svx/svdundo.hxx b/include/svx/svdundo.hxx
index 9d63557..fa6cc8a 100644
--- a/include/svx/svdundo.hxx
+++ b/include/svx/svdundo.hxx
@@ -55,11 +55,10 @@ class SVX_DLLPUBLIC SdrUndoAction : public SfxUndoAction
 {
 protected:
     SdrModel&                   rMod;
+    sal_Int32 m_nViewShellId;
 
 protected:
-    SdrUndoAction(SdrModel& rNewMod)
-    :   rMod(rNewMod)
-    {}
+    SdrUndoAction(SdrModel& rNewMod);
 
 public:
     virtual ~SdrUndoAction();
@@ -72,6 +71,9 @@ public:
 
     virtual bool CanSdrRepeat(SdrView& rView) const;
     virtual void SdrRepeat(SdrView& rView);
+
+    /// See SfxUndoAction::GetViewShellId().
+    sal_Int32 GetViewShellId() const override;
 };
 
 /**
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index 603efff..c8dc993 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -34,6 +34,7 @@
 #include <sdpage.hxx>
 #include <unomodel.hxx>
 #include <drawdoc.hxx>
+#include <undo/undomanager.hxx>
 
 using namespace css;
 
@@ -412,6 +413,18 @@ void SdTiledRenderingTest::testSetGraphicSelection()
     // Resize.
     pXImpressDocument->setGraphicSelection(LOK_SETGRAPHICSELECTION_START, convertMm100ToTwip(pHdl->GetPos().getX()), convertMm100ToTwip(pHdl->GetPos().getY()));
     pXImpressDocument->setGraphicSelection(LOK_SETGRAPHICSELECTION_END, convertMm100ToTwip(pHdl->GetPos().getX()), convertMm100ToTwip(pHdl->GetPos().getY() + 1000));
+
+    // Assert that view shell ID tracking works.
+    sal_Int32 nView1 = SfxLokHelper::getView();
+    SdDrawDocument* pDocument = pXImpressDocument->GetDoc();
+    sd::UndoManager* pUndoManager = pDocument->GetUndoManager();
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pUndoManager->GetUndoActionCount());
+    auto pListAction = dynamic_cast<SfxListUndoAction*>(pUndoManager->GetUndoAction());
+    CPPUNIT_ASSERT(pListAction);
+    for (size_t i = 0; i < pListAction->aUndoActions.size(); ++i)
+        // The second item was -1 here, view shell ID wasn't known.
+        CPPUNIT_ASSERT_EQUAL(nView1, pListAction->aUndoActions.GetUndoAction(i)->GetViewShellId());
+
     Rectangle aShapeAfter = pObject->GetSnapRect();
     // Check that a resize happened, but aspect ratio is not kept.
     CPPUNIT_ASSERT_EQUAL(aShapeBefore.getWidth(), aShapeAfter.getWidth());
diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx
index ec5f2fe..42b8337 100644
--- a/svx/source/svdraw/svdundo.cxx
+++ b/svx/source/svdraw/svdundo.cxx
@@ -45,6 +45,7 @@
 #include <sdr/contact/viewcontactofgraphic.hxx>
 #include <svx/svdotable.hxx> // #i124389#
 #include <vcl/svapp.hxx>
+#include <sfx2/viewsh.hxx>
 
 
 // iterates over all views and unmarks this SdrObject if it is marked
@@ -57,6 +58,12 @@ static void ImplUnmarkObject( SdrObject* pObj )
     }
 }
 
+SdrUndoAction::SdrUndoAction(SdrModel& rNewMod)
+    : rMod(rNewMod), m_nViewShellId(-1)
+{
+    if (SfxViewShell* pViewShell = SfxViewShell::Current())
+        m_nViewShellId = pViewShell->GetViewShellId();
+}
 
 SdrUndoAction::~SdrUndoAction() {}
 
@@ -95,6 +102,10 @@ OUString SdrUndoAction::GetSdrRepeatComment(SdrView& /*rView*/) const
     return OUString();
 }
 
+sal_Int32 SdrUndoAction::GetViewShellId() const
+{
+    return m_nViewShellId;
+}
 
 SdrUndoGroup::SdrUndoGroup(SdrModel& rNewMod)
 :   SdrUndoAction(rNewMod),


More information about the Libreoffice-commits mailing list