summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorHenry Castro <hcastro@collabora.com>2021-06-30 18:45:38 -0400
committerSzymon Kłos <szymon.klos@collabora.com>2021-10-07 11:47:23 +0200
commitde1e60f01f5806cc55088846aaaf3429aea754fb (patch)
tree3c836f0c6c944f8531f001faa5fd4c8d0b24ce1d /vcl
parentbd212a4f26ae4532bf2be3d1d35a60b67ac15ef5 (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.h1
-rw-r--r--vcl/source/window/mouse.cxx5
-rw-r--r--vcl/source/window/window.cxx1
-rw-r--r--vcl/source/window/winproc.cxx26
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;