diff --git a/dynamic.c b/dynamic.c index 57860599b6..2a5af5ade5 100644 --- a/dynamic.c +++ b/dynamic.c @@ -700,6 +700,8 @@ bool rarch_environment_cb(unsigned cmd, void *data) } } + g_extern.has_set_input_descriptors = true; + break; } diff --git a/general.h b/general.h index 4e2c94d3cc..5de5819e58 100644 --- a/general.h +++ b/general.h @@ -484,6 +484,7 @@ struct global char gb_rom_path[PATH_MAX]; char bsx_rom_path[PATH_MAX]; char sufami_rom_path[2][PATH_MAX]; + bool has_set_input_descriptors; bool has_set_save_path; bool has_set_state_path; bool has_set_libretro_device[MAX_PLAYERS]; diff --git a/settings.c b/settings.c index b30aa2adf7..989a7cb3bd 100644 --- a/settings.c +++ b/settings.c @@ -442,6 +442,7 @@ static void config_set_defaults(void) g_settings.camera.allow = false; g_settings.input.input_descriptor_label_show = input_descriptor_label_show; + rarch_assert(sizeof(g_settings.input.binds[0]) >= sizeof(retro_keybinds_1)); rarch_assert(sizeof(g_settings.input.binds[1]) >= sizeof(retro_keybinds_rest)); memcpy(g_settings.input.binds[0], retro_keybinds_1, sizeof(retro_keybinds_1)); @@ -1531,6 +1532,9 @@ void config_load(void) g_settings.config_save_on_exit && g_settings.core_specific_config) config_save_file(g_extern.core_specific_config_path); + /* Flush out some states that could have been set by core environment variables */ + g_extern.has_set_input_descriptors = false; + if (!g_extern.block_config_read) { config_set_defaults(); diff --git a/settings_data.c b/settings_data.c index 60d57e9e30..d05b7a4ffb 100644 --- a/settings_data.c +++ b/settings_data.c @@ -4537,10 +4537,13 @@ static bool setting_data_append_list_input_options( if (!keybind || keybind->meta) continue; - if (g_settings.input.input_descriptor_label_show) + if ( + g_settings.input.input_descriptor_label_show + && (i < RARCH_FIRST_CUSTOM_BIND) + && (g_extern.has_set_input_descriptors) + ) snprintf(label, sizeof(label), "%s %s", buffer[player], - g_extern.system.input_desc_btn[player][i] - ? g_extern.system.input_desc_btn[player][i] : keybind->desc); + g_extern.system.input_desc_btn[player][i] ? g_extern.system.input_desc_btn[player][i] : "N/A"); else snprintf(label, sizeof(label), "%s %s", buffer[player], keybind->desc);