diff options
author | Henry Castro <hcastro@collabora.com> | 2021-06-30 18:45:38 -0400 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2021-10-07 11:47:23 +0200 |
commit | de1e60f01f5806cc55088846aaaf3429aea754fb (patch) | |
tree | 3c836f0c6c944f8531f001faa5fd4c8d0b24ce1d /vcl | |
parent | bd212a4f26ae4532bf2be3d1d35a60b67ac15ef5 (diff) |
lok: sc: introduce LocalStartDrag method
Update the mouse mode to start drag,
otherwise it will conflict with normal cell selection.
Change-Id: I6d4939b704114e7de1c9c051459fd02100a7536c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118874
Tested-by: Szymon Kłos <szymon.klos@collabora.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/window.h | 1 | ||||
-rw-r--r-- | vcl/source/window/mouse.cxx | 5 | ||||
-rw-r--r-- | vcl/source/window/window.cxx | 1 | ||||
-rw-r--r-- | vcl/source/window/winproc.cxx | 26 |
4 files changed, 24 insertions, 9 deletions
diff --git a/vcl/inc/window.h b/vcl/inc/window.h index e6acaa78dbbf..0b6fc72ad46b 100644 --- a/vcl/inc/window.h +++ b/vcl/inc/window.h @@ -180,6 +180,7 @@ struct ImplFrameData css::uno::Reference< css::datatransfer::clipboard::XClipboard > mxSelection; bool mbInternalDragGestureRecognizer; + bool mbDragging; VclPtr<VirtualDevice> mpBuffer; ///< Buffer for the double-buffering bool mbInBufferedPaint; ///< PaintHelper is in the process of painting into this buffer. tools::Rectangle maBufferedRect; ///< Rectangle in the buffer that has to be painted to the screen. diff --git a/vcl/source/window/mouse.cxx b/vcl/source/window/mouse.cxx index 6517ad2d90c1..9e2cd5045392 100644 --- a/vcl/source/window/mouse.cxx +++ b/vcl/source/window/mouse.cxx @@ -443,6 +443,11 @@ void Window::SetMouseTransparent( bool bTransparent ) mpWindowImpl->mbMouseTransparent = bTransparent; } +void Window::LocalStartDrag() +{ + ImplGetFrameData()->mbDragging = true; +} + void Window::CaptureMouse() { ImplSVData* pSVData = ImplGetSVData(); diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index e2efee60dce8..da1b2005b255 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -811,6 +811,7 @@ ImplFrameData::ImplFrameData( vcl::Window *pWindow ) maResizeIdle.SetInvokeHandler( LINK( pWindow, vcl::Window, ImplHandleResizeTimerHdl ) ); maResizeIdle.SetDebugName( "vcl::Window maResizeIdle" ); mbInternalDragGestureRecognizer = false; + mbDragging = false; mbInBufferedPaint = false; mnDPIX = 96; mnDPIY = 96; diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx index 6c8645dcf30a..48e016c47cde 100644 --- a/vcl/source/window/winproc.cxx +++ b/vcl/source/window/winproc.cxx @@ -819,21 +819,27 @@ bool ImplLOKHandleMouseEvent(const VclPtr<vcl::Window>& xWindow, MouseNotifyEven pFrameData->mbMouseIn = false; vcl::Window* pDragWin = pFrameData->mpMouseDownWin; - if (pDragWin && pFrameData->mbStartDragCalled && - nSVEvent == MouseNotifyEvent::MOUSEMOVE) + if (pDragWin && + nSVEvent == MouseNotifyEvent::MOUSEMOVE && + pFrameData->mbDragging) { css::uno::Reference<css::datatransfer::dnd::XDropTargetDragContext> xDropTargetDragContext = new GenericDropTargetDragContext(); css::uno::Reference<css::datatransfer::dnd::XDropTarget> xDropTarget( pDragWin->ImplGetWindowImpl()->mxDNDListenerContainer, css::uno::UNO_QUERY); - if (!xDropTargetDragContext.is() || - !xDropTarget.is() || - (nCode & (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)) == + if ((nCode & (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)) != (MouseSettings::GetStartDragCode() & (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE))) { + pDragWin->ImplGetFrameData()->mbDragging = false; + return false; + } + + if (!xDropTargetDragContext.is() || + !xDropTarget.is()) + { // cancel dragdrop - pDragWin->ImplGetFrameData()->mbStartDragCalled = false; + pDragWin->ImplGetFrameData()->mbDragging = false; return false; } @@ -849,8 +855,9 @@ bool ImplLOKHandleMouseEvent(const VclPtr<vcl::Window>& xWindow, MouseNotifyEven return true; } - if (pDragWin && pFrameData->mbStartDragCalled && - nSVEvent == MouseNotifyEvent::MOUSEBUTTONUP) + if (pDragWin && + nSVEvent == MouseNotifyEvent::MOUSEBUTTONUP && + pFrameData->mbDragging) { css::uno::Reference<css::datatransfer::dnd::XDropTargetDropContext> xDropTargetDropContext = new GenericDropTargetDropContext(); @@ -870,7 +877,8 @@ bool ImplLOKHandleMouseEvent(const VclPtr<vcl::Window>& xWindow, MouseNotifyEven css::uno::Reference<css::datatransfer::XTransferable>()); } - pDragWin->ImplGetFrameData()->mbStartDragCalled = false; + pDragWin->ImplGetFrameData()->mbDragging = false; + return true; } vcl::Window* pDownWin = pFrameData->mpMouseDownWin; |