From 550e94ade1a5a303f29bf7f3d9dec114ebf2fb85 Mon Sep 17 00:00:00 2001 From: Eric Warmenhoven Date: Tue, 21 Jan 2025 14:35:11 -0500 Subject: [PATCH] macos: reset keyboard state when focus is lost --- input/drivers/cocoa_input.m | 8 ++++++-- input/drivers_keyboard/keyboard_event_apple.h | 2 ++ ui/drivers/ui_cocoa.m | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/input/drivers/cocoa_input.m b/input/drivers/cocoa_input.m index 5249a31d87ed..9195fabdf224 100644 --- a/input/drivers/cocoa_input.m +++ b/input/drivers/cocoa_input.m @@ -78,6 +78,11 @@ static bool apple_key_state[MAX_KEYS]; +void apple_input_keyboard_reset(void) +{ + memset(apple_key_state, 0, sizeof(apple_key_state)); +} + /* Send keyboard inputs directly using RETROK_* codes * Used by the iOS custom keyboard implementation */ void apple_direct_input_keyboard_event(bool down, @@ -743,8 +748,7 @@ static void cocoa_input_free(void *data) if (!apple || !data) return; - for (i = 0; i < MAX_KEYS; i++) - apple_key_state[i] = 0; + memset(apple_key_state, 0, sizeof(apple_key_state)); free(apple); } diff --git a/input/drivers_keyboard/keyboard_event_apple.h b/input/drivers_keyboard/keyboard_event_apple.h index d1a5b6c13102..47377913811d 100644 --- a/input/drivers_keyboard/keyboard_event_apple.h +++ b/input/drivers_keyboard/keyboard_event_apple.h @@ -166,6 +166,8 @@ enum RETRO_BEGIN_DECLS +void apple_input_keyboard_reset(void); + void apple_input_keyboard_event(bool down, unsigned code, uint32_t character, uint32_t mod, unsigned device); diff --git a/ui/drivers/ui_cocoa.m b/ui/drivers/ui_cocoa.m index 8da4b6624571..f5a24ae88347 100644 --- a/ui/drivers/ui_cocoa.m +++ b/ui/drivers/ui_cocoa.m @@ -824,7 +824,10 @@ - (void) rarch_main } - (void)applicationDidBecomeActive:(NSNotification *)notification { } -- (void)applicationWillResignActive:(NSNotification *)notification { } +- (void)applicationWillResignActive:(NSNotification *)notification +{ + apple_input_keyboard_reset(); +} - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication { return YES; } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {