[Libreoffice-commits] core.git: sw/qa sw/source

Miklos Vajna vmiklos at collabora.co.uk
Wed Jun 3 00:20:50 PDT 2015


 sw/qa/extras/tiledrendering/tiledrendering.cxx |   32 +++++++++++++++++++++++++
 sw/source/uibase/uiview/viewsrch.cxx           |   15 ++++++++++-
 2 files changed, 45 insertions(+), 2 deletions(-)

New commits:
commit 8d2fe8d7e5f374f3a106a4fc58ef597a52815ad0
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Jun 3 09:03:48 2015 +0200

    SwView::SearchAndWrap: fix WrapAround search in fly frames
    
    First, SttDoc() / EndDoc() is the implementation of Ctrl-Home, i.e. it
    goes to the start of the current text (like a fly frame), not to the
    start of the whole document. When wrapping around, we want the later.
    
    Second, if the normal search have two passes, first searching in the
    body text, then searching in the special sections, then the wrap-around
    search should do the same.
    
    Change-Id: I0b7466c80476f6fb45174be19215a5d68374d047

diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx
index ba8237e..b139b16 100644
--- a/sw/qa/extras/tiledrendering/tiledrendering.cxx
+++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx
@@ -26,6 +26,7 @@ static const char* DATA_DIRECTORY = "/sw/qa/extras/tiledrendering/data/";
 class SwTiledRenderingTest : public SwModelTestBase
 {
 public:
+    SwTiledRenderingTest();
     void testRegisterCallback();
     void testPostKeyEvent();
     void testPostMouseEvent();
@@ -35,6 +36,7 @@ public:
     void testSearch();
     void testSearchViewArea();
     void testSearchTextFrame();
+    void testSearchTextFrameWrapAround();
     void testDocumentSizeChanged();
 
     CPPUNIT_TEST_SUITE(SwTiledRenderingTest);
@@ -47,6 +49,7 @@ public:
     CPPUNIT_TEST(testSearch);
     CPPUNIT_TEST(testSearchViewArea);
     CPPUNIT_TEST(testSearchTextFrame);
+    CPPUNIT_TEST(testSearchTextFrameWrapAround);
     CPPUNIT_TEST(testDocumentSizeChanged);
     CPPUNIT_TEST_SUITE_END();
 
@@ -57,8 +60,14 @@ private:
     Rectangle m_aInvalidation;
     Size m_aDocumentSize;
     OString m_aTextSelection;
+    bool m_bFound;
 };
 
+SwTiledRenderingTest::SwTiledRenderingTest()
+    : m_bFound(true)
+{
+}
+
 SwXTextDocument* SwTiledRenderingTest::createDoc(const char* pName)
 {
     load(DATA_DIRECTORY, pName);
@@ -106,6 +115,11 @@ void SwTiledRenderingTest::callbackImpl(int nType, const char* pPayload)
         m_aTextSelection = pPayload;
     }
     break;
+    case LOK_CALLBACK_SEARCH_NOT_FOUND:
+    {
+        m_bFound = false;
+    }
+    break;
     }
 }
 
@@ -342,6 +356,24 @@ void SwTiledRenderingTest::testSearchTextFrame()
 #endif
 }
 
+void SwTiledRenderingTest::testSearchTextFrameWrapAround()
+{
+#if !defined(WNT) && !defined(MACOSX)
+    SwXTextDocument* pXTextDocument = createDoc("search.odt");
+    pXTextDocument->registerCallback(&SwTiledRenderingTest::callback, this);
+    uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence(
+    {
+        {"SearchItem.SearchString", uno::makeAny(OUString("TextFrame"))},
+        {"SearchItem.Backward", uno::makeAny(false)},
+    }));
+    comphelper::dispatchCommand(".uno:ExecuteSearch", aPropertyValues);
+    CPPUNIT_ASSERT(m_bFound);
+    comphelper::dispatchCommand(".uno:ExecuteSearch", aPropertyValues);
+    // This failed, i.e. the second time 'not found' was reported, instead of wrapping around.
+    CPPUNIT_ASSERT(m_bFound);
+#endif
+}
+
 void SwTiledRenderingTest::testDocumentSizeChanged()
 {
 #if !defined(WNT) && !defined(MACOSX)
diff --git a/sw/source/uibase/uiview/viewsrch.cxx b/sw/source/uibase/uiview/viewsrch.cxx
index a4951ef..28fc2c9 100644
--- a/sw/source/uibase/uiview/viewsrch.cxx
+++ b/sw/source/uibase/uiview/viewsrch.cxx
@@ -554,13 +554,24 @@ bool SwView::SearchAndWrap(bool bApi)
     if (bHasSrchInOther)
     {
         m_pWrtShell->ClearMark();
+        // Select the start or the end of the entire document
         if (bSrchBkwrd)
-            m_pWrtShell->EndDoc();
+            m_pWrtShell->SttEndDoc(false);
         else
-            m_pWrtShell->SttDoc();
+            m_pWrtShell->SttEndDoc(true);
     }
 
     m_bFound = bool(FUNC_Search( aOpts ));
+
+    // If WrapAround found no matches in the body text, search in the special
+    // sections, too.
+    if (!m_bFound && !m_pSrchItem->GetSelection() && !m_bExtra)
+    {
+        m_bExtra = true;
+        if (FUNC_Search(aOpts))
+            m_bFound = true;
+    }
+
     m_pWrtShell->EndAllAction();
     pWait.reset();
 #if HAVE_FEATURE_DESKTOP


More information about the Libreoffice-commits mailing list