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

Jim Raykowski raykowj at gmail.com
Fri Jun 1 02:05:26 UTC 2018


 sw/source/core/crsr/crstrvl.cxx |   62 +++++++++++++++++++++++++++-------------
 1 file changed, 43 insertions(+), 19 deletions(-)

New commits:
commit cdc6075e41a9f920b47dbf2c48fbb0c3632a0c8a
Author: Jim Raykowski <raykowj at gmail.com>
Date:   Sat May 26 11:52:57 2018 -0800

    tdf#115600 Display messages in Findbar for Index entry navigation
    
    ...and make Index entry navigation wrap
    
    Change-Id: Ia579b65f85ee1cbf0c4f88f4ff599a5193aea1e3
    Reviewed-on: https://gerrit.libreoffice.org/54891
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
index c12c9900cfed..fe4c0f8e8ed1 100644
--- a/sw/source/core/crsr/crstrvl.cxx
+++ b/sw/source/core/crsr/crstrvl.cxx
@@ -493,6 +493,8 @@ bool SwCursorShell::GotoNxtPrvTableFormula( bool bNext, bool bOnlyErrors )
 /// jump to next/previous index marker
 bool SwCursorShell::GotoNxtPrvTOXMark( bool bNext )
 {
+    SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::Empty );
+
     if( IsTableMode() )
         return false;
 
@@ -515,30 +517,52 @@ bool SwCursorShell::GotoNxtPrvTOXMark( bool bNext )
         const SwTextTOXMark* pTextTOX;
         sal_uInt32 n, nMaxItems = GetDoc()->GetAttrPool().GetItemCount2( RES_TXTATR_TOXMARK );
 
-        for( n = 0; n < nMaxItems; ++n )
+        if( nMaxItems > 0 )
         {
-            const SfxPoolItem* pItem;
-            const SwContentFrame* pCFrame;
-
-            if( nullptr != (pItem = GetDoc()->GetAttrPool().GetItem2(
-                                        RES_TXTATR_TOXMARK, n ) ) &&
-                nullptr != (pTextTOX = static_cast<const SwTOXMark*>(pItem)->GetTextTOXMark() ) &&
-                ( pTextNd = &pTextTOX->GetTextNode())->GetNodes().IsDocNodes() &&
-                nullptr != ( pCFrame = pTextNd->getLayoutFrame( GetLayout(), &aPt, nullptr, false )) &&
-                ( IsReadOnlyAvailable() || !pCFrame->IsProtected() ))
-            {
-                SwNodeIndex aNdIndex( *pTextNd ); // UNIX needs this object
-                SetGetExpField aCmp( aNdIndex, *pTextTOX );
-                aCmp.SetBodyPos( *pCFrame );
+            do {
+                for( n = 0; n < nMaxItems; ++n )
+                {
+                    const SfxPoolItem* pItem;
+                    const SwContentFrame* pCFrame;
+
+                    if( nullptr != (pItem = GetDoc()->GetAttrPool().GetItem2(
+                                                RES_TXTATR_TOXMARK, n ) ) &&
+                        nullptr != (pTextTOX = static_cast<const SwTOXMark*>(pItem)->GetTextTOXMark() ) &&
+                        ( pTextNd = &pTextTOX->GetTextNode())->GetNodes().IsDocNodes() &&
+                        nullptr != ( pCFrame = pTextNd->getLayoutFrame( GetLayout(), &aPt, nullptr, false )) &&
+                        ( IsReadOnlyAvailable() || !pCFrame->IsProtected() ))
+                    {
+                        SwNodeIndex aNdIndex( *pTextNd ); // UNIX needs this object
+                        SetGetExpField aCmp( aNdIndex, *pTextTOX );
+                        aCmp.SetBodyPos( *pCFrame );
 
-                if( bNext ? ( aCurGEF < aCmp && aCmp < aFndGEF )
-                          : ( aCmp < aCurGEF && aFndGEF < aCmp ))
+                        if( bNext ? ( aCurGEF < aCmp && aCmp < aFndGEF )
+                                  : ( aCmp < aCurGEF && aFndGEF < aCmp ))
+                        {
+                            aFndGEF = aCmp;
+                            bFnd = true;
+                        }
+                    }
+                }
+                if( !bFnd )
                 {
-                    aFndGEF = aCmp;
-                    bFnd = true;
+                    if ( bNext )
+                    {
+                        rPos.nNode = 0;
+                        rPos.nContent = 0;
+                        aCurGEF = SetGetExpField( rPos );
+                        SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::EndWrapped );
+                    }
+                    else
+                    {
+                        aCurGEF = SetGetExpField( SwPosition( GetDoc()->GetNodes().GetEndOfContent() ) );
+                        SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::StartWrapped );
+                    }
                 }
-            }
+            } while ( !bFnd );
         }
+        else
+            SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::NavElementNotFound );
     }
 
     if( bFnd )


More information about the Libreoffice-commits mailing list