From e2e1cf02f4329c78b885c359777bf4de46139da6 Mon Sep 17 00:00:00 2001 From: Florin9doi Date: Sun, 28 Dec 2025 18:03:07 +0200 Subject: [PATCH 1/4] USB: Stop sending USB replies after prx_unload --- rpcs3/Emu/Cell/PPUModule.cpp | 9 +++++++++ rpcs3/Emu/Cell/lv2/sys_usbd.cpp | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/Cell/PPUModule.cpp b/rpcs3/Emu/Cell/PPUModule.cpp index a4b94f5d51..15ff9b1fa8 100644 --- a/rpcs3/Emu/Cell/PPUModule.cpp +++ b/rpcs3/Emu/Cell/PPUModule.cpp @@ -51,6 +51,7 @@ std::unordered_map& ppu_module_manager::get() std::vector g_ppu_function_names; atomic_t liblv2_begin = 0, liblv2_end = 0; +atomic_t libusbd_active = false; extern u32 ppu_generate_id(std::string_view name) { @@ -1928,6 +1929,10 @@ shared_ptr ppu_load_prx(const ppu_prx_object& elf, bool virtual_load, c liblv2_begin = prx->segs[0].addr; liblv2_end = prx->segs[0].addr + prx->segs[0].size; } + if (prx->path.ends_with("sys/external/libusbd.sprx"sv)) + { + libusbd_active = true; + } std::vector applied; @@ -2062,6 +2067,10 @@ void ppu_unload_prx(const lv2_prx& prx) liblv2_begin = 0; liblv2_end = 0; } + if (prx.path.ends_with("sys/external/libusbd.sprx"sv)) + { + libusbd_active = false; + } // Format patch name std::string hash = fmt::format("PRX-%s", fmt::base57(prx.sha1)); diff --git a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp index dca61f3be8..031acd607b 100644 --- a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp @@ -56,6 +56,8 @@ cfg_guncon3 g_cfg_guncon3; cfg_topshotelite g_cfg_topshotelite; cfg_topshotfearmaster g_cfg_topshotfearmaster; +extern atomic_t libusbd_active; + template <> void fmt_class_string::format(std::string& out, u64 arg) { @@ -661,7 +663,7 @@ void usb_handler_thread::operator()() u64 delay = 1'000; // Process fake transfers - if (!fake_transfers.empty()) + if (libusbd_active && !fake_transfers.empty()) { std::lock_guard lock_tf(mutex_transfers); u64 timestamp = get_system_time() - Emu.GetPauseTime(); From f9ffce76f29fac39d8f2f5c427fda5d121576bcf Mon Sep 17 00:00:00 2001 From: Vishrut Sachan Date: Fri, 8 May 2026 00:07:13 +0530 Subject: [PATCH 2/4] game_list: Fix icon display for multi-game collection ISOs --- rpcs3/rpcs3qt/game_list_base.cpp | 2 +- rpcs3/rpcs3qt/qt_utils.cpp | 10 ++++++---- rpcs3/rpcs3qt/qt_utils.h | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/rpcs3/rpcs3qt/game_list_base.cpp b/rpcs3/rpcs3qt/game_list_base.cpp index edae4e51f6..4bc26e0ee4 100644 --- a/rpcs3/rpcs3qt/game_list_base.cpp +++ b/rpcs3/rpcs3qt/game_list_base.cpp @@ -49,7 +49,7 @@ void game_list_base::IconLoadFunction(game_info game, qreal device_pixel_ratio, static std::unordered_set warn_once_list; static shared_mutex s_mtx; - if (game->icon.isNull() && !gui::utils::load_icon(game->icon, game->info.icon_path, game->icon_in_archive ? game->info.path : "")) + if (game->icon.isNull() && !gui::utils::load_icon(game->icon, game->info.icon_path, game->icon_in_archive ? game->info.path : "", game->info.game_dir)) { if (game_list_log.warning) { diff --git a/rpcs3/rpcs3qt/qt_utils.cpp b/rpcs3/rpcs3qt/qt_utils.cpp index 84de92d692..948906fa97 100644 --- a/rpcs3/rpcs3qt/qt_utils.cpp +++ b/rpcs3/rpcs3qt/qt_utils.cpp @@ -705,7 +705,7 @@ namespace gui return QString("%1 days ago %2").arg(current_date - exctrated_date).arg(date.toString(fmt_relative)); } - bool load_iso_icon(QPixmap& icon, const std::string& icon_path, const std::string& archive_path) + bool load_iso_icon(QPixmap& icon, const std::string& icon_path, const std::string& archive_path, const std::string& game_dir) { if (icon_path.empty() || archive_path.empty()) return false; @@ -716,7 +716,9 @@ namespace gui // With the exception of raw device, check cache first — avoids constructing a full iso_archive just for the icon. iso_metadata_cache_entry cache_entry{}; - if (!is_raw_device && iso_cache::load(archive_path, archive_path, cache_entry) && !cache_entry.icon_data.empty()) + const std::string cache_key = game_dir.empty() ? archive_path : archive_path + "//" + game_dir; + + if (!is_raw_device && iso_cache::load(archive_path, cache_key, cache_entry) && !cache_entry.icon_data.empty()) { const QByteArray data(reinterpret_cast(cache_entry.icon_data.data()), static_cast(cache_entry.icon_data.size())); @@ -736,7 +738,7 @@ namespace gui return icon.loadFromData(data); } - bool load_icon(QPixmap& icon, const std::string& icon_path, const std::string& archive_path) + bool load_icon(QPixmap& icon, const std::string& icon_path, const std::string& archive_path, const std::string& game_dir) { if (icon_path.empty()) return false; @@ -745,7 +747,7 @@ namespace gui return icon.load(QString::fromStdString(icon_path)); } - return load_iso_icon(icon, icon_path, archive_path); + return load_iso_icon(icon, icon_path, archive_path, game_dir); } QString format_timestamp(s64 time, const QString& fmt) diff --git a/rpcs3/rpcs3qt/qt_utils.h b/rpcs3/rpcs3qt/qt_utils.h index 22e94109ef..64c98e1079 100644 --- a/rpcs3/rpcs3qt/qt_utils.h +++ b/rpcs3/rpcs3qt/qt_utils.h @@ -193,10 +193,10 @@ namespace gui } // Loads an icon from an (ISO) archive file. - bool load_iso_icon(QPixmap& icon, const std::string& icon_path, const std::string& archive_path); + bool load_iso_icon(QPixmap& icon, const std::string& icon_path, const std::string& archive_path, const std::string& game_dir = {}); // Loads an icon (optionally from an (ISO) archive file). - bool load_icon(QPixmap& icon, const std::string& icon_path, const std::string& archive_path); + bool load_icon(QPixmap& icon, const std::string& icon_path, const std::string& archive_path, const std::string& game_dir = {}); template void stop_future_watcher(QFutureWatcher& watcher, bool cancel, std::shared_ptr> cancel_flag = nullptr) From 98e9b3cf3055b2b60773322497f73ee1af57e170 Mon Sep 17 00:00:00 2001 From: Arsh Kumar Singh Date: Fri, 8 May 2026 19:22:05 +0530 Subject: [PATCH 3/4] Qt: Disambiguate offset direction labels from DPad/Stick labels (#18695) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary The "Left" and "Right" strings in `pad_settings_dialog` were shared between DPad/Stick direction labels (which have ample space) and offset value labels — Squircle Values, Stick Multipliers, and Stick Interpolation (where space is tight). Translators couldn't abbreviate the offset version without also affecting the direction binding labels. ## Change Added disambiguation via `comment="Offset direction"` in the `.ui` file's `` elements for the six offset labels: - `label_squircle_left` - `label_squircle_right` - `label_stick_multi_left` - `label_stick_multi_right` - `left_stick_lerp_label` - `right_stick_lerp_label` Qt now generates separate translation entries, allowing translators to use shorter abbreviations in the tight offset areas while keeping full forms for direction bindings. **English UI is unchanged** — no visual difference for English users. Fixes #18691 --- rpcs3/rpcs3qt/pad_settings_dialog.ui | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.ui b/rpcs3/rpcs3qt/pad_settings_dialog.ui index 62f0bcf4f5..9d7204b3f1 100644 --- a/rpcs3/rpcs3qt/pad_settings_dialog.ui +++ b/rpcs3/rpcs3qt/pad_settings_dialog.ui @@ -2348,7 +2348,7 @@ - Left + Left @@ -2378,7 +2378,7 @@ - Right + Right @@ -2429,7 +2429,7 @@ - Left + Left @@ -2456,7 +2456,7 @@ - Right + Right @@ -2673,7 +2673,7 @@ - Left + Left @@ -2703,7 +2703,7 @@ - Right + Right From c102d1ec0d486a615faca55807e16e06cdc32925 Mon Sep 17 00:00:00 2001 From: Gustavo Graziano Date: Fri, 8 May 2026 11:24:54 -0300 Subject: [PATCH 4/4] =?UTF-8?q?Add=20missing=20hover=20effect=20in=20?= =?UTF-8?q?=E2=80=8EGustavoGraziano's=20theme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/GuiConfigs/Windows 11 (Dark Mode) by GustavoGraziano.qss | 4 ++++ bin/GuiConfigs/Windows 11 (Light Mode) by GustavoGraziano.qss | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/bin/GuiConfigs/Windows 11 (Dark Mode) by GustavoGraziano.qss b/bin/GuiConfigs/Windows 11 (Dark Mode) by GustavoGraziano.qss index 20b8638862..c93a1bb11e 100644 --- a/bin/GuiConfigs/Windows 11 (Dark Mode) by GustavoGraziano.qss +++ b/bin/GuiConfigs/Windows 11 (Dark Mode) by GustavoGraziano.qss @@ -618,6 +618,10 @@ QComboBox QAbstractItemView::item { border-radius: 4px; } +QComboBox QAbstractItemView::item:hover { + background-color: #343434; +} + QComboBox QAbstractItemView::item:selected { background-color: #383838; } diff --git a/bin/GuiConfigs/Windows 11 (Light Mode) by GustavoGraziano.qss b/bin/GuiConfigs/Windows 11 (Light Mode) by GustavoGraziano.qss index 692691856f..f279bd0570 100644 --- a/bin/GuiConfigs/Windows 11 (Light Mode) by GustavoGraziano.qss +++ b/bin/GuiConfigs/Windows 11 (Light Mode) by GustavoGraziano.qss @@ -618,6 +618,10 @@ QComboBox QAbstractItemView::item { border-radius: 4px; } +QComboBox QAbstractItemView::item:hover { + background-color: #F3F3F3; +} + QComboBox QAbstractItemView::item:selected { background-color: #F0F0F0; }