Merge pull request #10826 from jdgleaver/quick-menu-suppress-no-entries

Suppress the display of 'empty' quick menu listings when closing content
This commit is contained in:
Autechre 2020-06-09 16:11:53 +02:00 committed by GitHub
commit 2ac89ec04c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 45 additions and 6 deletions

View File

@ -4431,9 +4431,34 @@ static int action_ok_option_create(const char *path,
int action_ok_close_content(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx)
{
/* This line resets the navigation pointer so the active entry will be "Run" */
int ret;
/* Reset navigation pointer
* > If we are returning to the quick menu, want
* the active entry to be 'Run' (first item in
* menu list) */
menu_navigation_set_selection(0);
return generic_action_ok_command(CMD_EVENT_UNLOAD_CORE);
/* Unload core */
ret = generic_action_ok_command(CMD_EVENT_UNLOAD_CORE);
/* If close content was selected via 'Main Menu > Quick Menu',
* have to flush the menu stack back to 'Main Menu'
* (otherwise users will be presented with an empty
* 'No items' quick menu, requiring needless backwards
* navigation) */
if (type == MENU_SETTING_ACTION_CLOSE)
{
menu_entries_flush_stack(msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU), 0);
/* An annoyance - some menu drivers (Ozone...) call
* RARCH_MENU_CTL_SET_PREVENT_POPULATE in awkward
* places, which can cause breakage here when flushing
* the menu stack. We therefore have to force a
* RARCH_MENU_CTL_UNSET_PREVENT_POPULATE */
menu_driver_ctl(RARCH_MENU_CTL_UNSET_PREVENT_POPULATE, NULL);
}
return ret;
}
DEFAULT_ACTION_OK_CMD_FUNC(action_ok_cheat_apply_changes, CMD_EVENT_CHEATS_APPLY)

View File

@ -371,6 +371,7 @@ uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_RESUME];
case MENU_SETTING_ACTION_CLOSE:
case MENU_SETTING_ACTION_CLOSE_HORIZONTAL:
case MENU_SETTING_ACTION_DELETE_ENTRY:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CLOSE];
case MENU_SETTING_ACTION_SAVESTATE:

View File

@ -2245,6 +2245,7 @@ static uintptr_t stripes_icon_get_id(stripes_handle_t *stripes,
case MENU_SETTING_ACTION_RUN:
return stripes->textures.list[STRIPES_TEXTURE_RUN];
case MENU_SETTING_ACTION_CLOSE:
case MENU_SETTING_ACTION_CLOSE_HORIZONTAL:
return stripes->textures.list[STRIPES_TEXTURE_CLOSE];
case MENU_SETTING_ACTION_SAVESTATE:
return stripes->textures.list[STRIPES_TEXTURE_SAVESTATE];

View File

@ -2769,6 +2769,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS:
return xmb->textures.list[XMB_TEXTURE_RESUME];
case MENU_SETTING_ACTION_CLOSE:
case MENU_SETTING_ACTION_CLOSE_HORIZONTAL:
case MENU_SETTING_ACTION_DELETE_ENTRY:
return xmb->textures.list[XMB_TEXTURE_CLOSE];
case MENU_SETTING_ACTION_SAVESTATE:

View File

@ -1974,7 +1974,7 @@ static int menu_displaylist_parse_horizontal_list(
}
static int menu_displaylist_parse_load_content_settings(
file_list_t *list)
file_list_t *list, bool horizontal)
{
unsigned count = 0;
settings_t *settings = config_get_ptr();
@ -2004,12 +2004,22 @@ static int menu_displaylist_parse_load_content_settings(
MENU_SETTING_ACTION_RUN, 0, 0))
count++;
/* Note: Entry type depends on whether quick menu
* was accessed via a playlist ('horizontal content')
* or the main menu
* > This allows us to identify a close content event
* triggered via 'Main Menu > Quick Menu', which
* subsequently requires the menu stack to be flushed
* in order to prevent the display of an empty
* 'No items' menu */
if (settings->bools.quick_menu_show_close_content)
if (menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT),
msg_hash_to_str(MENU_ENUM_LABEL_CLOSE_CONTENT),
MENU_ENUM_LABEL_CLOSE_CONTENT,
MENU_SETTING_ACTION_CLOSE, 0, 0))
horizontal ? MENU_SETTING_ACTION_CLOSE_HORIZONTAL :
MENU_SETTING_ACTION_CLOSE,
0, 0))
count++;
if (settings->bools.quick_menu_show_take_screenshot)
@ -2288,7 +2298,7 @@ static int menu_displaylist_parse_horizontal_content_actions(
if (content_loaded)
{
if (menu_displaylist_parse_load_content_settings(info->list) == 0)
if (menu_displaylist_parse_load_content_settings(info->list, true) == 0)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ITEMS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS),
@ -4594,7 +4604,7 @@ unsigned menu_displaylist_build_list(
#endif
break;
case DISPLAYLIST_CONTENT_SETTINGS:
count = menu_displaylist_parse_load_content_settings(list);
count = menu_displaylist_parse_load_content_settings(list, false);
if (count == 0)
if (menu_entries_append_enum(list,

View File

@ -96,6 +96,7 @@ enum menu_settings_type
MENU_SETTING_ACTION,
MENU_SETTING_ACTION_RUN,
MENU_SETTING_ACTION_CLOSE,
MENU_SETTING_ACTION_CLOSE_HORIZONTAL,
MENU_SETTING_ACTION_CORE_OPTIONS,
MENU_SETTING_ACTION_CORE_INPUT_REMAPPING_OPTIONS,
MENU_SETTING_ACTION_CORE_CHEAT_OPTIONS,