From 2ce5938b38c5080e5ac7f200afa1446abe53db28 Mon Sep 17 00:00:00 2001 From: Marco Cecchetti Date: Thu, 9 Apr 2020 18:51:46 +0200 Subject: lok: calc: formula bar: improve selection handling This patch provides some improvements for the single input line case with a multi-line text selection: - selection rectangles are correct when selection is expanded to the previous or the next line - two flag parameters for notifying the client if the start/end selection handles should be visible or they don't Change-Id: Ica0428786183c4b5a15870c43490bc69452c2a49 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92121 Tested-by: Jenkins CollaboraOffice Reviewed-by: Andras Timar Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93344 Tested-by: Jenkins --- editeng/source/editeng/impedit.cxx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'editeng') diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index b5be152d6ece..e087305effd1 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -278,6 +278,10 @@ void ImpEditView::DrawSelectionXOR( EditSelection aTmpSel, vcl::Region* pRegion, const sal_Int32 nEndPara = pEditEngine->GetEditDoc().GetPos(pEndNode); if (nStartPara == EE_PARA_NOT_FOUND || nEndPara == EE_PARA_NOT_FOUND) return; + + bool bStartHandleVisible = false; + bool bEndHandleVisible = false; + for ( sal_Int32 nPara = nStartPara; nPara <= nEndPara; nPara++ ) { ParaPortion* pTmpPortion = pEditEngine->GetParaPortions().SafeGetObject( nPara ); @@ -341,6 +345,11 @@ void ImpEditView::DrawSelectionXOR( EditSelection aTmpSel, vcl::Region* pRegion, if ( aBottomRight.Y() < GetVisDocTop() ) continue; + if ( ( nPara == nStartPara ) && ( nLine == nStartLine ) ) + bStartHandleVisible = true; + if ( ( nPara == nEndPara ) && ( nLine == nEndLine ) ) + bEndHandleVisible = true; + // Now that we have Bidi, the first/last index doesn't have to be the 'most outside' position if ( !bPartOfLine ) { @@ -405,6 +414,8 @@ void ImpEditView::DrawSelectionXOR( EditSelection aTmpSel, vcl::Region* pRegion, const OUString rAction("text_selection"); std::vector aItems; aItems.emplace_back("rectangles", sRectangle); + aItems.emplace_back("startHandleVisible", OString::boolean(bStartHandleVisible)); + aItems.emplace_back("endHandleVisible", OString::boolean(bEndHandleVisible)); pNotifier->notifyWindow(pParent->GetLOKWindowId(), rAction, aItems); pPolyPoly.reset(); return; @@ -1384,6 +1395,11 @@ Pair ImpEditView::Scroll( long ndX, long ndY, ScrollRangeCheck nRangeCheck ) EENotify aNotify( EE_NOTIFY_TEXTVIEWSCROLLED ); pEditEngine->pImpEditEngine->GetNotifyHdl().Call( aNotify ); } + + if (comphelper::LibreOfficeKit::isActive()) + { + DrawSelectionXOR(); + } } return Pair( nRealDiffX, nRealDiffY ); -- cgit