diff options
Diffstat (limited to 'gui/widgets')
-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; |