diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-07-19 14:35:56 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-07-21 10:43:27 +0200 |
commit | 541ab755005d37c31f3b93fdaba2d537a956b2d6 (patch) | |
tree | c81413410a6fc78f3480cce0372d661da5d1a57f /sc | |
parent | 338b100cbf034e2aab0c8d1af5bbcba21a73407b (diff) |
sc lok: notify other views about selection changes of multiple cells
A single cell is handled by the cell cursor, which was already handled.
This one takes care of the situation when multiple cells are selected.
Change-Id: I11b3045e4884ad9629655e2c05c16af83d21e7b2
Reviewed-on: https://gerrit.libreoffice.org/27318
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
(cherry picked from commit 495cfa27c173741caa233575438c18746272b4aa)
Diffstat (limited to 'sc')
-rw-r--r-- | sc/qa/unit/tiledrendering/tiledrendering.cxx | 51 | ||||
-rw-r--r-- | sc/source/ui/unoobj/docuno.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin.cxx | 2 |
3 files changed, 54 insertions, 1 deletions
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx index f82afb9080ea..5857dabb726b 100644 --- a/sc/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx @@ -14,6 +14,7 @@ #include <LibreOfficeKit/LibreOfficeKitEnums.h> #include <com/sun/star/frame/Desktop.hpp> +#include <com/sun/star/frame/DispatchHelper.hpp> #include <comphelper/dispatchcommand.hxx> #include <comphelper/processfactory.hxx> #include <comphelper/propertysequence.hxx> @@ -53,6 +54,7 @@ public: void testPartHash(); void testDocumentSize(); void testViewCursors(); + void testTextViewSelection(); CPPUNIT_TEST_SUITE(ScTiledRenderingTest); CPPUNIT_TEST(testRowColumnSelections); @@ -60,6 +62,7 @@ public: CPPUNIT_TEST(testPartHash); CPPUNIT_TEST(testDocumentSize); CPPUNIT_TEST(testViewCursors); + CPPUNIT_TEST(testTextViewSelection); CPPUNIT_TEST_SUITE_END(); private: @@ -335,10 +338,12 @@ class ViewCallback public: bool m_bOwnCursorInvalidated; bool m_bViewCursorInvalidated; + bool m_bTextViewSelectionInvalidated; ViewCallback() : m_bOwnCursorInvalidated(false), - m_bViewCursorInvalidated(false) + m_bViewCursorInvalidated(false), + m_bTextViewSelectionInvalidated(false) { } @@ -361,6 +366,11 @@ public: m_bViewCursorInvalidated = true; } break; + case LOK_CALLBACK_TEXT_VIEW_SELECTION: + { + m_bTextViewSelectionInvalidated = true; + } + break; } } }; @@ -387,6 +397,45 @@ void ScTiledRenderingTest::testViewCursors() comphelper::LibreOfficeKit::setActive(false); } +void lcl_dispatchCommand(const uno::Reference<lang::XComponent>& xComponent, const OUString& rCommand) +{ + uno::Reference<frame::XController> xController = uno::Reference<frame::XModel>(xComponent, uno::UNO_QUERY)->getCurrentController(); + CPPUNIT_ASSERT(xController.is()); + uno::Reference<frame::XDispatchProvider> xFrame(xController->getFrame(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xFrame.is()); + + uno::Reference<uno::XComponentContext> xContext = ::comphelper::getProcessComponentContext(); + uno::Reference<frame::XDispatchHelper> xDispatchHelper(frame::DispatchHelper::create(xContext)); + CPPUNIT_ASSERT(xDispatchHelper.is()); + + xDispatchHelper->executeDispatch(xFrame, rCommand, OUString(), 0, {}); +} + +void ScTiledRenderingTest::testTextViewSelection() +{ + comphelper::LibreOfficeKit::setActive(); + + // Create two views, and leave the second one current. + ScModelObj* pModelObj = createDoc("select-row-cols.ods"); + ViewCallback aView1; + SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView1); + SfxLokHelper::createView(); + ViewCallback aView2; + pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); + SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView2); + + // Create a selection on two cells in the second view, that's a text selection in LOK terms. + aView1.m_bTextViewSelectionInvalidated = false; + lcl_dispatchCommand(mxComponent, ".uno:GoRightSel"); + Scheduler::ProcessEventsToIdle(); + // Make sure the first view got its notification. + CPPUNIT_ASSERT(aView1.m_bTextViewSelectionInvalidated); + + mxComponent->dispose(); + mxComponent.clear(); + comphelper::LibreOfficeKit::setActive(false); +} + } CPPUNIT_TEST_SUITE_REGISTRATION(ScTiledRenderingTest); diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index 47c21c6ee514..06f277462772 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -70,6 +70,7 @@ #if HAVE_FEATURE_OPENCL #include <opencl/platforminfo.hxx> #endif +#include <sfx2/lokhelper.hxx> #include "cellsuno.hxx" #include <columnspanset.hxx> @@ -860,6 +861,7 @@ void ScModelObj::resetSelection() // and hide the cell and text selection pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION, ""); + SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_TEXT_VIEW_SELECTION, "selection", ""); } void ScModelObj::setClipboard(const uno::Reference<datatransfer::clipboard::XClipboard>& xClipboard) diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 4e6d9c638a4a..18dbaad66e78 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -6017,6 +6017,7 @@ static void updateLibreOfficeKitSelection(ScViewData* pViewData, const std::vect pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION_START, aStart.toString().getStr()); pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION_END, aEnd.toString().getStr()); pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION, aSelection.getStr()); + SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_TEXT_VIEW_SELECTION, "selection", aSelection.getStr()); } void ScGridWindow::UpdateCursorOverlay() @@ -6263,6 +6264,7 @@ void ScGridWindow::UpdateSelectionOverlay() { ScTabViewShell* pViewShell = pViewData->GetViewShell(); pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_TEXT_SELECTION, "EMPTY"); + SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_TEXT_VIEW_SELECTION, "selection", "EMPTY"); } if ( aOldMode != aDrawMode ) |