tdf#124146 Support panning (pan gesture) of the combobox list

Change-Id: Ic57f4b784d96e69c71caa0e47dbe8117b019a712
Reviewed-on: https://gerrit.libreoffice.org/69656
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
diff --git a/vcl/inc/window.h b/vcl/inc/window.h
index bee0f55..74882ef 100644
--- a/vcl/inc/window.h
+++ b/vcl/inc/window.h
@@ -162,6 +162,7 @@ struct ImplFrameData
    bool                mbInSysObjFocusHdl;     //< within a SysChildren's GetFocus handler
    bool                mbInSysObjToTopHdl;     //< within a SysChildren's ToTop handler
    bool                mbSysObjFocus;          //< does a SysChild have focus
    sal_Int32           mnTouchPanPosition;

    css::uno::Reference< css::datatransfer::dnd::XDragSource > mxDragSource;
    css::uno::Reference< css::datatransfer::dnd::XDropTarget > mxDropTarget;
diff --git a/vcl/source/control/imp_listbox.cxx b/vcl/source/control/imp_listbox.cxx
index a5711ab..5e72bcf 100644
--- a/vcl/source/control/imp_listbox.cxx
+++ b/vcl/source/control/imp_listbox.cxx
@@ -2506,6 +2506,10 @@ bool ImplListBox::EventNotify( NotifyEvent& rNEvt )
                bDone = HandleScrollCommand( rCEvt, mpHScrollBar, mpVScrollBar );
            }
        }
        else if (rCEvt.GetCommand() == CommandEventId::Gesture)
        {
            bDone = HandleScrollCommand(rCEvt, mpHScrollBar, mpVScrollBar);
        }
    }

    return bDone || Window::EventNotify( rNEvt );
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index c9ea334..cdd2aad 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -807,6 +807,7 @@ ImplFrameData::ImplFrameData( vcl::Window *pWindow )
    mbInBufferedPaint = false;
    mnDPIX = 96;
    mnDPIY = 96;
    mnTouchPanPosition = -1;
}

namespace vcl {
diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx
index dfcec76..c352b00 100644
--- a/vcl/source/window/window2.cxx
+++ b/vcl/source/window/window2.cxx
@@ -750,6 +750,26 @@ bool Window::HandleScrollCommand( const CommandEvent& rCmd,
            }
            break;

            case CommandEventId::Gesture:
            {
                const CommandGestureData* pData = rCmd.GetGestureData();
                if (pData->meEventType == GestureEventType::PanningBegin)
                {
                    mpWindowImpl->mpFrameData->mnTouchPanPosition = pVScrl->GetThumbPos();
                }
                else if(pData->meEventType == GestureEventType::PanningUpdate)
                {
                    long nOriginalPosition = mpWindowImpl->mpFrameData->mnTouchPanPosition;
                    pVScrl->DoScroll(nOriginalPosition + (pData->mfOffset));
                }
                if (pData->meEventType == GestureEventType::PanningEnd)
                {
                    mpWindowImpl->mpFrameData->mnTouchPanPosition = -1;
                }
                bRet = true;
            }
            break;

            case CommandEventId::AutoScroll:
            {
                const CommandScrollData* pData = rCmd.GetAutoScrollData();