From af379e99eb83fab544565d34f11f38241d0d4e8d Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 13 Mar 2015 17:23:02 +0100 Subject: [PATCH] ImpEditView::DrawSelection: emit TEXT_SELECTION LOK callback With this, if one double-clicks on a word in an editeng text, we emit the correct selection rectangle list callback. No start/end rectangles yet, though. Change-Id: Ie05f6f4a44dc638076527f21a4b6a44e9bf63ecb --- editeng/source/editeng/impedit.cxx | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index 0c54e5e23ad6..ed456a19cccd 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -179,6 +179,14 @@ void ImpEditView::DrawSelection( EditSelection aTmpSel, vcl::Region* pRegion, Ou // but someone switches the update mode! // pRegion: When not NULL, then only calculate Region. + + vcl::Region aRegion; + if (isTiledRendering()) + { + assert(!pRegion); + pRegion = &aRegion; + } + tools::PolyPolygon* pPolyPoly = NULL; if ( pRegion ) pPolyPoly = new tools::PolyPolygon; @@ -313,6 +321,24 @@ void ImpEditView::DrawSelection( EditSelection aTmpSel, vcl::Region* pRegion, Ou if ( pRegion ) { *pRegion = vcl::Region( *pPolyPoly ); + + if (isTiledRendering()) + { + std::vector aRectangles; + pRegion->GetRegionRectangles(aRectangles); + std::stringstream ss; + + for (size_t i = 0; i < aRectangles.size(); ++i) + { + const Rectangle& rRectangle = aRectangles[i]; + if (i) + ss << "; "; + ss << rRectangle.toString().getStr(); + } + OString sRectangle = ss.str().c_str(); + libreOfficeKitCallback(LOK_CALLBACK_TEXT_SELECTION, sRectangle.getStr()); + } + delete pPolyPoly; } else