summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-09-15 12:17:14 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-09-15 14:49:00 +0200
commite93b30c9d9f4deba597b73e04df7d4082b779b69 (patch)
tree993cb5e7e58430f4412f7aacd2311db5c90806f7 /sd
parent74844277cc2194c9e43f5bd7a6f78a9603da32f3 (diff)
sd draw text: emit LOK_CALLBACK_TEXT_VIEW_SELECTION from registerCallback()
This is basically the Impress equivalent of commit 2ea385a54b53797ab3960869012f3ce3268eab2c (sw draw text: emit LOK_CALLBACK_TEXT_VIEW_SELECTION from registerCallback(), 2016-09-13). Change-Id: Ib138845de6db2a8ad49dc8596af3e05ec5278610
Diffstat (limited to 'sd')
-rw-r--r--sd/qa/unit/tiledrendering/tiledrendering.cxx19
-rw-r--r--sd/source/ui/view/ViewShellBase.cxx17
2 files changed, 34 insertions, 2 deletions
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index 28e0ac8043a8..67455cfdb7c3 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -874,6 +874,7 @@ public:
bool m_bTilesInvalidated;
std::map<int, bool> m_aViewCursorInvalidations;
std::map<int, bool> m_aViewCursorVisibilities;
+ bool m_bViewSelectionSet;
ViewCallback()
: m_bGraphicSelectionInvalidated(false),
@@ -881,7 +882,8 @@ public:
m_nPart(0),
m_bCursorVisibleChanged(false),
m_bViewLock(false),
- m_bTilesInvalidated(false)
+ m_bTilesInvalidated(false),
+ m_bViewSelectionSet(false)
{
}
@@ -945,6 +947,11 @@ public:
m_aViewCursorVisibilities[nViewId] = OString("true") == pPayload;
}
break;
+ case LOK_CALLBACK_TEXT_VIEW_SELECTION:
+ {
+ m_bViewSelectionSet = true;
+ }
+ break;
}
}
};
@@ -1193,6 +1200,12 @@ void SdTiledRenderingTest::testCreateViewTextCursor()
SdrView* pSdrView = pViewShell->GetView();
CPPUNIT_ASSERT(pSdrView->IsTextEdit());
+ // Create an editeng text selection.
+ EditView& rEditView = pSdrView->GetTextEditOutlinerView()->GetEditView();
+ // 0th para, 0th char -> 0th para, 1st char.
+ ESelection aWordSelection(0, 0, 0, 1);
+ rEditView.SetSelection(aWordSelection);
+
// Make sure that creating a new view either doesn't affect the previous
// one, or at least the effect is not visible at the end.
aView1.m_aViewCursorInvalidations.clear();
@@ -1200,6 +1213,7 @@ void SdTiledRenderingTest::testCreateViewTextCursor()
SfxLokHelper::createView();
pXImpressDocument->initializeForTiledRendering({});
ViewCallback aView2;
+ aView2.m_bViewSelectionSet = false;
SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView2);
bool bFoundCursor = false;
for (const auto& rInvalidation : aView1.m_aViewCursorInvalidations)
@@ -1215,6 +1229,9 @@ void SdTiledRenderingTest::testCreateViewTextCursor()
// This failed: the second view created an unexpected view cursor in the
// first view.
CPPUNIT_ASSERT(!bFoundCursor);
+ // This failed: the text view selection of the first view wasn't seen by
+ // the second view.
+ CPPUNIT_ASSERT(aView2.m_bViewSelectionSet);
mxComponent->dispose();
mxComponent.clear();
diff --git a/sd/source/ui/view/ViewShellBase.cxx b/sd/source/ui/view/ViewShellBase.cxx
index d5fce1d471a4..8513599d920b 100644
--- a/sd/source/ui/view/ViewShellBase.cxx
+++ b/sd/source/ui/view/ViewShellBase.cxx
@@ -88,6 +88,7 @@
#include <tools/diagnose_ex.h>
#include <sfx2/lokhelper.hxx>
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
+#include <editeng/editview.hxx>
#include "fubullet.hxx"
#include "drawview.hxx"
@@ -1049,7 +1050,21 @@ void ViewShellBase::NotifyCursor(SfxViewShell* pOtherShell) const
if (!pDrawView)
return;
- pDrawView->AdjustMarkHdl(pOtherShell);
+ if (pDrawView->GetTextEditObject())
+ {
+ // Blinking cursor.
+ EditView& rEditView = pDrawView->GetTextEditOutlinerView()->GetEditView();
+ rEditView.RegisterOtherShell(pOtherShell);
+ rEditView.ShowCursor();
+ rEditView.RegisterOtherShell(nullptr);
+ // Text selection, if any.
+ rEditView.DrawSelection(pOtherShell);
+ }
+ else
+ {
+ // Graphic selection.
+ pDrawView->AdjustMarkHdl(pOtherShell);
+ }
}
//===== ViewShellBase::Implementation =========================================