(XMB/Ozone) Fix thumbnail switching via 'scan' button functionality

This commit is contained in:
jdgleaver 2020-03-24 14:28:01 +00:00
parent 9729b5a917
commit b5d9ed60e7
2 changed files with 81 additions and 49 deletions

View File

@ -108,63 +108,53 @@ int action_switch_thumbnail(const char *path,
{
const char *menu_ident = menu_driver_ident();
settings_t *settings = config_get_ptr();
bool special_case = false;
bool switch_enabled = true;
#ifdef HAVE_RGUI
special_case = !string_is_equal(menu_ident, "rgui");
switch_enabled = !string_is_equal(menu_ident, "rgui");
#endif
#ifdef HAVE_MATERIALUI
special_case = special_case && !string_is_equal(menu_ident, "glui");
switch_enabled = switch_enabled && !string_is_equal(menu_ident, "glui");
#endif
if (!settings)
return -1;
/* RGUI is a special case where thumbnail 'switch' corresponds to
* toggling thumbnail view on/off.
* GLUI is a special case where thumbnail 'switch' corresponds to
* changing thumbnail view mode.
* For other menu drivers, we cycle through available thumbnail
* types. */
if (!switch_enabled)
return 0;
if (settings->uints.gfx_thumbnails == 0)
{
/* RGUI is a special case where thumbnail 'switch' corresponds to
* toggling thumbnail view on/off.
* GLUI is a special case where thumbnail 'switch' corresponds to
* changing thumbnail view mode.
* For other menu drivers, we cycle through available thumbnail
* types. */
if (special_case)
{
configuration_set_uint(settings,
settings->uints.menu_left_thumbnails,
settings->uints.menu_left_thumbnails + 1);
configuration_set_uint(settings,
settings->uints.menu_left_thumbnails,
settings->uints.menu_left_thumbnails + 1);
if (settings->uints.menu_left_thumbnails > 3)
{
configuration_set_uint(settings,
settings->uints.menu_left_thumbnails, 1);
}
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, NULL);
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE, NULL);
}
}
else
{
/* RGUI is a special case where thumbnail 'switch' corresponds to
* toggling thumbnail view on/off.
* GLUI is a special case where thumbnail 'switch' corresponds to
* changing thumbnail view mode.
* For other menu drivers, we cycle through available thumbnail
* types. */
if (special_case)
{
if (settings->uints.menu_left_thumbnails > 3)
configuration_set_uint(settings,
settings->uints.menu_left_thumbnails,
settings->uints.menu_left_thumbnails + 1);
settings->uints.menu_left_thumbnails, 1);
if (settings->uints.gfx_thumbnails > 3)
{
configuration_set_uint(settings,
settings->uints.gfx_thumbnails, 1);
}
}
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, NULL);
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE, NULL);
}
else
{
configuration_set_uint(settings,
settings->uints.gfx_thumbnails,
settings->uints.gfx_thumbnails + 1);
if (settings->uints.gfx_thumbnails > 3)
configuration_set_uint(settings,
settings->uints.gfx_thumbnails, 1);
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, NULL);
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE, NULL);
}
return 0;
}

View File

@ -4698,7 +4698,7 @@ static void rgui_scan_selected_entry_thumbnail(rgui_t *rgui, bool force_load)
}
}
static void rgui_update_thumbnail_image(void *userdata)
static void rgui_toggle_fs_thumbnail(void *userdata)
{
rgui_t *rgui = (rgui_t*)userdata;
settings_t *settings = config_get_ptr();
@ -4961,6 +4961,11 @@ static int rgui_environ(enum menu_environ_cb type,
return -1;
}
/* Forward declaration */
static int rgui_menu_entry_action(
void *userdata, menu_entry_t *entry,
size_t i, enum menu_action action);
static int rgui_pointer_up(void *data,
unsigned x, unsigned y, unsigned ptr,
enum menu_input_pointer_gesture gesture,
@ -4993,20 +4998,20 @@ static int rgui_pointer_up(void *data,
* - A normal mouse press should just select the current
* entry (for which the thumbnail is being shown) */
if (y < header_height)
rgui_update_thumbnail_image(rgui);
rgui_toggle_fs_thumbnail(rgui);
else
return menu_entry_action(entry, selection, MENU_ACTION_SELECT);
return rgui_menu_entry_action(rgui, entry, selection, MENU_ACTION_SELECT);
}
else
{
if (y < header_height)
return menu_entry_action(entry, selection, MENU_ACTION_CANCEL);
return rgui_menu_entry_action(rgui, entry, selection, MENU_ACTION_CANCEL);
else if (ptr <= (menu_entries_get_size() - 1))
{
/* If currently selected item matches 'pointer' value,
* perform a MENU_ACTION_SELECT on it */
if (ptr == selection)
return menu_entry_action(entry, selection, MENU_ACTION_SELECT);
return rgui_menu_entry_action(rgui, entry, selection, MENU_ACTION_SELECT);
/* Otherwise, just move the current selection to the
* 'pointer' value */
@ -5020,7 +5025,7 @@ static int rgui_pointer_up(void *data,
/* 'Reset to default' action */
if ((ptr <= (menu_entries_get_size() - 1)) &&
(ptr == selection))
return menu_entry_action(entry, selection, MENU_ACTION_START);
return rgui_menu_entry_action(rgui, entry, selection, MENU_ACTION_START);
break;
default:
/* Ignore input */
@ -5265,6 +5270,43 @@ static void rgui_context_destroy(void *data)
}
#endif
static enum menu_action rgui_parse_menu_entry_action(
rgui_t *rgui, enum menu_action action)
{
enum menu_action new_action = action;
/* Scan user inputs */
switch (action)
{
case MENU_ACTION_SCAN:
/* 'Scan' command is used to toggle
* fullscreen thumbnail view */
rgui_toggle_fs_thumbnail(rgui);
new_action = MENU_ACTION_NOOP;
break;
default:
/* In all other cases, pass through input
* menu action without intervention */
break;
}
return new_action;
}
/* Menu entry action callback */
static int rgui_menu_entry_action(
void *userdata, menu_entry_t *entry,
size_t i, enum menu_action action)
{
rgui_t *rgui = (rgui_t*)userdata;
/* Process input action */
enum menu_action new_action = rgui_parse_menu_entry_action(rgui, action);
/* Call standard generic_menu_entry_action() function */
return generic_menu_entry_action(userdata, entry, i, new_action);
}
menu_ctx_driver_t menu_ctx_rgui = {
rgui_set_texture,
rgui_set_message,
@ -5305,7 +5347,7 @@ menu_ctx_driver_t menu_ctx_rgui = {
"rgui",
rgui_environ,
NULL, /* update_thumbnail_path */
rgui_update_thumbnail_image,
NULL, /* update_thumbnail_image */
rgui_refresh_thumbnail_image,
rgui_set_thumbnail_system,
rgui_get_thumbnail_system,
@ -5316,5 +5358,5 @@ menu_ctx_driver_t menu_ctx_rgui = {
NULL, /* pointer_down */
rgui_pointer_up,
NULL, /* get_load_content_animation_data */
generic_menu_entry_action
rgui_menu_entry_action
};