Gallery View: Added logic to remove unfavorited subitems of grouped tiles in favorites-view

In gallery view, when a game version of a grouped tile is unfavorited in favorites-view, it is now
automatically removed from the display. Added RemoveVersionFromDisplay
method to handle item removal, tile updates and layout
recalculation. The grouped-view is automatically closed
when only one version remains after unfavoriting
This commit is contained in:
jp64k
2026-01-30 04:33:51 +01:00
parent f21efcd476
commit 9f2e824df2

View File

@@ -1661,15 +1661,55 @@ public class FastGalleryPanel : Control
{
settings.RemoveFavoriteGame(packageName);
_favoritesCache.Remove(packageName);
// Check if in favorites-only view (= this item is now the only non-favorite)
bool isFavoritesView = _items.All(item =>
item == targetItem || _favoritesCache.Contains(item.SubItems.Count > 1 ? item.SubItems[1].Text : ""));
if (isFavoritesView)
RemoveVersionFromDisplay(tile, targetItem, _rightClickedIndex);
}
else
{
settings.AddFavoriteGame(packageName);
_favoritesCache.Add(packageName);
}
Invalidate();
}
private void RemoveVersionFromDisplay(GroupedTile tile, ListViewItem item, int tileIndex)
{
_items.Remove(item);
_originalItems.Remove(item);
tile.Versions.Remove(item);
if (tile.Versions.Count == 0)
{
_displayTiles.RemoveAt(tileIndex);
CloseOverlay();
if (_selectedIndex == tileIndex) { _selectedIndex = -1; _selectedItem = null; }
else if (_selectedIndex > tileIndex) _selectedIndex--;
}
else
{
tile.BaseGameName = GetBaseGameName(tile.Versions);
tile.GameName = tile.Versions[0].Text;
if (tile.Versions.Count == 1)
CloseOverlay();
else if (_overlayHoveredVersion >= tile.Versions.Count)
_overlayHoveredVersion = tile.Versions.Count - 1;
}
// Rebuild tile states
_tileStates.Clear();
for (int i = 0; i < _displayTiles.Count; i++)
_tileStates[i] = new TileAnimationState();
RecalculateLayout();
}
public void RefreshFavoritesCache()
{
_favoritesCache = new HashSet<string>(SettingsManager.Instance.FavoritedGames, StringComparer.OrdinalIgnoreCase);