summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorHenry Castro <hcastro@collabora.com>2023-04-27 17:05:09 -0400
committerHenry Castro <hcastro@collabora.com>2023-05-02 21:04:44 +0200
commitcdf604f95c132f0f88ce31b002d47d1abd731d50 (patch)
tree5a3a5c2245d1136c8612319da76fab1545a03d47 /sc
parent148a3603cf15af45840888139690356e18555b08 (diff)
lok: sc: fix layout RTL mouse selection
If the Calc is in layout RTL, the edit view mouse selection does not change. Signed-off-by: Henry Castro <hcastro@collabora.com> Change-Id: I0bd2640dac3cdc96fa247c305c379b2d1a8564ee Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150757
Diffstat (limited to 'sc')
-rw-r--r--sc/source/ui/view/gridwin.cxx74
1 files changed, 71 insertions, 3 deletions
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 47370ee4f4a4..266790951ded 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -48,6 +48,7 @@
#include <vcl/weldutils.hxx>
#include <sot/formats.hxx>
#include <comphelper/classids.hxx>
+#include <comphelper/scopeguard.hxx>
#include <svx/drawitem.hxx>
#include <svx/svdview.hxx>
@@ -345,6 +346,18 @@ static bool lcl_GetHyperlinkCell(
return bFound;
}
+static void lcl_GetMirror(Point& rPoint, tools::Rectangle& rRect, const tools::Long nWidth)
+{
+ tools::Long nLeft = rRect.Left();
+ tools::Long nRight = rRect.Right();
+ tools::Long nMirrorPX = o3tl::convert(nWidth, o3tl::Length::twip, o3tl::Length::px);
+ tools::Long nMirrorMM = o3tl::convert(nWidth, o3tl::Length::twip, o3tl::Length::mm100);
+
+ rPoint.setX(nMirrorPX - rPoint.X());
+ rRect.SetLeft(nMirrorMM - nRight);
+ rRect.SetRight(nMirrorMM - nLeft);
+}
+
// WB_DIALOGCONTROL needed for UNO-Controls
ScGridWindow::ScGridWindow( vcl::Window* pParent, ScViewData& rData, ScSplitPos eWhichPos )
: DocWindow( pParent, WB_CLIPCHILDREN | WB_DIALOGCONTROL ),
@@ -1878,7 +1891,25 @@ void ScGridWindow::HandleMouseButtonDown( const MouseEvent& rMEvt, MouseEventSta
pScMod->SetInputMode( SC_INPUT_TABLE );
bEEMouse = true;
- pEditView->MouseButtonDown( rMEvt );
+
+ if (comphelper::LibreOfficeKit::isActive() && rDoc.IsLayoutRTL(mrViewData.GetTabNo()))
+ {
+ Point aMouse = rMEvt.GetPosPixel();
+ tools::Rectangle aOutputArea = pEditView->GetOutputArea();
+ comphelper::ScopeGuard aOutputGuard(
+ [pEditView, aOutputArea] {
+ pEditView->SetOutputArea(aOutputArea);
+ });
+
+ lcl_GetMirror(aMouse, aOutputArea, mrViewData.getLOKVisibleArea().GetWidth());
+ pEditView->SetOutputArea(aOutputArea);
+
+ MouseEvent aEvent(aMouse, rMEvt.GetClicks(), rMEvt.GetMode(),
+ rMEvt.GetButtons(), rMEvt.GetModifier());
+ pEditView->MouseButtonDown( aEvent );
+ }
+ else
+ pEditView->MouseButtonDown( rMEvt );
return;
}
}
@@ -2139,7 +2170,25 @@ void ScGridWindow::MouseButtonUp( const MouseEvent& rMEvt )
SCCOL nEditCol;
SCROW nEditRow;
mrViewData.GetEditView( eWhich, pEditView, nEditCol, nEditRow );
- pEditView->MouseButtonUp( rMEvt );
+
+ if (comphelper::LibreOfficeKit::isActive() && rDoc.IsLayoutRTL(mrViewData.GetTabNo()))
+ {
+ Point aMouse = rMEvt.GetPosPixel();
+ tools::Rectangle aOutputArea = pEditView->GetOutputArea();
+ comphelper::ScopeGuard aOutputGuard(
+ [pEditView, aOutputArea] {
+ pEditView->SetOutputArea(aOutputArea);
+ });
+
+ lcl_GetMirror(aMouse, aOutputArea, mrViewData.getLOKVisibleArea().GetWidth());
+ pEditView->SetOutputArea(aOutputArea);
+
+ MouseEvent aEvent(aMouse, rMEvt.GetClicks(), rMEvt.GetMode(),
+ rMEvt.GetButtons(), rMEvt.GetModifier());
+ pEditView->MouseButtonUp( aEvent );
+ }
+ else
+ pEditView->MouseButtonUp( rMEvt );
if ( rMEvt.IsMiddle() &&
GetSettings().GetMouseSettings().GetMiddleButtonAction() == MouseMiddleButtonAction::PasteSelection )
@@ -2632,7 +2681,26 @@ void ScGridWindow::MouseMove( const MouseEvent& rMEvt )
SCCOL nEditCol;
SCROW nEditRow;
mrViewData.GetEditView( eWhich, pEditView, nEditCol, nEditRow );
- pEditView->MouseMove( rMEvt );
+
+ if (comphelper::LibreOfficeKit::isActive() && mrViewData.GetDocument().IsLayoutRTL(mrViewData.GetTabNo()))
+ {
+ Point aMouse = rMEvt.GetPosPixel();
+ tools::Rectangle aOutputArea = pEditView->GetOutputArea();
+ comphelper::ScopeGuard aOutputGuard(
+ [pEditView, aOutputArea] {
+ pEditView->SetOutputArea(aOutputArea);
+ });
+
+ lcl_GetMirror(aMouse, aOutputArea, mrViewData.getLOKVisibleArea().GetWidth());
+ pEditView->SetOutputArea(aOutputArea);
+
+ MouseEvent aEvent(aMouse, rMEvt.GetClicks(), rMEvt.GetMode(),
+ rMEvt.GetButtons(), rMEvt.GetModifier());
+
+ pEditView->MouseMove( aEvent );
+ }
+ else
+ pEditView->MouseMove( rMEvt );
return;
}