The mouse can end up outside of the tray when scrolling and the just
clicked game has a short name.
Instead, register the case and close the tray only when mouse ended up
in it and left again.
Fix#16688.
The Launcher search box supports rich syntax as documented
(e.g. engine:, platform:, lang=). This works correctly in
List view but was not working in Grid (Icons) view.
In Grid view, advanced expressions were ignored because
the filter logic was not hooked into GridWidget.
Connect GridWidget to the existing Launcher filter matcher so
Grid view uses the same search implementation as List view.
Update ListWidget, GridWidget, and GroupedListWidget setSelected() to
clear all selections and mark only the newly selected item when
multi-select is enabled.
Replace duplicate addSelectedItem() and removeSelectedItem() methods with
a single markSelectedItem(int item, bool state) method in both ListWidget
and GridWidget. Update all callers across list.cpp, grid.cpp, groupedlist.cpp,
and launcher.cpp to use the new unified method.
- Replace int array _selectedEntries with bool array _selectedItems in GridWidget
- Rename getSelectedItemsBool() to getSelectedItems() in ListWidget
- Update performGameRemoval() to accept bool array parameter
- Simplify selection logic and improve deletion efficiency
Fixes an issue where Shift+Click multi-selection in the grid view would select the wrong games when grouping was active. Now, Shift+Click correctly selects only the games you see between your first and second click, matching the visual order in the grid.
Fix grid view multi-selection logic to avoid adding duplicate entries
when shift-clicking the same or overlapping ranges. Now, each entry
in the selection range is only added once.
- Added _multiSelectEnabled flag to ListWidget and GridWidget (default: false)
- Added setMultiSelectEnabled() and isMultiSelectEnabled() methods
- Gated Ctrl+Click and Shift+Click logic behind _multiSelectEnabled check
- GroupedListWidget inherits this behavior from ListWidget
Implement multi-selection in the launcher grid:
• Ctrl + Click toggles selection of individual entries
• Shift + Click selects a contiguous range from the last to the current selection
• Selected entries are consistently stored in sorted order
• Removal confirmation dialog now shows user-friendly game names
• Improved modifier key handling for reliable Ctrl and Shift detection
_disabledIconOverlay, a ManagedSurface regularly re-instantiated, should be
deleted rather than merely have its free() method called.
While here, remove an if() which is guaranteed true lest scummvm segfault.
This makes it so that games are started on the release
of the left mouse button after a double click, instead of
during it being pressed.
This fixes the left mouse button release leaking into the
launched game as actual engine input.
GroupedListWidget and GridWidget can save what groups they have
collapsed to the config file and reload them. "launcher.cpp" uses those
functions to persist those collapsed groups through
- changing how the games are grouped by
- going from list to grid mode and vice versa
- quitting scummvm and starting it again