summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2018-07-04 11:34:02 +0200
committerEike Rathke <erack@redhat.com>2018-07-04 14:11:08 +0200
commit5d774434743fbc40a5d19daadc9d5b73d2552c41 (patch)
tree560087483b2f54052c161389db5dfb5e1de35727
parentd05b7b32d9ecb6fcb4a268eb68cdcee09bafa6dd (diff)
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 <erack@redhat.com> Tested-by: Jenkins
-rw-r--r--sc/inc/table.hxx2
-rw-r--r--sc/source/core/data/table1.cxx21
-rw-r--r--sc/source/ui/view/tabview3.cxx6
3 files changed, 17 insertions, 12 deletions
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);
}
}