summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-07-19 14:35:56 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-07-21 10:43:27 +0200
commit541ab755005d37c31f3b93fdaba2d537a956b2d6 (patch)
treec81413410a6fc78f3480cce0372d661da5d1a57f
parent338b100cbf034e2aab0c8d1af5bbcba21a73407b (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)
-rw-r--r--sc/qa/unit/tiledrendering/tiledrendering.cxx51
-rw-r--r--sc/source/ui/unoobj/docuno.cxx2
-rw-r--r--sc/source/ui/view/gridwin.cxx2
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 )