summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)