summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-07-08 15:13:13 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-07-21 10:21:59 +0200
commit931af50553379d08c61457261cd9dcdda3ecb0ca (patch)
treeff911432f2e0590eb06c093c799bdae7e6ca6a48 /sw
parent2ca45663bf74e82fe508c2577613627741cf14f6 (diff)
sw lok: add LOK_CALLBACK_VIEW_CURSOR_VISIBLE
With this, in case a text cursor is turned into a graphic selection in view#0, then view#1 can also hide the text cursor of view#0. Change-Id: I7de89b8537ef8b0985336793b719d93733604bff Reviewed-on: https://gerrit.libreoffice.org/27044 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org> (cherry picked from commit af8419fa1d3cea57481e0e53518237eea2d9cdad)
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/extras/tiledrendering/tiledrendering.cxx43
-rw-r--r--sw/source/core/crsr/crsrsh.cxx9
2 files changed, 48 insertions, 4 deletions
diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx
index e43d0717ed58..6ab106ddfb72 100644
--- a/sw/qa/extras/tiledrendering/tiledrendering.cxx
+++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx
@@ -54,6 +54,7 @@ public:
void testPartHash();
void testViewCursors();
void testMissingInvalidation();
+ void testViewCursorVisibility();
CPPUNIT_TEST_SUITE(SwTiledRenderingTest);
CPPUNIT_TEST(testRegisterCallback);
@@ -74,6 +75,7 @@ public:
CPPUNIT_TEST(testPartHash);
CPPUNIT_TEST(testViewCursors);
CPPUNIT_TEST(testMissingInvalidation);
+ CPPUNIT_TEST(testViewCursorVisibility);
CPPUNIT_TEST_SUITE_END();
private:
@@ -554,13 +556,15 @@ public:
bool m_bOwnSelectionSet;
bool m_bViewSelectionSet;
bool m_bTilesInvalidated;
+ bool m_bViewCursorVisible;
ViewCallback()
: m_bOwnCursorInvalidated(false),
m_bViewCursorInvalidated(false),
m_bOwnSelectionSet(false),
m_bViewSelectionSet(false),
- m_bTilesInvalidated(false)
+ m_bTilesInvalidated(false),
+ m_bViewCursorVisible(false)
{
}
@@ -569,7 +573,7 @@ public:
static_cast<ViewCallback*>(pData)->callbackImpl(nType, pPayload);
}
- void callbackImpl(int nType, const char* /*pPayload*/)
+ void callbackImpl(int nType, const char* pPayload)
{
switch (nType)
{
@@ -598,6 +602,11 @@ public:
m_bViewSelectionSet = true;
}
break;
+ case LOK_CALLBACK_VIEW_CURSOR_VISIBLE:
+ {
+ m_bViewCursorVisible = OString("true") == pPayload;
+ }
+ break;
}
}
};
@@ -681,6 +690,36 @@ void SwTiledRenderingTest::testViewCursors()
comphelper::LibreOfficeKit::setActive(false);
}
+void SwTiledRenderingTest::testViewCursorVisibility()
+{
+ comphelper::LibreOfficeKit::setActive();
+
+ // Load a document that has a shape and create two views.
+ SwXTextDocument* pXTextDocument = createDoc("shape.fodt");
+ ViewCallback aView1;
+ SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView1);
+ SfxLokHelper::createView();
+ pXTextDocument->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>());
+ ViewCallback aView2;
+ SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView2);
+
+ // Click on the shape in the second view.
+ aView1.m_bViewCursorVisible = true;
+ SwWrtShell* pWrtShell = pXTextDocument->GetDocShell()->GetWrtShell();
+ SdrPage* pPage = pWrtShell->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+ SdrObject* pObject = pPage->GetObj(0);
+ Point aCenter = pObject->GetSnapRect().Center();
+ pXTextDocument->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONDOWN, aCenter.getX(), aCenter.getY(), 1);
+ pXTextDocument->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONUP, aCenter.getX(), aCenter.getY(), 1);
+ Scheduler::ProcessEventsToIdle();
+ // Make sure the "view/text" cursor of the first view gets a notification.
+ CPPUNIT_ASSERT(!aView1.m_bViewCursorVisible);
+ mxComponent->dispose();
+ mxComponent.clear();
+
+ comphelper::LibreOfficeKit::setActive(false);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SwTiledRenderingTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index 6b8755f47d82..4b2bb2398506 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -64,6 +64,7 @@
#include <IDocumentLayoutAccess.hxx>
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <comphelper/lok.hxx>
+#include <sfx2/lokhelper.hxx>
#include <comphelper/string.hxx>
#include <PostItMgr.hxx>
@@ -2146,7 +2147,9 @@ void SwCursorShell::ShowCursor()
if (comphelper::LibreOfficeKit::isActive())
{
- GetSfxViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_CURSOR_VISIBLE, OString::boolean(true).getStr());
+ OString aPayload = OString::boolean(m_bSVCursorVis);
+ GetSfxViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_CURSOR_VISIBLE, aPayload.getStr());
+ SfxLokHelper::notifyOtherViews(GetSfxViewShell(), LOK_CALLBACK_VIEW_CURSOR_VISIBLE, "visible", aPayload);
}
UpdateCursor();
@@ -2165,7 +2168,9 @@ void SwCursorShell::HideCursor()
if (comphelper::LibreOfficeKit::isActive())
{
- GetSfxViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_CURSOR_VISIBLE, OString::boolean(false).getStr());
+ OString aPayload = OString::boolean(m_bSVCursorVis);
+ GetSfxViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_CURSOR_VISIBLE, aPayload.getStr());
+ SfxLokHelper::notifyOtherViews(GetSfxViewShell(), LOK_CALLBACK_VIEW_CURSOR_VISIBLE, "visible", aPayload);
}
}
}