diff --git a/rpcs3/rpcs3qt/game_list_frame.cpp b/rpcs3/rpcs3qt/game_list_frame.cpp index efb13d17cf..edbe0ed408 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -617,6 +617,7 @@ void game_list_frame::ShowSpecifiedContextMenu(const QPoint &pos, int row) myMenu.addSeparator(); QAction* removeGame = myMenu.addAction(tr("&Remove")); QAction* removeConfig = myMenu.addAction(tr("&Remove Custom Configuration")); + QAction* deleteShadersCache = myMenu.addAction(tr("&Delete Shaders Cache")); myMenu.addSeparator(); QAction* openGameFolder = myMenu.addAction(tr("&Open Install Folder")); QAction* openConfig = myMenu.addAction(tr("&Open Config Folder")); @@ -642,7 +643,9 @@ void game_list_frame::ShowSpecifiedContextMenu(const QPoint &pos, int row) Refresh(); } }); + connect(removeConfig, &QAction::triggered, [=]() {RemoveCustomConfiguration(row); Refresh(true, false); }); + connect(deleteShadersCache, &QAction::triggered, [=]() { DeleteShadersCache(row); }); connect(openGameFolder, &QAction::triggered, [=]() {open_dir(currGame.path); }); connect(openConfig, &QAction::triggered, [=]() {open_dir(fs::get_config_dir() + "data/" + currGame.serial); }); connect(checkCompat, &QAction::triggered, [=]() { @@ -722,6 +725,32 @@ void game_list_frame::RemoveCustomConfiguration(int row) } } +void game_list_frame::DeleteShadersCache(int row) +{ + if (QMessageBox::question(this, tr("Confirm Delete"), tr("Delete shaders cache?")) != QMessageBox::Yes) + return; + + const std::string config_base_dir = fs::get_config_dir() + "data/" + m_game_data[row].info.serial; + + if (fs::is_dir(config_base_dir)) + { + fs::dir root = fs::dir(config_base_dir); + fs::dir_entry tmp; + + while (root.read(tmp)) + { + if (!fs::is_dir(config_base_dir + "/" + tmp.name)) + continue; + + const std::string shader_cache_name = config_base_dir + "/" + tmp.name + "/shaders_cache"; + if (fs::is_dir(shader_cache_name)) + { + fs::remove_all(shader_cache_name, true); + } + } + } +} + QPixmap game_list_frame::PaintedPixmap(const QImage& img, bool paintConfigIcon) { QImage scaled = QImage(m_Icon_Size, QImage::Format_ARGB32); diff --git a/rpcs3/rpcs3qt/game_list_frame.h b/rpcs3/rpcs3qt/game_list_frame.h index 0009d3c6dc..74974ca335 100644 --- a/rpcs3/rpcs3qt/game_list_frame.h +++ b/rpcs3/rpcs3qt/game_list_frame.h @@ -216,6 +216,7 @@ public Q_SLOTS: private Q_SLOTS: void RemoveCustomConfiguration(int row); + void DeleteShadersCache(int row); void OnColClicked(int col); void ShowContextMenu(const QPoint &pos); void ShowSpecifiedContextMenu(const QPoint &pos, int index); // Different name because the notation for overloaded connects is messy