[Scummvm-git-logs] scummvm master -> a1c7b9f3f3c458247be74b4c24b4f84f823e5908

sev- noreply at scummvm.org
Fri Feb 13 18:53:46 UTC 2026


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
72b9bc70fb GUI: Fix scrolling over collapsed groups in List
a1c7b9f3f3 JANITORIAL: GUI: code cleanup


Commit: 72b9bc70fba0c31541127363b90edee715f6fa91
    https://github.com/scummvm/scummvm/commit/72b9bc70fba0c31541127363b90edee715f6fa91
Author: Mohit Bankar (mohitbankar1212 at gmail.com)
Date: 2026-02-13T19:53:40+01:00

Commit Message:
GUI: Fix scrolling over collapsed groups in List

Navigation/Selection with arrow keys now scrolls at the top/bottom of the list, if there are no unselectable items.

Changed paths:
    gui/widgets/list.cpp


diff --git a/gui/widgets/list.cpp b/gui/widgets/list.cpp
index 5de6dd56abd..0c2202d6628 100644
--- a/gui/widgets/list.cpp
+++ b/gui/widgets/list.cpp
@@ -309,6 +309,7 @@ void ListWidget::scrollTo(int item) {
 		_currentPos = item;
 		checkBounds();
 		scrollBarRecalc();
+		markAsDirty();
 	}
 }
 
@@ -554,6 +555,7 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 		case Common::KEYCODE_DOWN:
 			// Down: Add next item to selection (Ctrl+Click logic without toggle)
 			if (_selectedItem < (int)_list.size() - 1) {
+				bool scrolled = false;
 				if ( g_system->getEventManager()->getModifierState() & Common::KBD_SHIFT) {
 					int newItem = _selectedItem + 1;
 					// Skip selecting Group Headers
@@ -566,6 +568,7 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 						else
 							markSelectedItem(_selectedItem, false);
 						_selectedItem = newItem;
+						scrolled = true;
 					}
 				} else {
 					clearSelection();
@@ -574,14 +577,19 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 					while (newItem < (int)_list.size() && !isItemSelectable(newItem)) {
 						newItem++;
 					}
-					if (newItem < (int)_list.size())
+					if (newItem < (int)_list.size()) {
 						_selectedItem = newItem;
+						scrolled = true;
+					}
 					// If dead end, restore the previous selection
 					markSelectedItem(_selectedItem, true);
 					_lastSelectionStartItem = _selectedItem;
 				}
 				if (_selectedItem < (int)_list.size() && !isItemVisible(_selectedItem))
 					scrollToCurrent();
+				// If there are no selectable items, Scroll to Bottom
+				if (!scrolled)
+					scrollTo((int)_list.size() - 1);
 			}
 			break;
 
@@ -618,6 +626,7 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 		case Common::KEYCODE_UP:
 			// Up: Add previous item to selection (Ctrl+Click logic without toggle)
 			if (_selectedItem > 0) {
+				bool scrolled = false;
 				if (g_system->getEventManager()->getModifierState() & Common::KBD_SHIFT) {
 					int newItem = _selectedItem - 1;
 					// Skip selecting Group Headers
@@ -630,6 +639,7 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 						else
 							markSelectedItem(_selectedItem, false);
 						_selectedItem = newItem;
+						scrolled = true;
 					}
 				} else {
 					clearSelection();
@@ -638,14 +648,19 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 					while (newItem >= 0 && !isItemSelectable(newItem)) {
 						newItem--;
 					}
-					if (newItem >= 0) 
+					if (newItem >= 0) {
 						_selectedItem = newItem;
+						scrolled = true;
+					}
 					// If dead end, restore the previous selection
 					markSelectedItem(_selectedItem, true);
 					_lastSelectionStartItem = _selectedItem;
 				}
 				if (_selectedItem >= 0 && !isItemVisible(_selectedItem))
 					scrollToCurrent();
+				// If there are no selectable items, Scroll to Top
+				if (!scrolled)
+					scrollTo(0);
 			}
 			break;
 


Commit: a1c7b9f3f3c458247be74b4c24b4f84f823e5908
    https://github.com/scummvm/scummvm/commit/a1c7b9f3f3c458247be74b4c24b4f84f823e5908
Author: Mohit Bankar (mohitbankar1212 at gmail.com)
Date: 2026-02-13T19:53:40+01:00

Commit Message:
JANITORIAL: GUI: code cleanup

Changed paths:
    gui/widgets/list.cpp


diff --git a/gui/widgets/list.cpp b/gui/widgets/list.cpp
index 0c2202d6628..dea2e40dd02 100644
--- a/gui/widgets/list.cpp
+++ b/gui/widgets/list.cpp
@@ -555,13 +555,12 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 		case Common::KEYCODE_DOWN:
 			// Down: Add next item to selection (Ctrl+Click logic without toggle)
 			if (_selectedItem < (int)_list.size() - 1) {
+				int newItem = _selectedItem + 1;
 				bool scrolled = false;
 				if ( g_system->getEventManager()->getModifierState() & Common::KBD_SHIFT) {
-					int newItem = _selectedItem + 1;
 					// Skip selecting Group Headers
-					while (newItem < (int)_list.size() && !isItemSelectable(newItem)) {
+					while (newItem < (int)_list.size() && !isItemSelectable(newItem))
 						newItem++;
-					}
 					if (newItem < (int)_list.size()) {
 						if (_lastSelectionStartItem < newItem)
 							markSelectedItem(newItem, true);
@@ -572,11 +571,9 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 					}
 				} else {
 					clearSelection();
-					int newItem = _selectedItem + 1;
 					// Skip selecting Group Headers
-					while (newItem < (int)_list.size() && !isItemSelectable(newItem)) {
+					while (newItem < (int)_list.size() && !isItemSelectable(newItem))
 						newItem++;
-					}
 					if (newItem < (int)_list.size()) {
 						_selectedItem = newItem;
 						scrolled = true;
@@ -626,13 +623,12 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 		case Common::KEYCODE_UP:
 			// Up: Add previous item to selection (Ctrl+Click logic without toggle)
 			if (_selectedItem > 0) {
+				int newItem = _selectedItem - 1;
 				bool scrolled = false;
 				if (g_system->getEventManager()->getModifierState() & Common::KBD_SHIFT) {
-					int newItem = _selectedItem - 1;
 					// Skip selecting Group Headers
-					while (newItem >= 0 && !isItemSelectable(newItem)) {
+					while (newItem >= 0 && !isItemSelectable(newItem))
 						newItem--;
-					}
 					if (newItem >= 0) {
 						if (_lastSelectionStartItem > newItem)
 							markSelectedItem(newItem, true);
@@ -643,11 +639,9 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {
 					}
 				} else {
 					clearSelection();
-					int newItem = _selectedItem - 1;
 					// Skip selecting Group Headers
-					while (newItem >= 0 && !isItemSelectable(newItem)) {
+					while (newItem >= 0 && !isItemSelectable(newItem))
 						newItem--;
-					}
 					if (newItem >= 0) {
 						_selectedItem = newItem;
 						scrolled = true;




More information about the Scummvm-git-logs mailing list