[Libreoffice-commits] core.git: sc/inc sc/source

Tor Lillqvist (via logerrit) logerrit at kemper.freedesktop.org
Mon Feb 1 12:27:27 UTC 2021


 sc/inc/global.hxx              |    2 ++
 sc/source/core/data/table2.cxx |   13 ++++++++++---
 sc/source/ui/view/gridwin.cxx  |    5 +++++
 3 files changed, 17 insertions(+), 3 deletions(-)

New commits:
commit dca0374fb1edbd9bdeeaadda3f1866ce66b3a778
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Fri Jan 29 16:03:29 2021 +0200
Commit:     Tor Lillqvist <tml at collabora.com>
CommitDate: Mon Feb 1 13:26:42 2021 +0100

    Don't bother shrinking row height when changing just one row interactively
    
    I.e. when manually entering a new value.
    
    This used to happen at least for a sample document in .xlsx format for
    cells with automatic wrap turned on. After entering a value, the row
    height was annoyingly shrunk by a few pixels, which looked weird and
    pointless, and caused unnecessary invalidation thrash in the online
    collaborative editing context.
    
    Change-Id: I3c77f7fb4e575f02e1dd7cdc18f2919f5eb3426e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110243
    Tested-by: Jenkins
    Reviewed-by: Tor Lillqvist <tml at collabora.com>

diff --git a/sc/inc/global.hxx b/sc/inc/global.hxx
index f1a3559aa6ad..320edbad54d1 100644
--- a/sc/inc/global.hxx
+++ b/sc/inc/global.hxx
@@ -813,6 +813,8 @@ public:
 
     /// Calc's threaded group calculation is in progress.
     SC_DLLPUBLIC static bool bThreadedGroupCalcInProgress;
+
+    SC_DLLPUBLIC static bool bKeyInputInProgress;
 };
 
 // maybe move to dbdata.hxx (?):
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 0d8ccaac55ce..b21c29f11ba8 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -1,4 +1,4 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
 /*
  * This file is part of the LibreOffice project.
  *
@@ -3024,7 +3024,11 @@ bool lcl_pixelSizeChanged(
 
         if (nHeight != nNewHeight)
         {
-            bool bChanged = (nNewPix != static_cast<tools::Long>(nHeight * nPPTY));
+            tools::Long nOldPix = static_cast<tools::Long>(nHeight * nPPTY);
+
+            // Heuristic: Don't bother when handling interactive input, if changing just one row and
+            // the height will shrink.
+            bool bChanged = (nNewPix != nOldPix) && (!ScGlobal::bKeyInputInProgress || nEndRow - nStartRow > 0 || nNewPix > nOldPix);
             if (bChanged)
                 return true;
         }
@@ -3065,14 +3069,17 @@ bool ScTable::SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, sal_uInt16 nNew
             }
         }
 
+        // No idea why 20 is used here
         if (!bSingle || nEndRow - nStartRow < 20)
         {
             bChanged = lcl_pixelSizeChanged(*mpRowHeights, nStartRow, nEndRow, nNewHeight, nPPTY);
-            mpRowHeights->setValue(nStartRow, nEndRow, nNewHeight);
+            if (bChanged)
+                mpRowHeights->setValue(nStartRow, nEndRow, nNewHeight);
         }
         else
         {
             SCROW nMid = (nStartRow + nEndRow) / 2;
+            // No idea why nPPTY is ignored in these recursive calls and instead 1.0 is used
             if (SetRowHeightRange(nStartRow, nMid, nNewHeight, 1.0))
                 bChanged = true;
             if (SetRowHeightRange(nMid + 1, nEndRow, nNewHeight, 1.0))
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 37bc1ea211e6..56f02c91ce3b 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -44,6 +44,7 @@
 #include <vcl/settings.hxx>
 #include <sot/formats.hxx>
 #include <comphelper/classids.hxx>
+#include <comphelper/flagguard.hxx>
 
 #include <svx/svdview.hxx>
 #include <editeng/outliner.hxx>
@@ -3191,8 +3192,12 @@ void ScGridWindow::SelectForContextMenu( const Point& rPosPixel, SCCOL nCellX, S
     }
 }
 
+bool ScGlobal::bKeyInputInProgress = false;
+
 void ScGridWindow::KeyInput(const KeyEvent& rKEvt)
 {
+    comphelper::FlagGuard aResetFlag(ScGlobal::bKeyInputInProgress);
+
     // Cursor control for ref input dialog
     const vcl::KeyCode& rKeyCode = rKEvt.GetKeyCode();
 


More information about the Libreoffice-commits mailing list