diff --git a/rpcs3/rpcs3qt/game_list.cpp b/rpcs3/rpcs3qt/game_list.cpp index 4c9c5e9b5a..62ea8f73ba 100644 --- a/rpcs3/rpcs3qt/game_list.cpp +++ b/rpcs3/rpcs3qt/game_list.cpp @@ -8,9 +8,9 @@ game_list::game_list() : QTableWidget(), game_list_base() { - m_icon_ready_callback = [this](const movie_item_base* item) + m_icon_ready_callback = [this](const game_info& game, const movie_item_base* item) { - Q_EMIT IconReady(item); + Q_EMIT IconReady(game, item); }; } diff --git a/rpcs3/rpcs3qt/game_list.h b/rpcs3/rpcs3qt/game_list.h index c49f5b5aa1..db59b07913 100644 --- a/rpcs3/rpcs3qt/game_list.h +++ b/rpcs3/rpcs3qt/game_list.h @@ -36,7 +36,7 @@ public Q_SLOTS: Q_SIGNALS: void FocusToSearchBar(); - void IconReady(const movie_item_base* item); + void IconReady(const game_info& game, const movie_item_base* item); protected: movie_item* m_last_hover_item = nullptr; diff --git a/rpcs3/rpcs3qt/game_list_base.cpp b/rpcs3/rpcs3qt/game_list_base.cpp index 21640906ee..51e43c95bf 100644 --- a/rpcs3/rpcs3qt/game_list_base.cpp +++ b/rpcs3/rpcs3qt/game_list_base.cpp @@ -79,7 +79,7 @@ void game_list_base::IconLoadFunction(game_info game, qreal device_pixel_ratio, if (!cancel || !cancel->load()) { if (m_icon_ready_callback) - m_icon_ready_callback(game->item); + m_icon_ready_callback(game, game->item); } } diff --git a/rpcs3/rpcs3qt/game_list_base.h b/rpcs3/rpcs3qt/game_list_base.h index ce6df55825..6d25aad3b3 100644 --- a/rpcs3/rpcs3qt/game_list_base.h +++ b/rpcs3/rpcs3qt/game_list_base.h @@ -32,7 +32,7 @@ protected: QPixmap PaintedPixmap(const QPixmap& icon, qreal device_pixel_ratio, bool paint_config_icon = false, bool paint_pad_config_icon = false, const QColor& compatibility_color = {}) const; QColor GetGridCompatibilityColor(const QString& string) const; - std::function m_icon_ready_callback{}; + std::function m_icon_ready_callback{}; bool m_draw_compat_status_to_grid{}; bool m_is_list_layout{}; QSize m_icon_size{}; diff --git a/rpcs3/rpcs3qt/game_list_grid.cpp b/rpcs3/rpcs3qt/game_list_grid.cpp index 4a762f288c..ca7b07bb0f 100644 --- a/rpcs3/rpcs3qt/game_list_grid.cpp +++ b/rpcs3/rpcs3qt/game_list_grid.cpp @@ -14,14 +14,14 @@ game_list_grid::game_list_grid() setObjectName("game_list_grid"); setContextMenuPolicy(Qt::CustomContextMenu); - m_icon_ready_callback = [this](const movie_item_base* item) + m_icon_ready_callback = [this](const game_info& game, const movie_item_base* item) { - Q_EMIT IconReady(item); + Q_EMIT IconReady(game, item); }; - connect(this, &game_list_grid::IconReady, this, [this](const movie_item_base* item) + connect(this, &game_list_grid::IconReady, this, [this](const game_info& game, const movie_item_base* item) { - if (item) item->image_change_callback(); + if (game && item && game->item == item) item->image_change_callback(); }, Qt::QueuedConnection); // The default 'AutoConnection' doesn't seem to work in this specific case... connect(this, &flow_widget::ItemSelectionChanged, this, [this](int index) diff --git a/rpcs3/rpcs3qt/game_list_grid.h b/rpcs3/rpcs3qt/game_list_grid.h index aaa1e267d3..6116ff1d8c 100644 --- a/rpcs3/rpcs3qt/game_list_grid.h +++ b/rpcs3/rpcs3qt/game_list_grid.h @@ -33,5 +33,5 @@ Q_SIGNALS: void FocusToSearchBar(); void ItemDoubleClicked(const game_info& game); void ItemSelectionChanged(const game_info& game); - void IconReady(const movie_item_base* item); + void IconReady(const game_info& game, const movie_item_base* item); }; diff --git a/rpcs3/rpcs3qt/game_list_table.cpp b/rpcs3/rpcs3qt/game_list_table.cpp index 31950ab177..8d721f86ec 100644 --- a/rpcs3/rpcs3qt/game_list_table.cpp +++ b/rpcs3/rpcs3qt/game_list_table.cpp @@ -41,10 +41,10 @@ game_list_table::game_list_table(game_list_frame* frame, std::shared_ptr(gui::game_list_columns::count)); setMouseTracking(true); - connect(this, &game_list_table::size_on_disk_ready, this, [this](const game_info& game) + connect(this, &game_list_table::size_on_disk_ready, this, [this](const game_info& game, movie_item_base* item) { - if (!game || !game->item) return; - if (QTableWidgetItem* size_item = item(static_cast(game->item)->row(), static_cast(gui::game_list_columns::dir_size))) + if (!game || !game->item || game->item != item) return; + if (QTableWidgetItem* size_item = this->item(static_cast(game->item)->row(), static_cast(gui::game_list_columns::dir_size))) { const u64& game_size = game->info.size_on_disk; size_item->setText(game_size != umax ? gui::utils::format_byte_size(game_size) : tr("Unknown")); @@ -52,9 +52,9 @@ game_list_table::game_list_table(game_list_frame* frame, std::shared_ptrimage_change_callback(); + if (game && item && game->item == item) item->image_change_callback(); }); } @@ -284,7 +284,7 @@ void game_list_table::populate( if (!cancel || !cancel->load()) { - Q_EMIT size_on_disk_ready(game); + Q_EMIT size_on_disk_ready(game, game->item); return; } } diff --git a/rpcs3/rpcs3qt/game_list_table.h b/rpcs3/rpcs3qt/game_list_table.h index e3d6930342..4c185fcc61 100644 --- a/rpcs3/rpcs3qt/game_list_table.h +++ b/rpcs3/rpcs3qt/game_list_table.h @@ -34,7 +34,7 @@ public: void repaint_icons(std::vector& game_data, const QColor& icon_color, const QSize& icon_size, qreal device_pixel_ratio) override; Q_SIGNALS: - void size_on_disk_ready(const game_info& game); + void size_on_disk_ready(const game_info& game, movie_item_base* item); private: game_list_frame* m_game_list_frame{};