[Scummvm-git-logs] scummvm master -> 346e5da5cb52fd7695424380ed188430d84e177a

sev- noreply at scummvm.org
Sat Jan 31 22:40:03 UTC 2026


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

Summary:
346e5da5cb GUI: Fix up/down key behavior in list.cpp


Commit: 346e5da5cb52fd7695424380ed188430d84e177a
    https://github.com/scummvm/scummvm/commit/346e5da5cb52fd7695424380ed188430d84e177a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-01-31T23:39:56+01:00

Commit Message:
GUI: Fix up/down key behavior in list.cpp

The introduced change was not logical as it was forcing the
multiselection mode. Now, in order to keep the selection,
you need to hold the Shift key

Changed paths:
    gui/widgets/list.cpp


diff --git a/gui/widgets/list.cpp b/gui/widgets/list.cpp
index 30c7490bf4e..b6a5c2ac7f5 100644
--- a/gui/widgets/list.cpp
+++ b/gui/widgets/list.cpp
@@ -282,14 +282,14 @@ int ListWidget::getVisualPos(int dataIndex) const {
 	if (_listIndex.empty()) {
 		return dataIndex;
 	}
-	
+
 	// Find visual index by searching _listIndex for dataIndex
 	for (uint i = 0; i < _listIndex.size(); ++i) {
 		if (_listIndex[i] == dataIndex) {
 			return i;
 		}
 	}
-	
+
 	// Not found
 	return -1;
 }
@@ -550,12 +550,21 @@ 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;
-				markSelectedItem(newItem, true);
-				_selectedItem = newItem;
-				_lastSelectionStartItem = newItem;
-				scrollToCurrent();
-				dirty = true;
+				if ( g_system->getEventManager()->getModifierState() & Common::KBD_SHIFT) {
+					int newItem = _selectedItem + 1;
+					if (_lastSelectionStartItem < newItem)
+						markSelectedItem(newItem, true);
+					else
+						markSelectedItem(_selectedItem, false);
+					_selectedItem = newItem;
+					scrollToCurrent();
+					dirty = true;
+				} else {
+					clearSelection();
+					_selectedItem++;
+					markSelectedItem(_selectedItem, true);
+					_lastSelectionStartItem = _selectedItem;
+				}
 			}
 			break;
 
@@ -592,12 +601,21 @@ 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;
-				markSelectedItem(newItem, true);
-				_selectedItem = newItem;
-				_lastSelectionStartItem = newItem;
-				scrollToCurrent();
-				dirty = true;
+				if (g_system->getEventManager()->getModifierState() & Common::KBD_SHIFT) {
+					int newItem = _selectedItem - 1;
+					if (_lastSelectionStartItem > newItem)
+						markSelectedItem(newItem, true);
+					else
+						markSelectedItem(_selectedItem, false);
+					_selectedItem = newItem;
+					scrollToCurrent();
+					dirty = true;
+				} else {
+					clearSelection();
+					_selectedItem--;
+					markSelectedItem(_selectedItem, true);
+					_lastSelectionStartItem = _selectedItem;
+				}
 			}
 			break;
 




More information about the Scummvm-git-logs mailing list