tdf#129004 Make shift+F6 cycle order reverse of F6

Change-Id: I52013b4c54ef5e457d9fa19210d08d9c042fed45
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/83637
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj@gmail.com>
(cherry picked from commit 32b9d07baa0cf6907f14ccb9aa068b51d95eefaa)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86342
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
diff --git a/vcl/source/window/taskpanelist.cxx b/vcl/source/window/taskpanelist.cxx
index 1f382b8..35828b7 100644
--- a/vcl/source/window/taskpanelist.cxx
+++ b/vcl/source/window/taskpanelist.cxx
@@ -61,19 +61,6 @@
            return ( pos1.X() < pos2.X() );
    }
};
struct LTRSortBackward
{
    bool operator()( const vcl::Window* w2, const vcl::Window* w1 ) const
    {
        Point pos1(ImplTaskPaneListGetPos( w1 ));
        Point pos2(ImplTaskPaneListGetPos( w2 ));

        if( pos1.X() == pos2.X() )
            return ( pos1.Y() < pos2.Y() );
        else
            return ( pos1.X() < pos2.X() );
    }
};

static void ImplTaskPaneListGrabFocus( vcl::Window *pWindow, bool bForward )
{
@@ -258,10 +245,10 @@
// returns first valid item (regardless of type) if pWindow==0, otherwise returns next valid float
vcl::Window* TaskPaneList::FindNextFloat( vcl::Window *pWindow, bool bForward )
{
    if( bForward )
        ::std::stable_sort( mTaskPanes.begin(), mTaskPanes.end(), LTRSort() );
    else
        ::std::stable_sort( mTaskPanes.begin(), mTaskPanes.end(), LTRSortBackward() );
    ::std::stable_sort( mTaskPanes.begin(), mTaskPanes.end(), LTRSort() );

    if ( !bForward )
        ::std::reverse( mTaskPanes.begin(), mTaskPanes.end() );

    auto p = mTaskPanes.begin();
    if( pWindow )
@@ -285,6 +272,9 @@
            ++p;
    }

    if ( !bForward )
        ::std::reverse( mTaskPanes.begin(), mTaskPanes.end() );

    return pWindow;
}