0d57d1f
From 937d1d5be8d0c783fb5740aa50456f9941ac638b Mon Sep 17 00:00:00 2001
0d57d1f
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
0d57d1f
Date: Wed, 29 Jul 2020 21:05:27 +0100
0d57d1f
Subject: [PATCH] rhbz#1861794 csv fixed width import missing split handle
0d57d1f
MIME-Version: 1.0
0d57d1f
Content-Type: text/plain; charset=UTF-8
0d57d1f
Content-Transfer-Encoding: 8bit
0d57d1f
0d57d1f
regression from...
0d57d1f
0d57d1f
commit 1e97ca02773e2ba968606eed61d25d88f0d7e417
0d57d1f
Author: Caolán McNamara <caolanm@redhat.com>
0d57d1f
Date:   Mon Oct 14 11:05:07 2019 +0100
0d57d1f
0d57d1f
EndMouseTracking was left uncalled
0d57d1f
0d57d1f
Change-Id: Ia952addac585737c3d3aa4fd68d772c3acbae848
0d57d1f
---
0d57d1f
 sc/source/ui/dbgui/csvruler.cxx | 36 ++++++++++++++++-----------------
0d57d1f
 sc/source/ui/inc/csvruler.hxx   |  7 ++++---
0d57d1f
 2 files changed, 21 insertions(+), 22 deletions(-)
0d57d1f
0d57d1f
diff --git a/sc/source/ui/dbgui/csvruler.cxx b/sc/source/ui/dbgui/csvruler.cxx
0d57d1f
index 294f22526974..9fe9f6433359 100644
0d57d1f
--- a/sc/source/ui/dbgui/csvruler.cxx
0d57d1f
+++ b/sc/source/ui/dbgui/csvruler.cxx
0d57d1f
@@ -106,7 +106,7 @@ void ScCsvRuler::SetDrawingArea(weld::DrawingArea* pDrawingArea)
0d57d1f
 {
0d57d1f
     ScCsvControl::SetDrawingArea(pDrawingArea);
0d57d1f
 
0d57d1f
-    mnSplitSize = (GetCharWidth() * 3 / 5) | 1; // make an odd number
0d57d1f
+    UpdateSplitSize();
0d57d1f
 
0d57d1f
     Size aSize(1, GetTextHeight() + mnSplitSize + 2);
0d57d1f
     pDrawingArea->set_size_request(aSize.Width(), aSize.Height());
0d57d1f
@@ -162,10 +162,17 @@ void ScCsvRuler::InitColors()
0d57d1f
     InvalidateGfx();
0d57d1f
 }
0d57d1f
 
0d57d1f
+void ScCsvRuler::UpdateSplitSize()
0d57d1f
+{
0d57d1f
+    mnSplitSize = (GetCharWidth() * 3 / 5) | 1; // make an odd number
0d57d1f
+}
0d57d1f
+
0d57d1f
 void ScCsvRuler::InitSizeData()
0d57d1f
 {
0d57d1f
     maWinSize = GetOutputSizePixel();
0d57d1f
 
0d57d1f
+    UpdateSplitSize();
0d57d1f
+
0d57d1f
     sal_Int32 nActiveWidth = std::min( GetWidth() - GetHdrWidth(), GetPosCount() * GetCharWidth() );
0d57d1f
     sal_Int32 nActiveHeight = GetTextHeight();
0d57d1f
 
0d57d1f
@@ -409,7 +416,11 @@ bool ScCsvRuler::MouseButtonDown( const MouseEvent& rMEvt )
0d57d1f
 
0d57d1f
 bool ScCsvRuler::MouseButtonUp( const MouseEvent& )
0d57d1f
 {
0d57d1f
-    mbTracking = false;
0d57d1f
+    if (mbTracking)
0d57d1f
+    {
0d57d1f
+        EndMouseTracking();
0d57d1f
+        mbTracking = false;
0d57d1f
+    }
0d57d1f
     return true;
0d57d1f
 }
0d57d1f
 
0d57d1f
@@ -498,24 +509,11 @@ void ScCsvRuler::MoveMouseTracking( sal_Int32 nPos )
0d57d1f
     }
0d57d1f
 }
0d57d1f
 
0d57d1f
-void ScCsvRuler::EndMouseTracking( bool bApply )
0d57d1f
+void ScCsvRuler::EndMouseTracking()
0d57d1f
 {
0d57d1f
-    if( bApply )    // tracking finished successfully
0d57d1f
-    {
0d57d1f
-        // remove on simple click on an existing split
0d57d1f
-        if( (mnPosMTCurr == mnPosMTStart) && maOldSplits.HasSplit( mnPosMTCurr ) && !mbPosMTMoved )
0d57d1f
-            Execute( CSVCMD_REMOVESPLIT, mnPosMTCurr );
0d57d1f
-    }
0d57d1f
-    else            // tracking cancelled
0d57d1f
-    {
0d57d1f
-        MoveCursor( mnPosMTStart );
0d57d1f
-        // move split to origin
0d57d1f
-        if( maOldSplits.HasSplit( mnPosMTStart ) )
0d57d1f
-            MoveMouseTracking( mnPosMTStart );
0d57d1f
-        // remove temporarily inserted split
0d57d1f
-        else if( !maOldSplits.HasSplit( mnPosMTCurr ) )
0d57d1f
-            Execute( CSVCMD_REMOVESPLIT, mnPosMTCurr );
0d57d1f
-    }
0d57d1f
+    // remove on simple click on an existing split
0d57d1f
+    if( (mnPosMTCurr == mnPosMTStart) && maOldSplits.HasSplit( mnPosMTCurr ) && !mbPosMTMoved )
0d57d1f
+        Execute( CSVCMD_REMOVESPLIT, mnPosMTCurr );
0d57d1f
     mnPosMTStart = CSV_POS_INVALID;
0d57d1f
 }
0d57d1f
 
0d57d1f
diff --git a/sc/source/ui/inc/csvruler.hxx b/sc/source/ui/inc/csvruler.hxx
0d57d1f
index 32d72ef93b8f..0913ac09271f 100644
0d57d1f
--- a/sc/source/ui/inc/csvruler.hxx
0d57d1f
+++ b/sc/source/ui/inc/csvruler.hxx
0d57d1f
@@ -137,9 +137,8 @@ private:
0d57d1f
     void                        StartMouseTracking( sal_Int32 nPos );
0d57d1f
     /** Moves tracking to a new position. */
0d57d1f
     void                        MoveMouseTracking( sal_Int32 nPos );
0d57d1f
-    /** Applies tracking action for the current tracking position.
0d57d1f
-        @param bApply  sal_True = apply action, sal_False = cancel action. */
0d57d1f
-    void                        EndMouseTracking( bool bApply );
0d57d1f
+    /** Applies tracking action for the current tracking position */
0d57d1f
+    void                        EndMouseTracking();
0d57d1f
 
0d57d1f
     // painting ---------------------------------------------------------------
0d57d1f
 protected:
0d57d1f
@@ -154,6 +153,8 @@ private:
0d57d1f
     sal_Int32            GetWidth() const { return maWinSize.Width(); }
0d57d1f
     /** Returns the height of the control. */
0d57d1f
     sal_Int32            GetHeight() const { return maWinSize.Height(); }
0d57d1f
+    /** Update the split size depending on the last width set by CSVCMD_SETCHARWIDTH */
0d57d1f
+    void UpdateSplitSize();
0d57d1f
 
0d57d1f
     /** Draws the background and active area to maBackgrDev (only the given X range). */
0d57d1f
     void                        ImplDrawArea( sal_Int32 nPosX, sal_Int32 nWidth );
0d57d1f
-- 
0d57d1f
2.26.2
0d57d1f