diff --git a/driver_menu.h b/driver_menu.h index 8c4a32dd09..3ac999c4a6 100644 --- a/driver_menu.h +++ b/driver_menu.h @@ -118,6 +118,7 @@ typedef struct { const char **buffer; const char *label; + const char *label_setting; bool display; } keyboard; diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 7c4b99aa17..e28dbf4b2a 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -1976,7 +1976,7 @@ static void menu_common_setting_set_current_unsigned_integer(rarch_setting_t *se if (!strcmp(setting->name, "netplay_tcp_udp_port")) { if (action == MENU_ACTION_OK) - menu_key_start_line(driver.menu, "TCP/UDP Port: ", netplay_port_callback); + menu_key_start_line(driver.menu, "TCP/UDP Port: ", setting->name, st_uint_callback); else if (action == MENU_ACTION_START) *setting->value.unsigned_integer = setting->default_value.unsigned_integer; } @@ -3413,7 +3413,7 @@ static int menu_common_setting_set(unsigned id, unsigned action, rarch_setting_t break; case MENU_SETTINGS_DRIVER_AUDIO_DEVICE: if (action == MENU_ACTION_OK) - menu_key_start_line(driver.menu, "Audio Device Name / IP: ", audio_device_callback); + menu_key_start_line(driver.menu, "Audio Device Name / IP: ", "audio_device", audio_device_callback); else if (action == MENU_ACTION_START) *g_settings.audio.device = '\0'; break; @@ -3621,7 +3621,7 @@ static int menu_common_setting_set(unsigned id, unsigned action, rarch_setting_t } case MENU_SETTINGS_SHADER_PRESET_SAVE: if (action == MENU_ACTION_OK) - menu_key_start_line(driver.menu, "Preset Filename: ", preset_filename_callback); + menu_key_start_line(driver.menu, "Preset Filename: ", "shader_preset_save", preset_filename_callback); break; #endif #ifdef _XBOX1 @@ -3668,14 +3668,14 @@ static int menu_common_setting_set(unsigned id, unsigned action, rarch_setting_t #ifdef HAVE_NETPLAY case MENU_SETTINGS_NETPLAY_HOST_IP_ADDRESS: if (action == MENU_ACTION_OK) - menu_key_start_line(driver.menu, "IP Address: ", netplay_ipaddress_callback); + menu_key_start_line(driver.menu, "IP Address: ", "netplay_ip_address", netplay_ipaddress_callback); else if (action == MENU_ACTION_START) *g_extern.netplay_server = '\0'; break; #endif case MENU_SETTINGS_NETPLAY_NICKNAME: if (action == MENU_ACTION_OK) - menu_key_start_line(driver.menu, "Username: ", netplay_nickname_callback); + menu_key_start_line(driver.menu, "Username: ", "netplay_nickname", st_string_callback); else if (action == MENU_ACTION_START) *g_settings.username = '\0'; break; diff --git a/frontend/menu/menu_input_line_cb.c b/frontend/menu/menu_input_line_cb.c index 47afc517d5..e976a2ad2c 100644 --- a/frontend/menu/menu_input_line_cb.c +++ b/frontend/menu/menu_input_line_cb.c @@ -34,16 +34,17 @@ void menu_common_setting_set_current_string(rarch_setting_t *setting, const char *str); void menu_key_start_line(void *data, const char *label, - input_keyboard_line_complete_t cb) + const char *label_setting, input_keyboard_line_complete_t cb) { menu_handle_t *menu = (menu_handle_t*)data; if (!menu) return; - menu->keyboard.display = true; - menu->keyboard.label = label; - menu->keyboard.buffer = input_keyboard_start_line(menu, cb); + menu->keyboard.display = true; + menu->keyboard.label = label; + menu->keyboard.label_setting = label_setting; + menu->keyboard.buffer = input_keyboard_start_line(menu, cb); } static void menu_key_end_line(void *data) @@ -53,8 +54,9 @@ static void menu_key_end_line(void *data) if (!menu) return; - menu->keyboard.display = false; - menu->keyboard.label = NULL; + menu->keyboard.display = false; + menu->keyboard.label = NULL; + menu->keyboard.label_setting = NULL; /* Avoid triggering states on pressing return. */ menu->old_input_state = -1ULL; @@ -69,7 +71,7 @@ static void menu_search_callback(void *userdata, const char *str) menu_key_end_line(menu); } -void netplay_port_callback(void *userdata, const char *str) +void st_uint_callback(void *userdata, const char *str) { menu_handle_t *menu = (menu_handle_t*)userdata; rarch_setting_t *current_setting = NULL; @@ -77,12 +79,26 @@ void netplay_port_callback(void *userdata, const char *str) if (str && *str && setting_data) { - if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, "netplay_tcp_udp_port"))) + if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, menu->keyboard.label_setting))) *current_setting->value.unsigned_integer = strtoul(str, NULL, 0); } menu_key_end_line(menu); } +void st_string_callback(void *userdata, const char *str) +{ + menu_handle_t *menu = (menu_handle_t*)userdata; + rarch_setting_t *current_setting = NULL; + rarch_setting_t *setting_data = (rarch_setting_t *)setting_data_get_list(); + + if (str && *str && setting_data) + { + if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, menu->keyboard.label_setting))) + menu_common_setting_set_current_string(current_setting, str); + } + menu_key_end_line(menu); +} + #ifdef HAVE_NETPLAY void netplay_ipaddress_callback(void *userdata, const char *str) { @@ -94,30 +110,11 @@ void netplay_ipaddress_callback(void *userdata, const char *str) } #endif -void netplay_nickname_callback(void *userdata, const char *str) -{ - menu_handle_t *menu = (menu_handle_t*)userdata; - rarch_setting_t *current_setting = NULL; - rarch_setting_t *setting_data = (rarch_setting_t *)setting_data_get_list(); - - if (str && *str && setting_data) - { - if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, "netplay_nickname"))) - menu_common_setting_set_current_string(current_setting, str); - } - menu_key_end_line(menu); -} void audio_device_callback(void *userdata, const char *str) { menu_handle_t *menu = (menu_handle_t*)userdata; - if (!menu) - { - RARCH_ERR("Cannot invoke audio device setting callback, menu handle is not initialized.\n"); - return; - } - if (str && *str) strlcpy(g_settings.audio.device, str, sizeof(g_settings.audio.device)); menu_key_end_line(menu); @@ -128,12 +125,6 @@ void preset_filename_callback(void *userdata, const char *str) { menu_handle_t *menu = (menu_handle_t*)userdata; - if (!menu) - { - RARCH_ERR("Cannot invoke preset setting callback, menu handle is not initialized.\n"); - return; - } - if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->shader_manager_save_preset) driver.menu_ctx->backend->shader_manager_save_preset(str && *str ? str : NULL, false); diff --git a/frontend/menu/menu_input_line_cb.h b/frontend/menu/menu_input_line_cb.h index 7ea25de303..74c9fd4249 100644 --- a/frontend/menu/menu_input_line_cb.h +++ b/frontend/menu/menu_input_line_cb.h @@ -20,13 +20,15 @@ #include "menu_common.h" #include "../../input/keyboard_line.h" -void menu_key_event(bool down, unsigned keycode, uint32_t character, uint16_t key_modifiers); +void menu_key_event(bool down, unsigned keycode, uint32_t character, + uint16_t key_modifiers); +void menu_key_start_line(void *data, const char *label, + const char *label_setting, input_keyboard_line_complete_t cb); -void menu_key_start_line(void *data, const char *label, input_keyboard_line_complete_t cb); +void st_uint_callback(void *userdata, const char *str); +void st_string_callback(void *userdata, const char *str); -void netplay_port_callback(void *userdata, const char *str); void netplay_ipaddress_callback(void *userdata, const char *str); -void netplay_nickname_callback(void *userdata, const char *str); void audio_device_callback(void *userdata, const char *str); void preset_filename_callback(void *userdata, const char *str);