fix menu toggle with F1

This commit is contained in:
Brad Parker 2016-10-27 23:43:07 -04:00
parent 14ad3f9dd6
commit b7a8ff9395
4 changed files with 37 additions and 29 deletions

View File

@ -226,24 +226,23 @@ static void menu_input_key_event(bool down, unsigned keycode,
RARCH_LOG("down: %d, keycode: %d, mod: %d, character: %d\n", down, keycode, mod, character);
#endif
if (down)
menu_event_keyboard_set((enum retro_key)keycode);
menu_event_keyboard_set(down, (enum retro_key)keycode);
}
static void menu_driver_toggle(bool latch)
static void menu_driver_toggle(bool on)
{
retro_keyboard_event_t *key_event = NULL;
retro_keyboard_event_t *frontend_key_event = NULL;
settings_t *settings = config_get_ptr();
menu_driver_toggled = latch;
menu_driver_toggled = on;
if (!latch)
if (!on)
menu_display_toggle_set_reason(MENU_TOGGLE_REASON_NONE);
menu_driver_ctl(RARCH_MENU_CTL_TOGGLE, &latch);
menu_driver_ctl(RARCH_MENU_CTL_TOGGLE, &on);
if (latch)
if (on)
menu_driver_alive = true;
else
menu_driver_alive = false;
@ -765,12 +764,12 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data)
break;
case RARCH_MENU_CTL_TOGGLE:
{
bool *latch = (bool*)data;
if (!latch)
bool *on = (bool*)data;
if (!on)
return false;
if (menu_driver_ctx && menu_driver_ctx->toggle)
menu_driver_ctx->toggle(menu_userdata, *latch);
menu_driver_ctx->toggle(menu_userdata, *on);
}
break;
case RARCH_MENU_CTL_REFRESH:

View File

@ -41,7 +41,7 @@
#include "../retroarch.h"
#include "../runloop.h"
static bool menu_keyboard_key_state[RETROK_LAST];
static unsigned short menu_keyboard_key_state[RETROK_LAST];
static int menu_event_pointer(unsigned *action)
{
@ -72,19 +72,24 @@ static int menu_event_pointer(unsigned *action)
return 0;
}
bool menu_event_keyboard_is_set(enum retro_key key)
unsigned short menu_event_keyboard_is_set(enum retro_key key)
{
if (menu_keyboard_key_state[key] && key == RETROK_F1)
{
menu_keyboard_key_state[key] = false;
return true;
}
return menu_keyboard_key_state[key];
}
void menu_event_keyboard_set(enum retro_key key)
void menu_event_keyboard_set(bool down, enum retro_key key)
{
menu_keyboard_key_state[key] = true;
if (key == RETROK_UNKNOWN)
{
unsigned i;
for (i = 0; i < RETROK_LAST; i++)
{
menu_keyboard_key_state[i] = (menu_keyboard_key_state[i] & 3) << 1;
}
}
else
menu_keyboard_key_state[key] = ((menu_keyboard_key_state[key] & 1) << 1) | down;
}
unsigned menu_event(uint64_t input, uint64_t trigger_input)

View File

@ -35,9 +35,9 @@ RETRO_BEGIN_DECLS
*/
unsigned menu_event(uint64_t input, uint64_t trigger_state);
void menu_event_keyboard_set(enum retro_key key);
void menu_event_keyboard_set(bool down, enum retro_key key);
bool menu_event_keyboard_is_set(enum retro_key key);
unsigned short menu_event_keyboard_is_set(enum retro_key key);
unsigned kbd_index;
char kbd_grid[41];

View File

@ -907,22 +907,26 @@ static enum runloop_state runloop_check_state(
return RUNLOOP_STATE_SLEEP;
#ifdef HAVE_MENU
if ( menu_event_keyboard_is_set(RETROK_F1) ||
runloop_cmd_menu_press(current_input, old_input, trigger_input) ||
rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
if (menu_event_keyboard_is_set(RETROK_F1) == 1)
{
if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL))
{
if (rarch_ctl(RARCH_CTL_IS_INITED, NULL) &&
!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
{
rarch_ctl(RARCH_CTL_MENU_RUNNING_FINISHED, NULL);
}
else
{
menu_display_toggle_set_reason(MENU_TOGGLE_REASON_USER);
rarch_ctl(RARCH_CTL_MENU_RUNNING, NULL);
menu_event_keyboard_set(false, RETROK_F1);
}
}
}
else if ((!menu_event_keyboard_is_set(RETROK_F1) && runloop_cmd_menu_press(current_input, old_input, trigger_input)) ||
rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
{
menu_display_toggle_set_reason(MENU_TOGGLE_REASON_USER);
rarch_ctl(RARCH_CTL_MENU_RUNNING, NULL);
}
else
menu_event_keyboard_set(false, RETROK_F1);
if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL))
{