From 50baeba22a6585113061476defda8dd88dd28181 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 21 Feb 2015 08:42:19 +0100 Subject: [PATCH] Fix race condition issue in threaded video mode when OSK is brought up/down --- driver.h | 3 ++- input/keyboard_line.c | 4 +--- retroarch.c | 6 +++--- runloop.c | 19 +++++++++++++++++++ 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/driver.h b/driver.h index fe1599b4fa..6fd71662ce 100644 --- a/driver.h +++ b/driver.h @@ -213,7 +213,8 @@ typedef struct driver bool video_active; bool camera_active; bool location_active; - bool osk_active; + bool osk_enable; + bool keyboard_linefeed_enable; #ifdef HAVE_MENU menu_handle_t *menu; diff --git a/input/keyboard_line.c b/input/keyboard_line.c index 0ae6f7a5d3..abf052b258 100644 --- a/input/keyboard_line.c +++ b/input/keyboard_line.c @@ -42,9 +42,7 @@ static void input_keyboard_line_toggle_osk(bool enable) if (!g_settings.osk.enable) return; - rarch_main_command(RARCH_CMD_OVERLAY_DEINIT); - driver.osk_active = enable; - rarch_main_command(RARCH_CMD_OVERLAY_INIT); + driver.keyboard_linefeed_enable = enable; } /** diff --git a/retroarch.c b/retroarch.c index 93feb6d270..4a582f0361 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2353,7 +2353,7 @@ bool rarch_main_command(unsigned cmd) case RARCH_CMD_OVERLAY_INIT: rarch_main_command(RARCH_CMD_OVERLAY_DEINIT); #ifdef HAVE_OVERLAY - if (driver.osk_active) + if (driver.osk_enable) { if (!*g_settings.osk.overlay) break; @@ -2364,8 +2364,8 @@ bool rarch_main_command(unsigned cmd) break; } - driver.overlay = input_overlay_new(driver.osk_active ? g_settings.osk.overlay : g_settings.input.overlay, - driver.osk_active ? g_settings.osk.enable : g_settings.input.overlay_enable, + driver.overlay = input_overlay_new(driver.osk_enable ? g_settings.osk.overlay : g_settings.input.overlay, + driver.osk_enable ? g_settings.osk.enable : g_settings.input.overlay_enable, g_settings.input.overlay_opacity, g_settings.input.overlay_scale); if (!driver.overlay) RARCH_ERR("Failed to load overlay.\n"); diff --git a/runloop.c b/runloop.c index d12451945f..153016e88b 100644 --- a/runloop.c +++ b/runloop.c @@ -1034,6 +1034,22 @@ void rarch_main_iterate_overlay_state(void) } #endif +static void rarch_main_iterate_linefeed(void) +{ + if (driver.osk_enable && !driver.keyboard_linefeed_enable) + { + driver.osk_enable = false; + rarch_main_command(RARCH_CMD_OVERLAY_DEINIT); + return; + } + else if (!driver.osk_enable && driver.keyboard_linefeed_enable) + { + driver.osk_enable = true; + rarch_main_command(RARCH_CMD_OVERLAY_INIT); + return; + } +} + /** * rarch_main_iterate: * @@ -1065,6 +1081,9 @@ int rarch_main_iterate(void) do_pre_state_checks(input, old_input, trigger_input); + if (driver.keyboard_linefeed_enable || driver.osk_enable) + rarch_main_iterate_linefeed(); + #ifdef HAVE_OVERLAY if (driver.overlay) rarch_main_iterate_overlay_state();