summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-08-03 17:01:02 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-08-04 11:10:04 +0200
commit45e01b368e39069151f235b7d4954da1b76c9ffd (patch)
tree4f516009aa9d5633aac44b8a83c9050519c0a181
parentbe029cf8dc82702730d901cf881238763a3ec99b (diff)
sd: track view shell id in SdUndoAction
This helps in case of e.g. setting the page size of an Impress slide from the sidebar. Change-Id: I6247d6efcc59f2c6311dcd33d0f989a39fd7b3f9 Reviewed-on: https://gerrit.libreoffice.org/27827 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org> (cherry picked from commit f6283cf6b4342a0492f1127c2d7a8597255a75c3)
-rw-r--r--sd/inc/sdundo.hxx6
-rw-r--r--sd/qa/unit/tiledrendering/tiledrendering.cxx23
-rw-r--r--sd/source/core/undo/undoobjects.cxx18
3 files changed, 45 insertions, 2 deletions
diff --git a/sd/inc/sdundo.hxx b/sd/inc/sdundo.hxx
index 84b81a3215ae..661f354895ec 100644
--- a/sd/inc/sdundo.hxx
+++ b/sd/inc/sdundo.hxx
@@ -28,17 +28,19 @@ class SdDrawDocument;
class SD_DLLPUBLIC SdUndoAction : public SfxUndoAction
{
public:
- SdUndoAction(SdDrawDocument* pSdDrawDocument)
- : mpDoc(pSdDrawDocument) {}
+ SdUndoAction(SdDrawDocument* pSdDrawDocument);
virtual ~SdUndoAction() {}
void SetComment(const OUString& rStr) { maComment = rStr; }
virtual OUString GetComment() const override { return maComment; }
virtual SdUndoAction* Clone() const { return nullptr; }
+ /// See SfxUndoAction::GetViewShellId().
+ sal_Int32 GetViewShellId() const override;
protected:
SdDrawDocument* mpDoc;
OUString maComment;
+ sal_Int32 mnViewShellId;
};
#endif // INCLUDED_SD_INC_SDUNDO_HXX
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index 4e28834b0cca..ba1cb848456c 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -53,6 +53,7 @@ public:
void testSetTextSelection();
void testGetTextSelection();
void testSetGraphicSelection();
+ void testUndoShells();
void testResetSelection();
void testSearch();
void testSearchAll();
@@ -76,6 +77,7 @@ public:
CPPUNIT_TEST(testSetTextSelection);
CPPUNIT_TEST(testGetTextSelection);
CPPUNIT_TEST(testSetGraphicSelection);
+ CPPUNIT_TEST(testUndoShells);
CPPUNIT_TEST(testResetSelection);
CPPUNIT_TEST(testSearch);
CPPUNIT_TEST(testSearchAll);
@@ -427,6 +429,27 @@ void SdTiledRenderingTest::testSetGraphicSelection()
CPPUNIT_ASSERT(aShapeBefore.getHeight() < aShapeAfter.getHeight());
}
+void SdTiledRenderingTest::testUndoShells()
+{
+ // Load a document and set the page size.
+ SdXImpressDocument* pXImpressDocument = createDoc("shape.odp");
+ uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence(
+ {
+ {"AttributePageSize.Width", uno::makeAny(static_cast<sal_Int32>(10000))},
+ {"AttributePageSize.Height", uno::makeAny(static_cast<sal_Int32>(10000))},
+ }));
+ comphelper::dispatchCommand(".uno:AttributePageSize", aPropertyValues);
+ Scheduler::ProcessEventsToIdle();
+
+ // Assert that view shell ID tracking works for SdUndoAction subclasses.
+ SdDrawDocument* pDocument = pXImpressDocument->GetDoc();
+ sd::UndoManager* pUndoManager = pDocument->GetUndoManager();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pUndoManager->GetUndoActionCount());
+ sal_Int32 nView1 = SfxLokHelper::getView();
+ // This was -1, SdUndoGroup did not track what view shell created it.
+ CPPUNIT_ASSERT_EQUAL(nView1, pUndoManager->GetUndoAction()->GetViewShellId());
+}
+
void SdTiledRenderingTest::testResetSelection()
{
SdXImpressDocument* pXImpressDocument = createDoc("dummy.odp");
diff --git a/sd/source/core/undo/undoobjects.cxx b/sd/source/core/undo/undoobjects.cxx
index c8017f335228..84eced5a35ae 100644
--- a/sd/source/core/undo/undoobjects.cxx
+++ b/sd/source/core/undo/undoobjects.cxx
@@ -22,9 +22,27 @@
#include "CustomAnimationEffect.hxx"
#include "drawdoc.hxx"
#include "undoanim.hxx"
+#include "../../ui/inc/ViewShell.hxx"
+#include "../../ui/inc/ViewShellBase.hxx"
+#include "../../ui/inc/DrawDocShell.hxx"
using namespace sd;
+SdUndoAction::SdUndoAction(SdDrawDocument* pSdDrawDocument)
+ : mpDoc(pSdDrawDocument),
+ mnViewShellId(-1)
+{
+ sd::DrawDocShell* pDocShell = pSdDrawDocument ? pSdDrawDocument->GetDocSh() : nullptr;
+ sd::ViewShell* pViewShell = pDocShell ? pDocShell->GetViewShell() : nullptr;
+ if (pViewShell)
+ mnViewShellId = pViewShell->GetViewShellBase().GetViewShellId();
+}
+
+sal_Int32 SdUndoAction::GetViewShellId() const
+{
+ return mnViewShellId;
+}
+
UndoRemovePresObjectImpl::UndoRemovePresObjectImpl( SdrObject& rObject )
: mpUndoUsercall(nullptr)
, mpUndoAnimation(nullptr)