summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2020-01-29 12:44:30 +0100
committerTomaž Vajngerl <quikee@gmail.com>2020-01-30 12:42:29 +0100
commit14e306efae35f01fa63237ce005ad4067ca16909 (patch)
treea4b541ce34dc97f7c71dc8779ebdfc1703828ff6 /sc
parent16e4049f480698c3e1308a3711238a89f91b5c13 (diff)
lok: preserve mouse event logic position and use in calc
When clicking in online Calc any of the charts, shapes (and other objects), sometimes the cell underneath is selected instead. The problem is that the object is not correctly recognised to be hit. From lok we get the mouse event position in logic coordinates, which we usually can just use in writer and impress. In calc however we need the coordinates in pixels, so we transform them before sending the mouse event to calc. Still calc also uses common SdrObjects (chart, shapes,...), which operate in logic coordinates. So in case of SdrObject we need to convert the coordniates back from pixel to logic again, which causes problems because conversion doesn't have access to the displaying conditions on an stateless online client. OTOH we already had the correct logic coordinates, and we can just send them along. This is what this change does. It adds an optional maLogicPosition to MouseEvent, which is filled with logic position if those is known. Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87681 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com> (cherry picked from commit 82196472291c4ccbcacb5c2513d1961ba9460cdf) Change-Id: I26f6466085baf613850b5861e368f22cad7c1d26 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87708 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/source/ui/drawfunc/fusel.cxx7
-rw-r--r--sc/source/ui/unoobj/docuno.cxx6
2 files changed, 9 insertions, 4 deletions
diff --git a/sc/source/ui/drawfunc/fusel.cxx b/sc/source/ui/drawfunc/fusel.cxx
index 2c450ea7a3d2..3c30cc026c6c 100644
--- a/sc/source/ui/drawfunc/fusel.cxx
+++ b/sc/source/ui/drawfunc/fusel.cxx
@@ -81,8 +81,11 @@ bool FuSelection::MouseButtonDown(const MouseEvent& rMEvt)
bIsInDragMode = false; // somewhere it has to be reset (#50033#)
bool bReturn = FuDraw::MouseButtonDown(rMEvt);
-
- aMDPos = pWindow->PixelToLogic( rMEvt.GetPosPixel() );
+ auto aLogicPosition = rMEvt.getLogicPosition();
+ if (aLogicPosition)
+ aMDPos = *aLogicPosition;
+ else
+ aMDPos = pWindow->PixelToLogic(rMEvt.GetPosPixel());
if ( rMEvt.IsLeft() )
{
diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx
index eb6957a0a5c1..abee12a7def1 100644
--- a/sc/source/ui/unoobj/docuno.cxx
+++ b/sc/source/ui/unoobj/docuno.cxx
@@ -677,9 +677,11 @@ void ScModelObj::postMouseEvent(int nType, int nX, int nY, int nCount, int nButt
// Calc operates in pixels...
const Point aPos(nX * pViewData->GetPPTX(), nY * pViewData->GetPPTY());
- SfxLokHelper::postMouseEventAsync(pGridWindow, nType, aPos, nCount,
- MouseEventModifiers::SIMPLECLICK,
+
+ LokMouseEventData aMouseEventData(nType, aPos, nCount, MouseEventModifiers::SIMPLECLICK,
nButtons, nModifier);
+ aMouseEventData.maLogicPosition = Point(convertTwipToMm100(nX), convertTwipToMm100(nY));
+ SfxLokHelper::postMouseEventAsync(pGridWindow, aMouseEventData);
}
void ScModelObj::setTextSelection(int nType, int nX, int nY)