From aaf441005a7189c04b24330cfb0ca8c6c2017c1d Mon Sep 17 00:00:00 2001 From: kd-11 Date: Tue, 17 Mar 2026 01:20:42 +0300 Subject: [PATCH] overlays: Fix UX issues with dropdowns - Select button resets the value to default - Audio cues play correctly --- .../HomeMenu/overlay_home_menu_settings.h | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h index c5cb70f694..13f47eb41e 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h @@ -10,6 +10,8 @@ namespace rsx { namespace overlays { + void play_sound(sound_effect sound, std::optional volume); + struct home_menu_settings : public home_menu_page { public: @@ -81,13 +83,22 @@ namespace rsx add_item(elem, [this, setting, elem = elem.get()](pad_button btn) -> page_navigation { - if (btn != pad_button::cross) + if (!setting) { + // Nothing we can do with this return page_navigation::stay; } - if (!setting) + switch (btn) { + case pad_button::cross: + // We process only 'accept' inputs. The rest are handled by the popup hook. + break; + case pad_button::select: + setting->set(setting->def); + rsx_log.notice("User reset the value for setting '%s' to default", setting->get_name()); + return page_navigation::stay; + default: return page_navigation::stay; } @@ -106,9 +117,27 @@ namespace rsx if (!setting || result != page_navigation::exit) { + switch (button) + { + case pad_button::dpad_up: + case pad_button::ls_up: + case pad_button::dpad_down: + case pad_button::ls_down: + play_sound(sound_effect::cursor); + break; + default: + break; + } + return result; } + // We're closing. Check if we should play an accept or reject sound + play_sound( + (button == pad_button::cross) + ? sound_effect::accept + : sound_effect::cancel); + const auto previous = fmt::format("%s", setting->get()); const std::vector list = setting->to_list(); const int selected_idx = dropdown->get_selected_index();