From e172ed06a5d5cc472d5045d17c741e8aca23e4c8 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 16 Oct 2015 11:24:11 +0200 Subject: [PATCH 214/398] sd tiled rendering: emit CALLBACK_TEXT_SELECTION on multiple search results (cherry picked from commit 186f32f63434e16ff5776251657f902d5808ed3d) Change-Id: Ib6be973bf7c911907c793571b84021dc317dcc80 --- sd/qa/unit/tiledrendering/data/search-all.odp | Bin 10938 -> 10974 bytes sd/qa/unit/tiledrendering/tiledrendering.cxx | 14 ++++++++++++++ sd/source/ui/view/Outliner.cxx | 17 +++++++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/sd/qa/unit/tiledrendering/data/search-all.odp b/sd/qa/unit/tiledrendering/data/search-all.odp index 0fd069ce6c0b4201c37a6678b6b1cd9875872c8f..46ddaf412bfa3248fd5a9459b0038dc72d9798a7 100644 GIT binary patch delta 5192 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 delta 5360 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 IvR@nj4;pGT1ONa4 diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx index e83873e06d5b..4df60ef40a41 100644 --- a/sd/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx @@ -53,6 +53,7 @@ public: void testResetSelection(); void testSearch(); void testSearchAll(); + void testSearchAllSelections(); #endif CPPUNIT_TEST_SUITE(SdTiledRenderingTest); @@ -66,6 +67,7 @@ public: CPPUNIT_TEST(testResetSelection); CPPUNIT_TEST(testSearch); CPPUNIT_TEST(testSearchAll); + CPPUNIT_TEST(testSearchAllSelections); #endif CPPUNIT_TEST_SUITE_END(); @@ -437,6 +439,18 @@ void SdTiledRenderingTest::testSearchAll() CPPUNIT_ASSERT_EQUAL(static_cast(1), m_nPart); } +void SdTiledRenderingTest::testSearchAllSelections() +{ + SdXImpressDocument* pXImpressDocument = createDoc("search-all.odp"); + pXImpressDocument->registerCallback(&SdTiledRenderingTest::callback, this); + + lcl_search("third", /*bFindAll=*/true); + // Make sure this is found on the 3rd slide. + CPPUNIT_ASSERT_EQUAL(static_cast(2), m_nPart); + // This was 1: only the first match was highlighted. + CPPUNIT_ASSERT_EQUAL(static_cast(2), m_aSelection.size()); +} + #endif CPPUNIT_TEST_SUITE_REGISTRATION(SdTiledRenderingTest); diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx index ff537b4da547..c626c80d0c0d 100644 --- a/sd/source/ui/view/Outliner.cxx +++ b/sd/source/ui/view/Outliner.cxx @@ -606,7 +606,8 @@ bool Outliner::SearchAndReplaceAll() return true; } - if (pViewShell->ISA(OutlineViewShell)) + std::vector aSelections; + if( 0 != dynamic_cast< const OutlineViewShell *>( pViewShell.get() )) { // Put the cursor to the beginning/end of the outliner. mpImpl->GetOutlinerView()->SetSelection (GetSearchStartPosition ()); @@ -628,7 +629,6 @@ bool Outliner::SearchAndReplaceAll() // Search/replace until the end of the document is reached. bool bFoundMatch; - std::vector aSelections; do { bFoundMatch = ! SearchAndReplaceOnce(&aSelections); @@ -674,6 +674,19 @@ bool Outliner::SearchAndReplaceAll() // Find-all, tiled rendering and we have at least one match. OString aPayload = OString::number(mnStartPageIndex); pViewShell->GetDoc()->libreOfficeKitCallback(LOK_CALLBACK_SET_PART, aPayload.getStr()); + + // Emit a selection callback here: + // 1) The original one is no longer valid, as we there was a SET_PART in between + // 2) The underlying editeng will only talk about the first match till + // it doesn't support multi-selection. + std::vector aRectangles; + for (const SearchSelection& rSelection : aSelections) + { + if (rSelection.m_nPage == mnStartPageIndex) + aRectangles.push_back(rSelection.m_aRectangles); + } + OString sRectangles = comphelper::string::join("; ", aRectangles); + pViewShell->GetDoc()->libreOfficeKitCallback(LOK_CALLBACK_TEXT_SELECTION, sRectangles.getStr()); } mnStartPageIndex = (sal_uInt16)-1; -- 2.12.0