move more menu state over to menu_driver.c

This commit is contained in:
twinaphex 2021-09-21 06:05:25 +02:00
parent 28e0b669d2
commit 44012ace47
4 changed files with 125 additions and 121 deletions

View File

@ -4801,11 +4801,12 @@ void menu_driver_set_thumbnail_content(char *s, size_t len)
void menu_driver_destroy(
struct menu_state *menu_st)
{
menu_st->pending_quick_menu = false;
menu_st->prevent_populate = false;
menu_st->data_own = false;
menu_st->driver_ctx = NULL;
menu_st->userdata = NULL;
menu_st->pending_quick_menu = false;
menu_st->prevent_populate = false;
menu_st->data_own = false;
menu_st->driver_ctx = NULL;
menu_st->userdata = NULL;
menu_st->input_driver_flushing_input = 0;
}
bool menu_driver_list_get_entry(menu_ctx_list_t *list)
@ -4928,3 +4929,61 @@ void menu_input_key_event(bool down, unsigned keycode,
menu_st->kb_key_state[key] =
((menu_st->kb_key_state[key] & 1) << 1) | down;
}
const char *menu_input_dialog_get_label_setting_buffer(void)
{
struct menu_state *menu_st = &menu_driver_state;
return menu_st->input_dialog_kb_label_setting;
}
const char *menu_input_dialog_get_label_buffer(void)
{
struct menu_state *menu_st = &menu_driver_state;
return menu_st->input_dialog_kb_label;
}
unsigned menu_input_dialog_get_kb_idx(void)
{
struct menu_state *menu_st = &menu_driver_state;
return menu_st->input_dialog_kb_idx;
}
void menu_input_dialog_end(void)
{
struct menu_state *menu_st = &menu_driver_state;
menu_st->input_dialog_kb_type = 0;
menu_st->input_dialog_kb_idx = 0;
menu_st->input_dialog_kb_display = false;
menu_st->input_dialog_kb_label[0] = '\0';
menu_st->input_dialog_kb_label_setting[0] = '\0';
/* Avoid triggering states on pressing return. */
/* Inhibits input for 2 frames
* > Required, since input is ignored for 1 frame
* after certain events - e.g. closing the OSK */
menu_st->input_driver_flushing_input = 2;
}
void menu_dialog_unset_pending_push(void)
{
struct menu_state *menu_st = &menu_driver_state;
menu_dialog_t *p_dialog = &menu_st->dialog_st;
p_dialog->pending_push = false;
}
void menu_dialog_push_pending(enum menu_dialog_type type)
{
struct menu_state *menu_st = &menu_driver_state;
menu_dialog_t *p_dialog = &menu_st->dialog_st;
p_dialog->current_type = type;
p_dialog->pending_push = true;
}
void menu_dialog_set_current_id(unsigned id)
{
struct menu_state *menu_st = &menu_driver_state;
menu_dialog_t *p_dialog = &menu_st->dialog_st;
p_dialog->current_id = id;
}

View File

@ -456,19 +456,30 @@ struct menu_state
unsigned acceleration;
} scroll;
/* unsigned alignment */
unsigned input_dialog_kb_type;
unsigned input_dialog_kb_idx;
unsigned input_driver_flushing_input;
menu_dialog_t dialog_st;
/* int16_t alignment */
menu_input_pointer_hw_state_t input_pointer_hw_state;
unsigned char kb_key_state[RETROK_LAST];
/* Storage container for current menu datetime
* representation string */
char datetime_cache[255];
/* When generating a menu list in menu_displaylist_build_list(),
* the entry with a label matching 'pending_selection' will
* be selected automatically */
char pending_selection[PATH_MAX_LENGTH];
/* Storage container for current menu datetime
* representation string */
char datetime_cache[255];
#ifdef HAVE_MENU
char input_dialog_kb_label_setting[256];
char input_dialog_kb_label[256];
#endif
unsigned char kb_key_state[RETROK_LAST];
bool input_dialog_kb_display;
/* when enabled, on next iteration the 'Quick Menu' list will
* be pushed onto the stack */
bool pending_quick_menu;

View File

@ -525,30 +525,6 @@ void input_keyboard_mapping_bits(unsigned mode, unsigned key)
#ifdef HAVE_MENU
void menu_dialog_unset_pending_push(void)
{
struct rarch_state *p_rarch = &rarch_st;
menu_dialog_t *p_dialog = &p_rarch->dialog_st;
p_dialog->pending_push = false;
}
void menu_dialog_push_pending(enum menu_dialog_type type)
{
struct rarch_state *p_rarch = &rarch_st;
menu_dialog_t *p_dialog = &p_rarch->dialog_st;
p_dialog->current_type = type;
p_dialog->pending_push = true;
}
void menu_dialog_set_current_id(unsigned id)
{
struct rarch_state *p_rarch = &rarch_st;
menu_dialog_t *p_dialog = &p_rarch->dialog_st;
p_dialog->current_id = id;
}
static bool menu_input_key_bind_custom_bind_keyboard_cb(
void *data, unsigned code)
{
@ -717,7 +693,7 @@ static bool menu_input_key_bind_iterate(
/* Inhibits input for 2 frames
* > Required, since input is ignored for 1 frame
* after certain events - e.g. closing the OSK */
p_rarch->input_driver_flushing_input = 2;
menu_st->input_driver_flushing_input = 2;
/* We won't be getting any key events, so just cancel early. */
if (timed_out)
@ -801,7 +777,7 @@ static bool menu_input_key_bind_iterate(
/* Inhibits input for 2 frames
* > Required, since input is ignored for 1 frame
* after certain events - e.g. closing the OSK */
p_rarch->input_driver_flushing_input = 2;
menu_st->input_driver_flushing_input = 2;
new_binds.begin++;
@ -891,7 +867,7 @@ static int generic_menu_iterate(
{
case ITERATE_TYPE_HELP:
ret = menu_dialog_iterate(
&p_rarch->dialog_st, settings,
&menu_st->dialog_st, settings,
menu->menu_state_msg, sizeof(menu->menu_state_msg),
current_time);
@ -1159,7 +1135,7 @@ static int generic_menu_iterate(
BIT64_SET(menu->state, MENU_STATE_POST_ITERATE);
/* Have to defer it so we let settings refresh. */
if (p_rarch->dialog_st.pending_push)
if (menu_st->dialog_st.pending_push)
{
const char *label;
menu_displaylist_info_t info;
@ -1668,7 +1644,7 @@ static bool menu_driver_init_internal(
if (!menu_st->driver_data || !rarch_menu_init(
menu_st,
&p_rarch->dialog_st,
&menu_st->dialog_st,
menu_st->driver_ctx,
&menu_st->input_state,
&menu_st->input_pointer_hw_state,
@ -1818,9 +1794,9 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data)
command_event(CMD_EVENT_HISTORY_DEINIT, NULL);
rarch_favorites_deinit();
p_rarch->dialog_st.pending_push = false;
p_rarch->dialog_st.current_id = 0;
p_rarch->dialog_st.current_type = MENU_DIALOG_NONE;
menu_st->dialog_st.pending_push = false;
menu_st->dialog_st.current_id = 0;
menu_st->dialog_st.current_type = MENU_DIALOG_NONE;
free(menu_st->driver_data);
}
@ -4996,40 +4972,6 @@ bool gfx_widgets_ready(void)
#ifdef HAVE_MENU
const char *menu_input_dialog_get_label_buffer(void)
{
struct rarch_state *p_rarch = &rarch_st;
return p_rarch->menu_input_dialog_keyboard_label;
}
const char *menu_input_dialog_get_label_setting_buffer(void)
{
struct rarch_state *p_rarch = &rarch_st;
return p_rarch->menu_input_dialog_keyboard_label_setting;
}
void menu_input_dialog_end(void)
{
struct rarch_state *p_rarch = &rarch_st;
p_rarch->menu_input_dialog_keyboard_type = 0;
p_rarch->menu_input_dialog_keyboard_idx = 0;
p_rarch->menu_input_dialog_keyboard_display = false;
p_rarch->menu_input_dialog_keyboard_label[0] = '\0';
p_rarch->menu_input_dialog_keyboard_label_setting[0] = '\0';
/* Avoid triggering states on pressing return. */
/* Inhibits input for 2 frames
* > Required, since input is ignored for 1 frame
* after certain events - e.g. closing the OSK */
p_rarch->input_driver_flushing_input = 2;
}
unsigned menu_input_dialog_get_kb_idx(void)
{
struct rarch_state *p_rarch = &rarch_st;
return p_rarch->menu_input_dialog_keyboard_idx;
}
bool menu_input_dialog_start_search(void)
{
struct rarch_state *p_rarch = &rarch_st;
@ -5044,10 +4986,10 @@ bool menu_input_dialog_start_search(void)
if (!menu)
return false;
p_rarch->menu_input_dialog_keyboard_display = true;
strlcpy(p_rarch->menu_input_dialog_keyboard_label,
menu_st->input_dialog_kb_display = true;
strlcpy(menu_st->input_dialog_kb_label,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SEARCH),
sizeof(p_rarch->menu_input_dialog_keyboard_label));
sizeof(menu_st->input_dialog_kb_label));
if (p_rarch->keyboard_line.buffer)
free(p_rarch->keyboard_line.buffer);
@ -5080,31 +5022,31 @@ bool menu_input_dialog_start_search(void)
bool menu_input_dialog_start(menu_input_ctx_line_t *line)
{
struct rarch_state *p_rarch = &rarch_st;
struct rarch_state *p_rarch = &rarch_st;
#ifdef HAVE_ACCESSIBILITY
settings_t *settings = p_rarch->configuration_settings;
bool accessibility_enable = settings->bools.accessibility_enable;
settings_t *settings = p_rarch->configuration_settings;
bool accessibility_enable = settings->bools.accessibility_enable;
unsigned accessibility_narrator_speech_speed = settings->uints.accessibility_narrator_speech_speed;
#endif
struct menu_state *menu_st = menu_state_get_ptr();
menu_handle_t *menu = menu_st->driver_data;
struct menu_state *menu_st = menu_state_get_ptr();
menu_handle_t *menu = menu_st->driver_data;
if (!line || !menu)
return false;
p_rarch->menu_input_dialog_keyboard_display = true;
menu_st->input_dialog_kb_display = true;
/* Only copy over the menu label and setting if they exist. */
if (line->label)
strlcpy(p_rarch->menu_input_dialog_keyboard_label,
strlcpy(menu_st->input_dialog_kb_label,
line->label,
sizeof(p_rarch->menu_input_dialog_keyboard_label));
sizeof(menu_st->input_dialog_kb_label));
if (line->label_setting)
strlcpy(p_rarch->menu_input_dialog_keyboard_label_setting,
strlcpy(menu_st->input_dialog_kb_label_setting,
line->label_setting,
sizeof(p_rarch->menu_input_dialog_keyboard_label_setting));
sizeof(menu_st->input_dialog_kb_label_setting));
p_rarch->menu_input_dialog_keyboard_type = line->type;
p_rarch->menu_input_dialog_keyboard_idx = line->idx;
menu_st->input_dialog_kb_type = line->type;
menu_st->input_dialog_kb_idx = line->idx;
if (p_rarch->keyboard_line.buffer)
free(p_rarch->keyboard_line.buffer);
@ -5138,6 +5080,7 @@ bool menu_input_dialog_start(menu_input_ctx_line_t *line)
bool menu_input_dialog_get_display_kb(void)
{
struct rarch_state *p_rarch = &rarch_st;
struct menu_state *menu_st = menu_state_get_ptr();
#ifdef HAVE_LIBNX
SwkbdConfig kbd;
Result rc;
@ -5154,9 +5097,9 @@ bool menu_input_dialog_get_display_kb(void)
/* swkbd only works on "real" titles */
if ( __nx_applet_type != AppletType_Application
&& __nx_applet_type != AppletType_SystemApplication)
return p_rarch->menu_input_dialog_keyboard_display;
return menu_st->input_dialog_kb_display;
if (!p_rarch->menu_input_dialog_keyboard_display)
if (!menu_st->input_dialog_kb_display)
return false;
rc = swkbdCreate(&kbd, 0);
@ -5168,7 +5111,7 @@ bool menu_input_dialog_get_display_kb(void)
swkbdConfigMakePresetDefault(&kbd);
swkbdConfigSetGuideText(&kbd,
p_rarch->menu_input_dialog_keyboard_label);
menu_st->input_dialog_kb_label);
rc = swkbdShow(&kbd, buf, sizeof(buf));
@ -5180,7 +5123,7 @@ bool menu_input_dialog_get_display_kb(void)
for (i = 0; i < LIBNX_SWKBD_LIMIT; i++)
{
/* In case a previous "Enter" press closed the keyboard */
if (!p_rarch->menu_input_dialog_keyboard_display)
if (!menu_st->input_dialog_kb_display)
break;
if (buf[i] == '\n' || buf[i] == '\0')
@ -5205,7 +5148,7 @@ bool menu_input_dialog_get_display_kb(void)
}
/* fail-safe */
if (p_rarch->menu_input_dialog_keyboard_display)
if (menu_st->input_dialog_kb_display)
input_keyboard_event(true, '\n', '\n', 0, RETRO_DEVICE_KEYBOARD);
typing = false;
@ -5214,7 +5157,7 @@ bool menu_input_dialog_get_display_kb(void)
}
libnx_apply_overclock();
#endif
return p_rarch->menu_input_dialog_keyboard_display;
return menu_st->input_dialog_kb_display;
}
/* Checks if the menu is still running */
@ -16259,8 +16202,13 @@ int16_t input_state_internal(unsigned port, unsigned device,
#else
const input_device_driver_t *sec_joypad = NULL;
#endif
bool input_blocked = (p_rarch->input_driver_flushing_input > 0) ||
#ifdef HAVE_MENU
struct menu_state *menu_st = menu_state_get_ptr();
bool input_blocked = (menu_st->input_driver_flushing_input > 0) ||
p_rarch->input_driver_block_libretro_input;
#else
bool input_blocked = p_rarch->input_driver_block_libretro_input;
#endif
bool bitmask_enabled = false;
unsigned max_users = settings->uints.input_max_users;
int16_t result = 0;
@ -24458,7 +24406,6 @@ static void retroarch_deinit_drivers(
if (input_driver_st)
input_driver_st->nonblocking_flag = false;
p_rarch->input_driver_flushing_input = 0;
memset(&p_rarch->input_driver_turbo_btns, 0, sizeof(turbo_buttons_t));
memset(&p_rarch->input_driver_analog_requested, 0,
sizeof(p_rarch->input_driver_analog_requested));
@ -26921,7 +26868,7 @@ void retroarch_menu_running(void)
}
/* Prevent stray input (for a single frame) */
p_rarch->input_driver_flushing_input = 1;
menu_st->input_driver_flushing_input = 1;
#ifdef HAVE_AUDIOMIXER
if (audio_enable_menu && audio_enable_menu_bgm)
@ -26993,7 +26940,7 @@ void retroarch_menu_running_finished(bool quit)
/* Prevent stray input
* (for a single frame) */
p_rarch->input_driver_flushing_input = 1;
menu_st->input_driver_flushing_input = 1;
if (!quit)
{
@ -28397,23 +28344,24 @@ static enum runloop_state runloop_check_state(
menu_toggle_gamepad_combo, current_time,
&last_input)))
BIT256_SET(current_bits, RARCH_MENU_TOGGLE);
#endif
if (p_rarch->input_driver_flushing_input > 0)
if (menu_st->input_driver_flushing_input > 0)
{
bool input_active = bits_any_set(current_bits.data, ARRAY_SIZE(current_bits.data));
p_rarch->input_driver_flushing_input = input_active
? p_rarch->input_driver_flushing_input
: (p_rarch->input_driver_flushing_input - 1);
menu_st->input_driver_flushing_input = input_active
? menu_st->input_driver_flushing_input
: (menu_st->input_driver_flushing_input - 1);
if (input_active || (p_rarch->input_driver_flushing_input > 0))
if (input_active || (menu_st->input_driver_flushing_input > 0))
{
BIT256_CLEAR_ALL(current_bits);
if (runloop_paused)
BIT256_SET(current_bits, RARCH_PAUSE_TOGGLE);
}
}
#endif
if (!VIDEO_DRIVER_IS_THREADED_INTERNAL())
{

View File

@ -1399,19 +1399,11 @@ struct rarch_state
input_device_info_t input_device_info[MAX_INPUT_DEVICES];
input_mouse_info_t input_mouse_info[MAX_INPUT_DEVICES];
/* unsigned alignment */
#ifdef HAVE_MENU
menu_dialog_t dialog_st; /* unsigned alignment */
#endif
#ifdef HAVE_THREAD_STORAGE
sthread_tls_t rarch_tls; /* unsigned alignment */
#endif
unsigned fastforward_after_frames;
#ifdef HAVE_MENU
unsigned menu_input_dialog_keyboard_type;
unsigned menu_input_dialog_keyboard_idx;
#endif
unsigned recording_width;
unsigned recording_height;
@ -1425,7 +1417,6 @@ struct rarch_state
unsigned video_driver_height;
unsigned osk_last_codepoint;
unsigned osk_last_codepoint_len;
unsigned input_driver_flushing_input;
unsigned input_hotkey_block_counter;
#ifdef HAVE_ACCESSIBILITY
unsigned gamepad_input_override;
@ -1493,10 +1484,6 @@ struct rarch_state
char video_driver_gpu_device_string[128];
char video_driver_gpu_api_version_string[128];
char error_string[255];
#ifdef HAVE_MENU
char menu_input_dialog_keyboard_label_setting[256];
char menu_input_dialog_keyboard_label[256];
#endif
char video_driver_window_title[512];
#ifdef HAVE_NETWORKING
char server_address_deferred[512];
@ -1668,7 +1655,6 @@ struct rarch_state
input_game_focus_state_t game_focus_state; /* bool alignment */
#ifdef HAVE_MENU
bool menu_input_dialog_keyboard_display;
/* Is the menu driver still running? */
bool menu_driver_alive;
/* Are we binding a button inside the menu? */