summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-08-03 11:39:07 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-08-04 09:56:12 +0200
commit64eba246de2277602eb10f26789093ba3c066b5b (patch)
tree8d1271fdf5ebe2048605b5d4b6d0e91169801dd5
parent9ab633b5ea1266e354a3d0f122dff9c10c4e7120 (diff)
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@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org> (cherry picked from commit 4acac00df5a85ff006ecead06c4018e88caaf401)
-rw-r--r--include/svx/svdundo.hxx8
-rw-r--r--sd/qa/unit/tiledrendering/tiledrendering.cxx13
-rw-r--r--svx/source/svdraw/svdundo.cxx11
3 files changed, 29 insertions, 3 deletions
diff --git a/include/svx/svdundo.hxx b/include/svx/svdundo.hxx
index 63f532c16a59..4ffc74b1c9cb 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 88239247cb53..12529cdd6c24 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;
@@ -408,6 +409,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 835d34be58d0..28064e702f6f 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),