Hello,
The bug is : "tabulator does not change row in tables"
First, let's have in mind the code of getColumnId (svtools/source/brwbox/brwbox2.cxx) :
481 sal_uInt16 BrowseBox::GetColumnId( sal_uInt16 nPos ) const
482 {
483 DBG_CHKTHIS(BrowseBox,BrowseBoxCheckInvariants);
484
485 if ( nPos >= pCols->size() )
486 return BROWSER_INVALIDID;
487 return (*pCols)[ nPos ]->GetId();
488 }
So if want to go further than max row, it returns BROWSER_INVALIDID (equals to SAL_MAX_UINT16)
So I think the problem is here (still in brwbox2.cxx) :
1999 case BROWSER_CURSORRIGHT:
2000 if ( bColumnCursor )
2001 {
2002 sal_uInt16 nNewPos = GetColumnPos( GetCurColumnId() ) + 1;
2003 sal_uInt16 nNewId = GetColumnId( nNewPos );
2004 if (nNewId != 0) // Am Zeilenende ? <-- we should compare nNewId with BROWSER_INVALIDID not with 0
2005 bDone = GoToColumnId( nNewId );
2006 else
2007 {
2008 sal_uInt16 nColId = ( GetColumnId(0) == 0 ) ? GetColumnId(1) : GetColumnId(0);
2009 if ( GetRowCount() )
2010 bDone = ( nCurRow < GetRowCount() - 1 ) && GoToRowColumnId( nCurRow + 1, nColId );
2011 else if ( ColCount() )
2012 GoToColumnId( nColId );
2013 }
2014 }
2015 else
2016 bDone = ScrollColumns( 1 ) != 0;
2017 break;
But here is the code of getColumnId (still in brwbox2.cxx) :
481 sal_uInt16 BrowseBox::GetColumnId( sal_uInt16 nPos ) const
482 {
483 DBG_CHKTHIS(BrowseBox,BrowseBoxCheckInvariants);
484
485 if ( nPos >= pCols->size() )
486 return BROWSER_INVALIDID;
487 return (*pCols)[ nPos ]->GetId();
488 }
So if want to go further than max row, it returns BROWSER_INVALIDID (equals to SAL_MAX_UINT16)
I replaced 0 by BROWSER_INVALIDID, it compiles and seems to work.
I propose this patch :
patch.txtIs it ok for you ? If yes I can commit and push on master (3.5 too ?)
Julien