* Fix some DISABLE_MENU issues

* Optimizations to read_keybinds_conf / set_autoconfig_binds -
first fill_pathname_join_delim call always produced the same output and
this was called four times in a row in one loop,  hose out of the
caller functions and move it into the loop and call it once
This commit is contained in:
twinaphex 2021-03-23 01:05:01 +01:00
parent b5d4c5b041
commit 49dc7e6c66

View File

@ -607,6 +607,23 @@ static bool driver_find_next(const char *label, char *s, size_t len)
return false; return false;
} }
void input_keyboard_mapping_bits(unsigned mode, unsigned key)
{
struct rarch_state *p_rarch = &rarch_st;
switch (mode)
{
case 0:
BIT512_CLEAR_PTR(&p_rarch->keyboard_mapping_bits, key);
break;
case 1:
BIT512_SET_PTR(&p_rarch->keyboard_mapping_bits, key);
break;
default:
break;
}
}
#ifdef HAVE_MENU #ifdef HAVE_MENU
static int menu_dialog_iterate( static int menu_dialog_iterate(
menu_dialog_t *p_dialog, menu_dialog_t *p_dialog,
@ -841,22 +858,6 @@ void menu_dialog_set_current_id(unsigned id)
p_dialog->current_id = id; p_dialog->current_id = id;
} }
void input_keyboard_mapping_bits(unsigned mode, unsigned key)
{
struct rarch_state *p_rarch = &rarch_st;
switch (mode)
{
case 0:
BIT512_CLEAR_PTR(&p_rarch->keyboard_mapping_bits, key);
break;
case 1:
BIT512_SET_PTR(&p_rarch->keyboard_mapping_bits, key);
break;
default:
break;
}
}
static bool menu_input_key_bind_custom_bind_keyboard_cb( static bool menu_input_key_bind_custom_bind_keyboard_cb(
void *data, unsigned code) void *data, unsigned code)
{ {
@ -868,13 +869,13 @@ static bool menu_input_key_bind_custom_bind_keyboard_cb(
uint64_t input_bind_timeout_us = settings->uints.input_bind_timeout * 1000000; uint64_t input_bind_timeout_us = settings->uints.input_bind_timeout * 1000000;
/* Clear old mapping bit */ /* Clear old mapping bit */
input_keyboard_mapping_bits(0, binds->buffer.key); BIT512_CLEAR_PTR(&p_rarch->keyboard_mapping_bits, binds->buffer.key);
/* store key in bind */ /* store key in bind */
binds->buffer.key = (enum retro_key)code; binds->buffer.key = (enum retro_key)code;
/* Store new mapping bit */ /* Store new mapping bit */
input_keyboard_mapping_bits(1, binds->buffer.key); BIT512_SET_PTR(&p_rarch->keyboard_mapping_bits, binds->buffer.key);
/* write out the bind */ /* write out the bind */
*(binds->output) = binds->buffer; *(binds->output) = binds->buffer;
@ -9919,6 +9920,29 @@ bool gfx_widgets_ready(void)
#endif #endif
} }
static void osk_update_last_codepoint(
unsigned *last_codepoint,
unsigned *last_codepoint_len,
const char *word)
{
const char *letter = word;
const char *pos = letter;
for (;;)
{
unsigned codepoint = utf8_walk(&letter);
if (letter[0] == 0)
{
*last_codepoint = codepoint;
*last_codepoint_len = (unsigned)(letter - pos);
break;
}
pos = letter;
}
}
#ifdef HAVE_MENU #ifdef HAVE_MENU
static void menu_input_search_cb(void *userdata, const char *str) static void menu_input_search_cb(void *userdata, const char *str)
{ {
@ -10102,28 +10126,6 @@ bool menu_input_dialog_start(menu_input_ctx_line_t *line)
return true; return true;
} }
static void osk_update_last_codepoint(
unsigned *last_codepoint,
unsigned *last_codepoint_len,
const char *word)
{
const char *letter = word;
const char *pos = letter;
for (;;)
{
unsigned codepoint = utf8_walk(&letter);
if (letter[0] == 0)
{
*last_codepoint = codepoint;
*last_codepoint_len = (unsigned)(letter - pos);
break;
}
pos = letter;
}
}
bool menu_input_dialog_get_display_kb(void) bool menu_input_dialog_get_display_kb(void)
{ {
struct rarch_state *p_rarch = &rarch_st; struct rarch_state *p_rarch = &rarch_st;
@ -25853,28 +25855,25 @@ uint8_t input_config_bind_map_get_retro_key(unsigned i)
} }
static void input_config_parse_key( static void input_config_parse_key(
char *s,
struct rarch_state *p_rarch,
config_file_t *conf, config_file_t *conf,
const char *prefix, const char *btn, const char *prefix, const char *btn,
struct retro_keybind *bind) struct retro_keybind *bind)
{ {
char key[64];
struct config_entry_list *entry = NULL; struct config_entry_list *entry = NULL;
key[0] = '\0';
fill_pathname_join_delim(key, prefix, btn, '_', sizeof(key));
/* Clear old mapping bit */ /* Clear old mapping bit */
input_keyboard_mapping_bits(0, bind->key); BIT512_CLEAR_PTR(&p_rarch->keyboard_mapping_bits, bind->key);
if ( if (
(entry = config_get_entry(conf, key)) (entry = config_get_entry(conf, s))
&& (!string_is_empty(entry->value)) && (!string_is_empty(entry->value))
) )
bind->key = input_config_translate_str_to_rk(entry->value); bind->key = input_config_translate_str_to_rk(entry->value);
/* Store mapping bit */ /* Store mapping bit */
input_keyboard_mapping_bits(1, bind->key); BIT512_SET_PTR(&p_rarch->keyboard_mapping_bits, bind->key);
} }
static const char *input_config_get_prefix(unsigned user, bool meta) static const char *input_config_get_prefix(unsigned user, bool meta)
@ -25987,22 +25986,20 @@ static uint16_t input_config_parse_hat(const char *dir)
} }
static void input_config_parse_joy_button( static void input_config_parse_joy_button(
char *s,
config_file_t *conf, const char *prefix, config_file_t *conf, const char *prefix,
const char *btn, struct retro_keybind *bind) const char *btn, struct retro_keybind *bind)
{ {
char str[256];
char tmp[64]; char tmp[64];
char key[64]; char key[64];
char key_label[64]; char key_label[64];
struct config_entry_list *tmp_a = NULL; struct config_entry_list *tmp_a = NULL;
str[0] = tmp[0] = key[0] = key_label[0] = '\0'; tmp[0] = key[0] = key_label[0] = '\0';
fill_pathname_join_delim(str, prefix, btn, fill_pathname_join_delim(key, s,
'_', sizeof(str));
fill_pathname_join_delim(key, str,
"btn", '_', sizeof(key)); "btn", '_', sizeof(key));
fill_pathname_join_delim(key_label, str, fill_pathname_join_delim(key_label, s,
"btn_label", '_', sizeof(key_label)); "btn_label", '_', sizeof(key_label));
if (config_get_array(conf, key, tmp, sizeof(tmp))) if (config_get_array(conf, key, tmp, sizeof(tmp)))
@ -26046,22 +26043,20 @@ static void input_config_parse_joy_button(
} }
static void input_config_parse_joy_axis( static void input_config_parse_joy_axis(
char *s,
config_file_t *conf, const char *prefix, config_file_t *conf, const char *prefix,
const char *axis, struct retro_keybind *bind) const char *axis, struct retro_keybind *bind)
{ {
char str[256];
char tmp[64]; char tmp[64];
char key[64]; char key[64];
char key_label[64]; char key_label[64];
struct config_entry_list *tmp_a = NULL; struct config_entry_list *tmp_a = NULL;
str[0] = tmp[0] = key[0] = key_label[0] = '\0'; tmp[0] = key[0] = key_label[0] = '\0';
fill_pathname_join_delim(str, prefix, axis, fill_pathname_join_delim(key, s,
'_', sizeof(str));
fill_pathname_join_delim(key, str,
"axis", '_', sizeof(key)); "axis", '_', sizeof(key));
fill_pathname_join_delim(key_label, str, fill_pathname_join_delim(key_label, s,
"axis_label", '_', sizeof(key_label)); "axis_label", '_', sizeof(key_label));
if (config_get_array(conf, key, tmp, sizeof(tmp))) if (config_get_array(conf, key, tmp, sizeof(tmp)))
@ -26097,20 +26092,17 @@ static void input_config_parse_joy_axis(
} }
static void input_config_parse_mouse_button( static void input_config_parse_mouse_button(
char *s,
config_file_t *conf, const char *prefix, config_file_t *conf, const char *prefix,
const char *btn, struct retro_keybind *bind) const char *btn, struct retro_keybind *bind)
{ {
int val; int val;
char str[256];
char tmp[64]; char tmp[64];
char key[64]; char key[64];
str[0] = tmp[0] = key[0] = '\0'; tmp[0] = key[0] = '\0';
fill_pathname_join_delim(str, prefix, btn, fill_pathname_join_delim(key, s, "mbtn", '_', sizeof(key));
'_', sizeof(str));
fill_pathname_join_delim(key, str,
"mbtn", '_', sizeof(key));
if (config_get_array(conf, key, tmp, sizeof(tmp))) if (config_get_array(conf, key, tmp, sizeof(tmp)))
{ {
@ -26721,6 +26713,7 @@ void config_read_keybinds_conf(void *data)
{ {
unsigned i; unsigned i;
config_file_t *conf = (config_file_t*)data; config_file_t *conf = (config_file_t*)data;
struct rarch_state *p_rarch = &rarch_st;
if (!conf) if (!conf)
return; return;
@ -26731,6 +26724,7 @@ void config_read_keybinds_conf(void *data)
for (j = 0; input_config_bind_map_get_valid(j); j++) for (j = 0; input_config_bind_map_get_valid(j); j++)
{ {
char str[256];
const struct input_bind_map *keybind = const struct input_bind_map *keybind =
(const struct input_bind_map*)INPUT_CONFIG_BIND_MAP_GET(j); (const struct input_bind_map*)INPUT_CONFIG_BIND_MAP_GET(j);
struct retro_keybind *bind = &input_config_binds[i][j]; struct retro_keybind *bind = &input_config_binds[i][j];
@ -26748,10 +26742,14 @@ void config_read_keybinds_conf(void *data)
if (!btn || !prefix) if (!btn || !prefix)
continue; continue;
input_config_parse_key(conf, prefix, btn, bind); str[0] = '\0';
input_config_parse_joy_button(conf, prefix, btn, bind);
input_config_parse_joy_axis(conf, prefix, btn, bind); fill_pathname_join_delim(str, prefix, btn, '_', sizeof(str));
input_config_parse_mouse_button(conf, prefix, btn, bind);
input_config_parse_key (str, p_rarch, conf, prefix, btn, bind);
input_config_parse_joy_button (str, conf, prefix, btn, bind);
input_config_parse_joy_axis (str, conf, prefix, btn, bind);
input_config_parse_mouse_button(str, conf, prefix, btn, bind);
} }
} }
} }
@ -26773,9 +26771,14 @@ void input_config_set_autoconfig_binds(unsigned port, void *data)
(const struct input_bind_map*)INPUT_CONFIG_BIND_MAP_GET(i); (const struct input_bind_map*)INPUT_CONFIG_BIND_MAP_GET(i);
if (keybind) if (keybind)
{ {
char str[256];
const char *base = keybind->base; const char *base = keybind->base;
input_config_parse_joy_button(config, "input", base, &binds[i]); str[0] = '\0';
input_config_parse_joy_axis (config, "input", base, &binds[i]);
fill_pathname_join_delim(str, "input", base, '_', sizeof(str));
input_config_parse_joy_button(str, config, "input", base, &binds[i]);
input_config_parse_joy_axis (str, config, "input", base, &binds[i]);
} }
} }
} }