sc/source/ui/view/gridwin.cxx  |    2 ++
 sc/source/ui/view/viewdata.cxx |   26 ++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)

New commits:
commit 99bd13feb386587262c40d6c474d4fa817da31bd
Author:     Marco Cecchetti <marco.cecche...@collabora.com>
AuthorDate: Fri Feb 9 19:04:33 2024 +0100
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Wed Mar 20 11:17:09 2024 +0100

    lok calc: show cell cursor on in place editing
    
    On in place editing cell cursor overlay matches the output area.
    In this way the user has a better guess about the edited area.
    
    Change-Id: Iba3370d942a9deaedeed23298a7cb7a6c6c0f5f5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164701
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit cc88ad715f80b13efb29744673d044df9c16550c)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164992
    Tested-by: Jenkins

diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 71364aaf172a..c24435aaa903 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -6179,6 +6179,8 @@ void ScGridWindow::UpdateAllOverlays()
 
 void ScGridWindow::DeleteCursorOverlay()
 {
+    if (comphelper::LibreOfficeKit::isActive() && 
mrViewData.HasEditView(eWhich))
+        return;
     ScTabViewShell* pViewShell = mrViewData.GetViewShell();
     pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CELL_CURSOR, 
"EMPTY"_ostr);
     SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_CELL_VIEW_CURSOR, 
"rectangle", "EMPTY"_ostr);
diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx
index 83975c6b0ee9..aa691ddfebde 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -71,6 +71,7 @@
 
 #include <com/sun/star/container/XNameContainer.hpp>
 #include <com/sun/star/document/NamedPropertyValues.hpp>
+#include <LibreOfficeKit/LibreOfficeKitEnums.h>
 
 using namespace com::sun::star;
 
@@ -1520,6 +1521,22 @@ tools::Rectangle ScViewData::GetEditArea( ScSplitPos 
eWhich, SCCOL nPosX, SCROW
                             GetEditArea( pPattern, bForceToTop );
 }
 
+namespace {
+
+void notifyCellCursorAt(const ScTabViewShell* pViewShell, SCCOL nCol, SCROW 
nRow,
+                        const tools::Rectangle& rCursor)
+{
+    std::stringstream ss;
+    ss << rCursor.getX() << ", " << rCursor.getY() << ", " << 
rCursor.GetWidth() << ", "
+       << rCursor.GetHeight() << ", " << nCol << ", " << nRow;
+
+    pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CELL_CURSOR, 
ss.str().c_str());
+    SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_CELL_VIEW_CURSOR, 
"rectangle",
+                                   ss.str().c_str());
+}
+
+}
+
 void ScViewData::SetEditEngine( ScSplitPos eWhich,
                                 ScEditEngineDefaulter* pNewEngine,
                                 vcl::Window* pWin, SCCOL nNewX, SCROW nNewY )
@@ -1635,6 +1652,9 @@ void ScViewData::SetEditEngine( ScSplitPos eWhich,
     tools::Rectangle aOutputArea = pWin->PixelToLogic( aPixRect, 
GetLogicMode() );
     pEditView[eWhich]->SetOutputArea( aOutputArea );
 
+    if (bLOKPrintTwips)
+        notifyCellCursorAt(GetViewShell(), nNewX, nNewY, aPTwipsRect);
+
     if ( bActive && eWhich == GetActivePart() )
     {
         // keep the part that has the active edit view available after
@@ -2120,6 +2140,9 @@ void ScViewData::EditGrowX()
 
     pCurView->SetOutputArea(aArea);
 
+    if (bLOKPrintTwips)
+        notifyCellCursorAt(GetViewShell(), nEditCol, nEditRow, aAreaPTwips);
+
     //  In vertical mode, the whole text is moved to the next cell 
(right-aligned),
     //  so everything must be repainted. Otherwise, paint only the new area.
     //  If growing in centered alignment, if the cells left and right have 
different sizes,
@@ -2233,6 +2256,9 @@ void ScViewData::EditGrowY( bool bInitial )
 
     pCurView->SetOutputArea(aArea);
 
+    if (bLOKPrintTwips)
+        notifyCellCursorAt(GetViewShell(), nEditCol, nEditRow, aAreaPTwips);
+
     if (nEditEndRow >= nBottom || bMaxReached)
     {
         if (!(nControl & EVControlBits::AUTOSCROLL))

Reply via email to