tdf#132435 only place menu vertically if up/down requested

don't fallback to left/right if it doesn't fit, just scroll the
menu instead

Change-Id: I20b261fd7fee78555bf87b25dfeed33c23602493
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94065
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/vcl/source/window/floatwin.cxx b/vcl/source/window/floatwin.cxx
index 749ceac..a9a3e71 100644
--- a/vcl/source/window/floatwin.cxx
+++ b/vcl/source/window/floatwin.cxx
@@ -265,6 +265,7 @@ Point FloatingWindow::ImplCalcPos(vcl::Window* pWindow,
            Application::GetBestScreen( bRTL ? devRectRTL : devRect ) );

    FloatWinPopupFlags nArrangeAry[5];
    sal_uInt16 nArrangeAttempts = 5;
    Point             e1,e2;  // the common edge between the item rect and the floating window

    if ( nFlags & FloatWinPopupFlags::Left )
@@ -287,23 +288,21 @@ Point FloatingWindow::ImplCalcPos(vcl::Window* pWindow,
    {
        nArrangeAry[0]  = FloatWinPopupFlags::Up;
        nArrangeAry[1]  = FloatWinPopupFlags::Down;
        nArrangeAry[2]  = FloatWinPopupFlags::Right;
        nArrangeAry[3]  = FloatWinPopupFlags::Left;
        nArrangeAry[4]  = FloatWinPopupFlags::Up;
        nArrangeAry[2]  = FloatWinPopupFlags::Up;
        nArrangeAttempts = 3;
    }
    else
    {
        nArrangeAry[0]  = FloatWinPopupFlags::Down;
        nArrangeAry[1]  = FloatWinPopupFlags::Up;
        nArrangeAry[2]  = FloatWinPopupFlags::Right;
        nArrangeAry[3]  = FloatWinPopupFlags::Left;
        nArrangeAry[4]  = FloatWinPopupFlags::Down;
        nArrangeAry[2]  = FloatWinPopupFlags::Down;
        nArrangeAttempts = 3;
    }

    sal_uInt16 nArrangeIndex = 0;
    const bool bLOKActive = comphelper::LibreOfficeKit::isActive();

    for ( ; nArrangeIndex < 5; nArrangeIndex++ )
    for ( ; nArrangeIndex < nArrangeAttempts; nArrangeIndex++ )
    {
        bool bBreak = true;
        switch ( nArrangeAry[nArrangeIndex] )
@@ -428,8 +427,8 @@ Point FloatingWindow::ImplCalcPos(vcl::Window* pWindow,
        if ( bBreak )
            break;
    }
    if ( nArrangeIndex > 4 )
        nArrangeIndex = 4;
    if (nArrangeIndex >= nArrangeAttempts)
        nArrangeIndex = nArrangeAttempts - 1;

    rArrangeIndex = nArrangeIndex;