summaryrefslogtreecommitdiffstats
path: root/src/frontend/mame/ui/selgame.cpp
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2021-11-24 11:19:55 +1100
committer Robbbert <Robbbert@users.noreply.github.com>2021-11-24 11:19:55 +1100
commit44a5a57d0eefc1aeafb00d42f91e2100e186a71c (patch)
tree2e7003802b9568c5820db3362a10a599b6074025 /src/frontend/mame/ui/selgame.cpp
parentae8adeb04212102a7f8587ef4388156140e21ab0 (diff)
parent4518f0eadeb4482ba01ab5add75d6eae921ce571 (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/frontend/mame/ui/selgame.cpp')
-rw-r--r--src/frontend/mame/ui/selgame.cpp24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp
index e555bdfc15b..d52274a6cb9 100644
--- a/src/frontend/mame/ui/selgame.cpp
+++ b/src/frontend/mame/ui/selgame.cpp
@@ -337,10 +337,13 @@ void menu_select_game::populate(float &customtop, float &custombottom)
icon.second.texture.reset();
set_switch_image();
- int old_item_selected = -1;
+ bool have_prev_selected = false;
+ int old_item_selected = -1;
if (!isfavorite())
{
+ if (m_populated_favorites)
+ m_prev_selected = nullptr;
m_populated_favorites = false;
m_displaylist.clear();
machine_filter const *const flt(m_persistent_data.filter_data().get_current_filter());
@@ -389,7 +392,8 @@ void menu_select_game::populate(float &customtop, float &custombottom)
int curitem = 0;
for (ui_system_info const &elem : m_displaylist)
{
- if (old_item_selected == -1 && elem.driver->name == reselect_last::driver())
+ have_prev_selected = have_prev_selected || (&elem == m_prev_selected);
+ if ((old_item_selected == -1) && (elem.driver->name == reselect_last::driver()))
old_item_selected = curitem;
item_append(elem.description, elem.is_clone ? FLAG_INVERT : 0, (void *)&elem);
@@ -399,11 +403,14 @@ void menu_select_game::populate(float &customtop, float &custombottom)
else
{
// populate favorites list
+ if (!m_populated_favorites)
+ m_prev_selected = nullptr;
m_populated_favorites = true;
m_search.clear();
mame_machine_manager::instance()->favorite().apply_sorted(
- [this, &old_item_selected, curitem = 0] (ui_software_info const &info) mutable
+ [this, &have_prev_selected, &old_item_selected, curitem = 0] (ui_software_info const &info) mutable
{
+ have_prev_selected = have_prev_selected || (&info == m_prev_selected);
if (info.startempty)
{
if (old_item_selected == -1 && info.shortname == reselect_last::driver())
@@ -412,8 +419,8 @@ void menu_select_game::populate(float &customtop, float &custombottom)
bool cloneof = strcmp(info.driver->parent, "0");
if (cloneof)
{
- int cx = driver_list::find(info.driver->parent);
- if (cx != -1 && ((driver_list::driver(cx).flags & machine_flags::IS_BIOS_ROOT) != 0))
+ int const cx = driver_list::find(info.driver->parent);
+ if ((0 <= cx) && ((driver_list::driver(cx).flags & machine_flags::IS_BIOS_ROOT) != 0))
cloneof = false;
}
@@ -436,6 +443,9 @@ void menu_select_game::populate(float &customtop, float &custombottom)
item_append(_("Configure Options"), 0, (void *)(uintptr_t)CONF_OPTS);
item_append(_("Configure Machine"), 0, (void *)(uintptr_t)CONF_MACHINE);
skip_main_items = 3;
+
+ if (m_prev_selected && !have_prev_selected)
+ m_prev_selected = item(0).ref();
}
else
{
@@ -1036,7 +1046,7 @@ void menu_select_game::get_selection(ui_software_info const *&software, ui_syste
if (m_populated_favorites)
{
software = reinterpret_cast<ui_software_info const *>(get_selection_ptr());
- system = &m_persistent_data.systems()[driver_list::find(software->driver->name)];
+ system = software ? &m_persistent_data.systems()[driver_list::find(software->driver->name)] : nullptr;
}
else
{
@@ -1100,7 +1110,7 @@ void menu_select_game::filter_selected()
}
}
m_persistent_data.filter_data().set_current_filter_type(new_type);
- reset(reset_options::SELECT_FIRST);
+ reset(reset_options::REMEMBER_REF);
});
}
}