include/svx/svdedxv.hxx | 3 -- include/svx/svdmrkv.hxx | 4 +++ sd/qa/unit/tiledrendering/tiledrendering.cxx | 33 +++++++++++++++++++++++++++ svx/source/svdraw/svdedxv.cxx | 5 ---- svx/source/svdraw/svdmrkv.cxx | 15 ++++++++---- 5 files changed, 47 insertions(+), 13 deletions(-)
New commits: commit c152008943160fa901ef8a356515a6a074370ff0 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Fri Sep 2 14:21:18 2016 +0200 svx: move GetSfxViewShell() to SdrMarkView ... from SdrObjEditView. This way SdrMarkView can avoid SfxViewShell::Current() calls, and it can avoid clearing the LOK graphic selection of the old view when constructing a new view. With this, an existing graphic selection in an Impress LOK view is no longer cleared when creating a new view, thanks to the sd::View::GetSfxViewShell() override. Change-Id: I70a287aa9c2265bf59a9fb18e0c3839b8f119bbc Reviewed-on: https://gerrit.libreoffice.org/28618 Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> Tested-by: Jenkins <c...@libreoffice.org> diff --git a/include/svx/svdedxv.hxx b/include/svx/svdedxv.hxx index 0e48c22..a22f5b5 100644 --- a/include/svx/svdedxv.hxx +++ b/include/svx/svdedxv.hxx @@ -35,7 +35,6 @@ class ImpSdrEditPara; struct PasteOrDropInfos; class SdrUndoManager; class TextChainCursorManager; -class SfxViewShell; namespace com { namespace sun { namespace star { namespace uno { class Any; @@ -160,8 +159,6 @@ public: SdrPageView* ShowSdrPage(SdrPage* pPage) override; void HideSdrPage() override; - /// Get access to the view shell owning this draw view, if any. - virtual SfxViewShell* GetSfxViewShell() const; virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override; virtual void ModelHasChanged() override; diff --git a/include/svx/svdmrkv.hxx b/include/svx/svdmrkv.hxx index dc4f739..1c851ec 100644 --- a/include/svx/svdmrkv.hxx +++ b/include/svx/svdmrkv.hxx @@ -27,6 +27,8 @@ #include <svx/svxdllapi.h> #include <o3tl/typed_flags_set.hxx> +class SfxViewShell; + // The following is not yet implemented, or just partially: enum class SdrSearchOptions { @@ -437,6 +439,8 @@ public: // End point of the axis of reflextion const Point& GetRef2() const { return maRef1; } void SetRef2(const Point& rPt); + /// Get access to the view shell owning this draw view, if any. + virtual SfxViewShell* GetSfxViewShell() const; }; diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx index 268692e..b5ba3ae 100644 --- a/sd/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx @@ -70,6 +70,7 @@ public: void testCursorViews(); void testViewLock(); void testUndoLimiting(); + void testCreateViewGraphicSelection(); CPPUNIT_TEST_SUITE(SdTiledRenderingTest); CPPUNIT_TEST(testRegisterCallback); @@ -95,6 +96,7 @@ public: CPPUNIT_TEST(testCursorViews); CPPUNIT_TEST(testViewLock); CPPUNIT_TEST(testUndoLimiting); + CPPUNIT_TEST(testCreateViewGraphicSelection); CPPUNIT_TEST_SUITE_END(); private: @@ -1110,6 +1112,37 @@ void SdTiledRenderingTest::testUndoLimiting() comphelper::LibreOfficeKit::setActive(false); } +void SdTiledRenderingTest::testCreateViewGraphicSelection() +{ + comphelper::LibreOfficeKit::setActive(); + + // Load a document and register a callback. + SdXImpressDocument* pXImpressDocument = createDoc("shape.odp"); + pXImpressDocument->initializeForTiledRendering({}); + ViewCallback aView1; + SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView1); + + // Select the only shape in the document and assert that the graphic selection is changed. + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + SdPage* pActualPage = pViewShell->GetActualPage(); + SdrObject* pObject = pActualPage->GetObj(0); + SdrView* pView = pViewShell->GetView(); + aView1.m_bGraphicSelectionInvalidated = false; + pView->MarkObj(pObject, pView->GetSdrPageView()); + CPPUNIT_ASSERT(aView1.m_bGraphicSelectionInvalidated); + + // Now create a new view. + aView1.m_bGraphicSelectionInvalidated = false; + SfxLokHelper::createView(); + // This failed, creating a new view affected the graphic selection of an + // existing view. + CPPUNIT_ASSERT(!aView1.m_bGraphicSelectionInvalidated); + + mxComponent->dispose(); + mxComponent.clear(); + comphelper::LibreOfficeKit::setActive(false); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdTiledRenderingTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 735cbc1..323b4a8 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -212,11 +212,6 @@ void SdrObjEditView::TakeActionRect(Rectangle& rRect) const } } -SfxViewShell* SdrObjEditView::GetSfxViewShell() const -{ - return nullptr; -} - void SdrObjEditView::Notify(SfxBroadcaster& rBC, const SfxHint& rHint) { SdrGlueEditView::Notify(rBC,rHint); diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx index 9e4bdd2..a4a7916 100644 --- a/svx/source/svdraw/svdmrkv.cxx +++ b/svx/source/svdraw/svdmrkv.cxx @@ -228,7 +228,7 @@ void SdrMarkView::ModelHasChanged() sSelection = aSelection.toString(); } - if(SfxViewShell* pViewShell = SfxViewShell::Current()) + if(SfxViewShell* pViewShell = GetSfxViewShell()) pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_INVALIDATE_TILES, sSelection.getStr()); } } @@ -705,7 +705,7 @@ void SdrMarkView::SetMarkHandles() if (bTiledRendering) { // Suppress handles -> empty graphic selection. - if(SfxViewShell* pViewShell = SfxViewShell::Current()) + if(SfxViewShell* pViewShell = GetSfxViewShell()) { pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_GRAPHIC_SELECTION, "EMPTY"); SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_GRAPHIC_VIEW_SELECTION, "selection", "EMPTY"); @@ -729,7 +729,7 @@ void SdrMarkView::SetMarkHandles() if (xController.is() && xController->hasSelectedCells()) { // The table shape has selected cells, which provide text selection already -> no graphic selection. - if(SfxViewShell* pViewShell = SfxViewShell::Current()) + if(SfxViewShell* pViewShell = GetSfxViewShell()) { pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_GRAPHIC_SELECTION, "EMPTY"); SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_GRAPHIC_VIEW_SELECTION, "selection", "EMPTY"); @@ -762,10 +762,10 @@ void SdrMarkView::SetMarkHandles() sSelection = aSelection.toString(); // hide the text selection too - if(SfxViewShell* pViewShell = SfxViewShell::Current()) + if(SfxViewShell* pViewShell = GetSfxViewShell()) pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION, ""); } - if(SfxViewShell* pViewShell = SfxViewShell::Current()) + if(SfxViewShell* pViewShell = GetSfxViewShell()) { pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_GRAPHIC_SELECTION, sSelection.getStr()); SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_GRAPHIC_VIEW_SELECTION, "selection", sSelection); @@ -1254,6 +1254,11 @@ void SdrMarkView::SetRef2(const Point& rPt) } } +SfxViewShell* SdrMarkView::GetSfxViewShell() const +{ + return SfxViewShell::Current(); +} + bool SdrPageView::IsObjSelectable(SdrObject *pObj) const { SdrLayerID nLay=pObj->GetLayer(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits