overlays: Fix UX issues with dropdowns

- Select button resets the value to default
- Audio cues play correctly
This commit is contained in:
kd-11 2026-03-17 01:20:42 +03:00 committed by kd-11
parent 6e6dd603cb
commit aaf441005a

View File

@ -10,6 +10,8 @@ namespace rsx
{ {
namespace overlays namespace overlays
{ {
void play_sound(sound_effect sound, std::optional<f32> volume);
struct home_menu_settings : public home_menu_page struct home_menu_settings : public home_menu_page
{ {
public: public:
@ -81,13 +83,22 @@ namespace rsx
add_item(elem, [this, setting, elem = elem.get()](pad_button btn) -> page_navigation 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; 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; return page_navigation::stay;
} }
@ -106,9 +117,27 @@ namespace rsx
if (!setting || result != page_navigation::exit) 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; 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 auto previous = fmt::format("%s", setting->get());
const std::vector<std::string> list = setting->to_list(); const std::vector<std::string> list = setting->to_list();
const int selected_idx = dropdown->get_selected_index(); const int selected_idx = dropdown->get_selected_index();