diff options
| -rw-r--r-- | gui/widgets/list.cpp | 15 | ||||
| -rw-r--r-- | gui/widgets/list.h | 1 | 
2 files changed, 11 insertions, 5 deletions
| diff --git a/gui/widgets/list.cpp b/gui/widgets/list.cpp index 95d39c4f24..473d5f04df 100644 --- a/gui/widgets/list.cpp +++ b/gui/widgets/list.cpp @@ -206,6 +206,7 @@ void ListWidget::scrollTo(int item) {  	if (_currentPos != item) {  		_currentPos = item; +		checkBounds();  		scrollBarRecalc();  	}  } @@ -467,6 +468,7 @@ void ListWidget::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {  	case kSetPositionCmd:  		if (_currentPos != (int)data) {  			_currentPos = data; +			checkBounds();  			draw();  			// Scrollbar actions cause list focus (which triggers a redraw) @@ -550,6 +552,13 @@ Common::Rect ListWidget::getEditRect() const {  	return r;  } +void ListWidget::checkBounds() { +	if (_currentPos < 0 || _entriesPerPage > (int)_list.size()) +		_currentPos = 0; +	else if (_currentPos + _entriesPerPage > (int)_list.size()) +		_currentPos = _list.size() - _entriesPerPage; +} +  void ListWidget::scrollToCurrent() {  	// Only do something if the current item is not in our view port  	if (_selectedItem < _currentPos) { @@ -560,11 +569,7 @@ void ListWidget::scrollToCurrent() {  		_currentPos = _selectedItem - _entriesPerPage + 1;  	} -	if (_currentPos < 0 || _entriesPerPage > (int)_list.size()) -		_currentPos = 0; -	else if (_currentPos + _entriesPerPage > (int)_list.size()) -		_currentPos = _list.size() - _entriesPerPage; - +	checkBounds();  	_scrollBar->_currentPos = _currentPos;  	_scrollBar->recalc();  } diff --git a/gui/widgets/list.h b/gui/widgets/list.h index 47613b79f3..d18a82dd3f 100644 --- a/gui/widgets/list.h +++ b/gui/widgets/list.h @@ -145,6 +145,7 @@ protected:  	void receivedFocusWidget();  	void lostFocusWidget(); +	void checkBounds();  	void scrollToCurrent();  	int *_textWidth; | 
