mirror of
https://github.com/libretro/RetroArch
synced 2025-02-20 15:40:44 +00:00
Move more functionality to input_keyboard_ctl
This commit is contained in:
parent
56c47bbe56
commit
8f7f40b86c
@ -199,35 +199,6 @@ const char **input_keyboard_start_line(void *userdata,
|
||||
return input_keyboard_line_get_buffer(g_keyboard_line);
|
||||
}
|
||||
|
||||
/**
|
||||
* input_keyboard_wait_keys:
|
||||
* @userdata : Userdata.
|
||||
* @cb : Callback function.
|
||||
*
|
||||
* Waits for keys to be pressed (used for binding keys in the menu).
|
||||
* Callback returns false when all polling is done.
|
||||
**/
|
||||
void input_keyboard_wait_keys(void *userdata, input_keyboard_press_t cb)
|
||||
{
|
||||
g_keyboard_press_cb = cb;
|
||||
g_keyboard_press_data = userdata;
|
||||
|
||||
/* While waiting for input, we have to block all hotkeys. */
|
||||
input_driver_keyboard_mapping_set_block(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* input_keyboard_wait_keys_cancel:
|
||||
*
|
||||
* Cancels function callback set by input_keyboard_wait_keys().
|
||||
**/
|
||||
void input_keyboard_wait_keys_cancel(void)
|
||||
{
|
||||
g_keyboard_press_cb = NULL;
|
||||
g_keyboard_press_data = NULL;
|
||||
input_driver_keyboard_mapping_set_block(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* input_keyboard_event:
|
||||
* @down : Keycode was pressed down?
|
||||
@ -248,14 +219,12 @@ void input_keyboard_event(bool down, unsigned code,
|
||||
if (down)
|
||||
return;
|
||||
|
||||
input_keyboard_wait_keys_cancel();
|
||||
input_keyboard_ctl(RARCH_INPUT_KEYBOARD_CTL_CANCEL_WAIT_KEYS, NULL);
|
||||
deferred_wait_keys = false;
|
||||
}
|
||||
else if (g_keyboard_press_cb)
|
||||
{
|
||||
if (!down)
|
||||
return;
|
||||
if (code == RETROK_UNKNOWN)
|
||||
if (!down || code == RETROK_UNKNOWN)
|
||||
return;
|
||||
if (g_keyboard_press_cb(g_keyboard_press_data, code))
|
||||
return;
|
||||
@ -302,6 +271,25 @@ bool input_keyboard_ctl(enum rarch_input_keyboard_ctl_state state, void *data)
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case RARCH_INPUT_KEYBOARD_CTL_START_WAIT_KEYS:
|
||||
{
|
||||
input_keyboard_ctx_wait_t *keys = (input_keyboard_ctx_wait_t*)data;
|
||||
|
||||
if (!keys)
|
||||
return false;
|
||||
|
||||
g_keyboard_press_cb = keys->cb;
|
||||
g_keyboard_press_data = keys->userdata;
|
||||
}
|
||||
|
||||
/* While waiting for input, we have to block all hotkeys. */
|
||||
input_driver_keyboard_mapping_set_block(true);
|
||||
break;
|
||||
case RARCH_INPUT_KEYBOARD_CTL_CANCEL_WAIT_KEYS:
|
||||
g_keyboard_press_cb = NULL;
|
||||
g_keyboard_press_data = NULL;
|
||||
input_driver_keyboard_mapping_set_block(false);
|
||||
break;
|
||||
case RARCH_INPUT_KEYBOARD_CTL_DESTROY:
|
||||
input_driver_keyboard_linefeed_enable = false;
|
||||
break;
|
||||
|
@ -34,6 +34,16 @@ enum rarch_input_keyboard_ctl_state
|
||||
RARCH_INPUT_KEYBOARD_CTL_SET_LINEFEED_ENABLED,
|
||||
RARCH_INPUT_KEYBOARD_CTL_UNSET_LINEFEED_ENABLED,
|
||||
RARCH_INPUT_KEYBOARD_CTL_IS_LINEFEED_ENABLED,
|
||||
|
||||
/*
|
||||
* Waits for keys to be pressed (used for binding
|
||||
* keys in the menu).
|
||||
* Callback returns false when all polling is done.
|
||||
**/
|
||||
RARCH_INPUT_KEYBOARD_CTL_START_WAIT_KEYS,
|
||||
|
||||
/* Cancels keyboard wait for keys function callback. */
|
||||
RARCH_INPUT_KEYBOARD_CTL_CANCEL_WAIT_KEYS
|
||||
};
|
||||
|
||||
/* Keyboard line reader. Handles textual input in a direct fashion. */
|
||||
@ -48,6 +58,13 @@ typedef void (*input_keyboard_line_complete_t)(void *userdata,
|
||||
|
||||
typedef bool (*input_keyboard_press_t)(void *userdata, unsigned code);
|
||||
|
||||
typedef struct input_keyboard_ctx_wait
|
||||
{
|
||||
void *userdata;
|
||||
input_keyboard_press_t cb;
|
||||
} input_keyboard_ctx_wait_t;
|
||||
|
||||
|
||||
/**
|
||||
* input_keyboard_line_new:
|
||||
* @userdata : Userdata.
|
||||
@ -123,22 +140,6 @@ void input_keyboard_event(bool down, unsigned code, uint32_t character,
|
||||
const char **input_keyboard_start_line(void *userdata,
|
||||
input_keyboard_line_complete_t cb);
|
||||
|
||||
/**
|
||||
* input_keyboard_wait_keys:
|
||||
* @userdata : Userdata.
|
||||
* @cb : Callback function.
|
||||
*
|
||||
* Waits for keys to be pressed (used for binding keys in the menu).
|
||||
* Callback returns false when all polling is done.
|
||||
**/
|
||||
void input_keyboard_wait_keys(void *userdata, input_keyboard_press_t cb);
|
||||
|
||||
/**
|
||||
* input_keyboard_wait_keys_cancel:
|
||||
*
|
||||
* Cancels function callback set by input_keyboard_wait_keys().
|
||||
**/
|
||||
void input_keyboard_wait_keys_cancel(void);
|
||||
|
||||
bool input_keyboard_ctl(enum rarch_input_keyboard_ctl_state state, void *data);
|
||||
|
||||
|
@ -433,6 +433,7 @@ static bool menu_input_key_bind_set_mode(
|
||||
enum menu_input_ctl_state state, void *data)
|
||||
{
|
||||
unsigned index_offset;
|
||||
input_keyboard_ctx_wait_t keys;
|
||||
menu_handle_t *menu = NULL;
|
||||
menu_input_t *menu_input = menu_input_get_ptr();
|
||||
rarch_setting_t *setting = (rarch_setting_t*)data;
|
||||
@ -456,8 +457,10 @@ static bool menu_input_key_bind_set_mode(
|
||||
menu_input->binds.timeout_end = retro_get_time_usec() +
|
||||
MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
|
||||
|
||||
input_keyboard_wait_keys(menu,
|
||||
menu_input_key_bind_custom_bind_keyboard_cb);
|
||||
keys.userdata = menu;
|
||||
keys.cb = menu_input_key_bind_custom_bind_keyboard_cb;
|
||||
|
||||
input_keyboard_ctl(RARCH_INPUT_KEYBOARD_CTL_START_WAIT_KEYS, &keys);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -600,7 +603,7 @@ static bool menu_input_key_bind_iterate(char *s, size_t len)
|
||||
|
||||
/* We won't be getting any key events, so just cancel early. */
|
||||
if (timed_out)
|
||||
input_keyboard_wait_keys_cancel();
|
||||
input_keyboard_ctl(RARCH_INPUT_KEYBOARD_CTL_CANCEL_WAIT_KEYS, NULL);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -622,7 +625,7 @@ static bool menu_input_key_bind_iterate(char *s, size_t len)
|
||||
|
||||
if (binds.begin > binds.last)
|
||||
{
|
||||
input_keyboard_wait_keys_cancel();
|
||||
input_keyboard_ctl(RARCH_INPUT_KEYBOARD_CTL_CANCEL_WAIT_KEYS, NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user