From bdac1d9bfdcb3674f439a3737881efab5a8d137e Mon Sep 17 00:00:00 2001 From: Megamouse Date: Sun, 18 Apr 2021 09:37:32 +0200 Subject: [PATCH] Qt: fix type mismatch crash of game grid items --- rpcs3/rpcs3qt/game_list.cpp | 7 +++++++ rpcs3/rpcs3qt/game_list.h | 3 +++ rpcs3/rpcs3qt/game_list_frame.cpp | 11 +++++------ rpcs3/rpcs3qt/game_list_grid.cpp | 2 +- rpcs3/rpcs3qt/game_list_grid.h | 2 +- rpcs3/rpcs3qt/trophy_manager_dialog.cpp | 2 +- rpcs3/rpcs3qt/trophy_manager_dialog.h | 3 ++- 7 files changed, 20 insertions(+), 10 deletions(-) diff --git a/rpcs3/rpcs3qt/game_list.cpp b/rpcs3/rpcs3qt/game_list.cpp index d67378d4ad..7db7818a31 100644 --- a/rpcs3/rpcs3qt/game_list.cpp +++ b/rpcs3/rpcs3qt/game_list.cpp @@ -1,6 +1,13 @@ #include "game_list.h" #include "movie_item.h" +void game_list::clear_list() +{ + m_last_hover_item = nullptr; + clearSelection(); + clearContents(); +} + void game_list::mousePressEvent(QMouseEvent *event) { if (!indexAt(event->pos()).isValid() || !itemAt(event->pos())->data(Qt::UserRole).isValid()) diff --git a/rpcs3/rpcs3qt/game_list.h b/rpcs3/rpcs3qt/game_list.h index dc40c65036..d932f45146 100644 --- a/rpcs3/rpcs3qt/game_list.h +++ b/rpcs3/rpcs3qt/game_list.h @@ -31,6 +31,9 @@ class movie_item; */ class game_list : public QTableWidget { +public: + void clear_list(); // Use this instead of clearContents + protected: movie_item* m_last_hover_item = nullptr; diff --git a/rpcs3/rpcs3qt/game_list_frame.cpp b/rpcs3/rpcs3qt/game_list_frame.cpp index 0413c1a8a4..e21af8f963 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -2091,8 +2091,7 @@ void game_list_frame::PopulateGameList() const std::string selected_item = CurrentSelectionPath(); - m_game_list->clearSelection(); - m_game_list->clearContents(); + m_game_list->clear_list(); m_game_list->setRowCount(m_game_data.size()); // Default locale. Uses current Qt application language. @@ -2296,7 +2295,7 @@ void game_list_frame::PopulateGameGrid(int maxCols, const QSize& image_size, con const QString title = m_titles.value(serial, qstr(app->info.name)); const QString notes = m_notes.value(serial); - QTableWidgetItem* item = m_game_grid->addItem(app, title, (m_play_hover_movies && app->has_hover_gif) ? (game_icon_path % serial % "/hover.gif") : QStringLiteral(""), r, c); + movie_item* item = m_game_grid->addItem(app, title, (m_play_hover_movies && app->has_hover_gif) ? (game_icon_path % serial % "/hover.gif") : QStringLiteral(""), r, c); ensure(item); item->setData(gui::game_role, QVariant::fromValue(app)); @@ -2325,9 +2324,9 @@ void game_list_frame::PopulateGameGrid(int maxCols, const QSize& image_size, con { // if left over games exist -- if empty entries exist for (int col = c; col < maxCols; ++col) { - QTableWidgetItem* emptyItem = new QTableWidgetItem(); - emptyItem->setFlags(Qt::NoItemFlags); - m_game_grid->setItem(r, col, emptyItem); + movie_item* empty_item = new movie_item(); + empty_item->setFlags(Qt::NoItemFlags); + m_game_grid->setItem(r, col, empty_item); } } diff --git a/rpcs3/rpcs3qt/game_list_grid.cpp b/rpcs3/rpcs3qt/game_list_grid.cpp index 9723acee3e..ee4e8aba28 100644 --- a/rpcs3/rpcs3qt/game_list_grid.cpp +++ b/rpcs3/rpcs3qt/game_list_grid.cpp @@ -59,7 +59,7 @@ void game_list_grid::setIconSize(const QSize& size) const } } -QTableWidgetItem* game_list_grid::addItem(const game_info& app, const QString& name, const QString& movie_path, const int& row, const int& col) +movie_item* game_list_grid::addItem(const game_info& app, const QString& name, const QString& movie_path, const int& row, const int& col) { // create item with expanded image, title and position movie_item* item = new movie_item; diff --git a/rpcs3/rpcs3qt/game_list_grid.h b/rpcs3/rpcs3qt/game_list_grid.h index 68753b2236..dc5b336662 100644 --- a/rpcs3/rpcs3qt/game_list_grid.h +++ b/rpcs3/rpcs3qt/game_list_grid.h @@ -19,7 +19,7 @@ public: void enableText(const bool& enabled); void setIconSize(const QSize& size) const; - QTableWidgetItem* addItem(const game_info& app, const QString& name, const QString& movie_path, const int& row, const int& col); + movie_item* addItem(const game_info& app, const QString& name, const QString& movie_path, const int& row, const int& col); [[nodiscard]] qreal getMarginFactor() const; diff --git a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp index a04fbeb8ff..2c362bf7b3 100644 --- a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp @@ -783,7 +783,7 @@ void trophy_manager_dialog::PopulateTrophyTable() m_game_progress->setText(tr("Progress: %1% (%2/%3)").arg(percentage).arg(unlocked_trophies).arg(all_trophies)); - m_trophy_table->clearContents(); + m_trophy_table->clear_list(); m_trophy_table->setRowCount(all_trophies); m_trophy_table->setSortingEnabled(false); // Disable sorting before using setItem calls diff --git a/rpcs3/rpcs3qt/trophy_manager_dialog.h b/rpcs3/rpcs3qt/trophy_manager_dialog.h index c15b37beb6..4f32576122 100644 --- a/rpcs3/rpcs3qt/trophy_manager_dialog.h +++ b/rpcs3/rpcs3qt/trophy_manager_dialog.h @@ -12,6 +12,7 @@ #include +class game_list; class gui_settings; class TROPUSRLoader; @@ -96,7 +97,7 @@ private: QComboBox* m_game_combo; //! Lets you choose a game QLabel* m_game_progress; //! Shows you the current game's progress QSplitter* m_splitter; //! Contains the game and trophy tables - QTableWidget* m_trophy_table; //! UI element to display trophy stuff. + game_list* m_trophy_table; //! UI element to display trophy stuff. QTableWidget* m_game_table; //! UI element to display games. bool m_show_hidden_trophies = false;