sc/inc/table.hxx | 2 +- sc/source/core/data/table1.cxx | 21 +++++++++++++-------- sc/source/ui/view/tabview3.cxx | 6 +++--- 3 files changed, 17 insertions(+), 12 deletions(-)
New commits: commit 5d774434743fbc40a5d19daadc9d5b73d2552c41 Author: Eike Rathke <er...@redhat.com> Date: Wed Jul 4 11:34:02 2018 +0200 Resolves: tdf#117458 let Enter move left/right again, tdf#68290 follow-up Regression from commit b0a391d62c1df7525069a02913a52af940d92ecc CommitDate: Tue Jan 30 23:12:04 2018 +0100 Circular movement of cursor in a table with hidden columns/rows, tdf#68290 related where for nMoveX case nNewX - nCurX and nNewY - nCurY were both 0. Also don't abuse the bMarked flag for GetNextPos() as bUnprotected if nothing is marked, in which case also bKeepSel doesn't make sense. Change-Id: I59af09f1cfa397e68ce16d151ba7eee6e6598a75 Reviewed-on: https://gerrit.libreoffice.org/56935 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Jenkins diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx index 2065ce2b130f..97f1f44fc08f 100644 --- a/sc/inc/table.hxx +++ b/sc/inc/table.hxx @@ -589,7 +589,7 @@ public: bool bMarked, bool bUnprotected, const ScMarkData& rMark ) const; bool SkipRow( const SCCOL rCol, SCROW& rRow, const SCROW nMovY, const ScMarkData& rMark, - const bool bUp, const SCROW nUsedY, const bool bSheetProtected ) const; + const bool bUp, const SCROW nUsedY, const bool bMarked, const bool bSheetProtected ) const; void LimitChartArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, SCROW& rEndRow ) const; bool HasData( SCCOL nCol, SCROW nRow ) const; diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx index 76cd876e1d49..21301356e049 100644 --- a/sc/source/core/data/table1.cxx +++ b/sc/source/core/data/table1.cxx @@ -1325,7 +1325,8 @@ bool ScTable::ValidNextPos( SCCOL nCol, SCROW nRow, const ScMarkData& rMark, // Skips the current cell if it is Hidden, Overlapped or Protected and Sheet is Protected bool ScTable::SkipRow( const SCCOL nCol, SCROW& rRow, const SCROW nMovY, - const ScMarkData& rMark, const bool bUp, const SCROW nUsedY, const bool bSheetProtected ) const + const ScMarkData& rMark, const bool bUp, const SCROW nUsedY, + const bool bMarked, const bool bSheetProtected ) const { if ( !ValidRow( rRow )) return false; @@ -1337,7 +1338,8 @@ bool ScTable::SkipRow( const SCCOL nCol, SCROW& rRow, const SCROW nMovY, else rRow += nMovY; - rRow = rMark.GetNextMarked( nCol, rRow, bUp ); + if (bMarked) + rRow = rMark.GetNextMarked( nCol, rRow, bUp ); return true; } @@ -1349,7 +1351,8 @@ bool ScTable::SkipRow( const SCCOL nCol, SCROW& rRow, const SCROW nMovY, if ( bRowHidden || bOverlapped ) { rRow += nMovY; - rRow = rMark.GetNextMarked( nCol, rRow, bUp ); + if (bMarked) + rRow = rMark.GetNextMarked( nCol, rRow, bUp ); return true; } @@ -1376,16 +1379,17 @@ void ScTable::GetNextPos( SCCOL& rCol, SCROW& rRow, SCCOL nMovX, SCROW nMovY, OSL_ENSURE( !nMovY || !bUnprotected, "GetNextPos with bUnprotected horizontal not implemented" ); - if ( nMovY && bMarked ) + if ( nMovY && (bMarked || bUnprotected)) { bool bUp = ( nMovY < 0 ); SCROW nUsedY = nRow; SCCOL nUsedX = nCol; - nRow = rMark.GetNextMarked( nCol, nRow, bUp ); + if (bMarked) + nRow = rMark.GetNextMarked( nCol, nRow, bUp ); pDocument->GetPrintArea( nTab, nUsedX, nUsedY ); - while ( SkipRow( nCol, nRow, nMovY, rMark, bUp, nUsedY, bSheetProtected )) + while ( SkipRow( nCol, nRow, nMovY, rMark, bUp, nUsedY, bMarked, bSheetProtected )) ; while ( nRow < 0 || nRow > MAXROW ) @@ -1413,9 +1417,10 @@ void ScTable::GetNextPos( SCCOL& rCol, SCROW& rRow, SCCOL nMovX, SCROW nMovY, else if (nRow > MAXROW) nRow = 0; - nRow = rMark.GetNextMarked( nCol, nRow, bUp ); + if (bMarked) + nRow = rMark.GetNextMarked( nCol, nRow, bUp ); - while ( SkipRow( nCol, nRow, nMovY, rMark, bUp, nUsedY, bSheetProtected )) + while ( SkipRow( nCol, nRow, nMovY, rMark, bUp, nUsedY, bMarked, bSheetProtected )) ; } } diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx index b79ea4ff0079..393735d3df6b 100644 --- a/sc/source/ui/view/tabview3.cxx +++ b/sc/source/ui/view/tabview3.cxx @@ -1388,10 +1388,10 @@ void ScTabView::MoveCursorEnter( bool bShift ) // bShift -> up/down } else { + pDoc->GetNextPos( nNewX, nNewY, nTab, nMoveX, nMoveY, false, true, rMark ); + if ( nMoveY != 0 && !nMoveX ) { - pDoc->GetNextPos( nNewX, nNewY, nTab, nMoveX, nMoveY, true, false, rMark ); - // after Tab and Enter back to the starting column again SCCOL nTabCol = aViewData.GetTabStartCol(); if (nTabCol != SC_TABSTART_NONE) @@ -1400,7 +1400,7 @@ void ScTabView::MoveCursorEnter( bool bShift ) // bShift -> up/down } } - MoveCursorRel( nNewX - nCurX, nNewY - nCurY, SC_FOLLOW_LINE, false, true ); + MoveCursorRel( nNewX - nCurX, nNewY - nCurY, SC_FOLLOW_LINE, false); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits