From a8abe612ed5597cbaabb903c0121b5b48baee91d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 2 Aug 2023 00:19:57 -0700 Subject: [PATCH] Only pass keypresses up the responder chain when text input is active This is another attempt to make sure we don't cause beeps from unhandled key presses while still allowing full text input functionalty. If this isn't selective enough, we might need to go up the responder chain to see what's going to handle the event before passing it along. Fixes https://github.com/libsdl-org/SDL/pull/6962 --- src/video/uikit/SDL_uikitview.m | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/video/uikit/SDL_uikitview.m b/src/video/uikit/SDL_uikitview.m index 415c128729..e3c92156c6 100644 --- a/src/video/uikit/SDL_uikitview.m +++ b/src/video/uikit/SDL_uikitview.m @@ -417,7 +417,9 @@ extern int SDL_AppleTVRemoteOpenedAsJoystick; SDL_SendKeyboardKey(UIKit_GetEventTimestamp([event timestamp]), SDL_PRESSED, scancode); } } - [super pressesBegan:presses withEvent:event]; + if (SDL_TextInputActive()) { + [super pressesBegan:presses withEvent:event]; + } } - (void)pressesEnded:(NSSet *)presses withEvent:(UIPressesEvent *)event @@ -428,7 +430,9 @@ extern int SDL_AppleTVRemoteOpenedAsJoystick; SDL_SendKeyboardKey(UIKit_GetEventTimestamp([event timestamp]), SDL_RELEASED, scancode); } } - [super pressesEnded:presses withEvent:event]; + if (SDL_TextInputActive()) { + [super pressesEnded:presses withEvent:event]; + } } - (void)pressesCancelled:(NSSet *)presses withEvent:(UIPressesEvent *)event @@ -439,13 +443,17 @@ extern int SDL_AppleTVRemoteOpenedAsJoystick; SDL_SendKeyboardKey(UIKit_GetEventTimestamp([event timestamp]), SDL_RELEASED, scancode); } } - [super pressesCancelled:presses withEvent:event]; + if (SDL_TextInputActive()) { + [super pressesCancelled:presses withEvent:event]; + } } - (void)pressesChanged:(NSSet *)presses withEvent:(UIPressesEvent *)event { /* This is only called when the force of a press changes. */ - [super pressesChanged:presses withEvent:event]; + if (SDL_TextInputActive()) { + [super pressesChanged:presses withEvent:event]; + } } #endif /* TARGET_OS_TV || defined(__IPHONE_9_1) */