From b3c1afe2ec2195cc6f23818c86d9f15787b2af8f Mon Sep 17 00:00:00 2001 From: Themaister Date: Mon, 30 Sep 2013 18:53:56 +0200 Subject: [PATCH] Redirect keyboard events to RGUI. Fixes issue where libretro cores receive keyboard events even though they are not running (inside RGUI). --- frontend/frontend.c | 8 ++++++++ frontend/menu/menu_common.c | 9 +++++++++ frontend/menu/menu_common.h | 2 ++ 3 files changed, 19 insertions(+) diff --git a/frontend/frontend.c b/frontend/frontend.c index c65796a18c..df559d44ac 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -215,6 +215,11 @@ int main_entry(int argc, char *argv[]) driver_set_rumble_state(i, RETRO_RUMBLE_WEAK, 0); } + // Override keyboard callback to redirect to menu instead. + // We'll use this later for something ... + retro_keyboard_event_t key_event = g_extern.system.key_event; + g_extern.system.key_event = menu_key_event; + if (driver.audio_data) audio_stop_func(); @@ -236,6 +241,9 @@ int main_entry(int argc, char *argv[]) } g_extern.lifecycle_mode_state &= ~(1ULL << MODE_MENU); + + // Restore libretro keyboard callback. + g_extern.system.key_event = key_event; } else break; diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index 5d3c10ad94..c5dfd931c8 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -911,3 +911,12 @@ bool menu_poll_find_trigger(struct rgui_bind_state *state, struct rgui_bind_stat return false; } +void menu_key_event(bool down, unsigned keycode, uint32_t character, uint16_t key_modifiers) +{ + // TODO: Do something with this. Stub for now. + (void)down; + (void)keycode; + (void)character; + (void)key_modifiers; +} + diff --git a/frontend/menu/menu_common.h b/frontend/menu/menu_common.h index 0036a92840..bafc3065be 100644 --- a/frontend/menu/menu_common.h +++ b/frontend/menu/menu_common.h @@ -355,6 +355,8 @@ bool menu_save_new_config(void); int menu_set_settings(unsigned setting, unsigned action); extern const unsigned rgui_controller_lut[]; +void menu_key_event(bool down, unsigned keycode, uint32_t character, uint16_t key_modifiers); + #ifdef __cplusplus } #endif