mirror of
https://github.com/libretro/RetroArch
synced 2025-03-28 19:20:35 +00:00
move more menu state over to menu_driver.c
This commit is contained in:
parent
28e0b669d2
commit
44012ace47
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
142
retroarch.c
142
retroarch.c
@ -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())
|
||||
{
|
||||
|
@ -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? */
|
||||
|
Loading…
x
Reference in New Issue
Block a user