mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
fix bug with SDL text input that occurs when multiple responders occur on the screen. (Tested with 2 responders.)
This commit is contained in:
parent
f6b8ef126d
commit
3ecbb4b7e5
|
|
@ -486,6 +486,19 @@ void PlatformWindowSDL::_triggerKeyNotify(const SDL_Event& evt)
|
|||
{
|
||||
keyEvent.trigger(getWindowId(), torqueModifiers, inputAction, torqueKey);
|
||||
//Con::printf("Key %d : %d", tKey.sym, inputAction);
|
||||
|
||||
if (inputAction == IA_MAKE && SDL_IsTextInputActive())
|
||||
{
|
||||
// We have to check if we already have a first responder active.
|
||||
// We don't want to type the character if it actually creates another responder!
|
||||
if (mWindowInputGenerator->lastKeyWasGlobalActionMap())
|
||||
{
|
||||
// Turn off Text input, and the next frame turn it back on. This tells SDL
|
||||
// to not generate a text event for this global action map key.
|
||||
SDL_StopTextInput();
|
||||
mOwningManager->updateSDLTextInputState(PlatformWindowManagerSDL::KeyboardInputState::TEXT_INPUT);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,8 @@ WindowInputGenerator::WindowInputGenerator( PlatformWindow *window ) :
|
|||
mLastCursorPos(0,0),
|
||||
mClampToWindow(true),
|
||||
mFocused(false),
|
||||
mPixelsPerMickey(1.0f)
|
||||
mPixelsPerMickey(1.0f),
|
||||
mLastPressWasGlobalActionMap(false)
|
||||
{
|
||||
AssertFatal(mWindow, "NULL PlatformWindow on WindowInputGenerator creation");
|
||||
|
||||
|
|
@ -82,6 +83,9 @@ WindowInputGenerator::~WindowInputGenerator()
|
|||
//-----------------------------------------------------------------------------
|
||||
void WindowInputGenerator::generateInputEvent( InputEventInfo &inputEvent )
|
||||
{
|
||||
// Reset last press being global
|
||||
mLastPressWasGlobalActionMap = false;
|
||||
|
||||
if (!mInputController)// || !mFocused)
|
||||
return;
|
||||
|
||||
|
|
@ -102,7 +106,10 @@ void WindowInputGenerator::generateInputEvent( InputEventInfo &inputEvent )
|
|||
|
||||
// Give the ActionMap first shot.
|
||||
if (ActionMap::handleEventGlobal(&inputEvent))
|
||||
{
|
||||
mLastPressWasGlobalActionMap = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (mInputController->processInputEvent(inputEvent))
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -51,6 +51,9 @@ class WindowInputGenerator
|
|||
/// (one unit of mouse movement is a mickey) to units in the GUI.
|
||||
F32 mPixelsPerMickey;
|
||||
|
||||
/// This tells us if the last key we pressed was used from the global action map.
|
||||
bool mLastPressWasGlobalActionMap;
|
||||
|
||||
// Event Handlers
|
||||
void handleMouseButton(WindowId did, U32 modifier, U32 action, U16 button);
|
||||
void handleMouseWheel (WindowId did, U32 modifier, S32 wheelDeltaX, S32 wheelDeltaY);
|
||||
|
|
@ -83,6 +86,13 @@ class WindowInputGenerator
|
|||
/// event even if it maps to a character input event.
|
||||
bool wantAsKeyboardEvent( U32 modifiers, U32 key );
|
||||
|
||||
/// Tells us if the last key was used within the global action map.
|
||||
/// @return true if the key was a global action map key, false otherwise.
|
||||
/// @note Useful and currently used to tell if we just opened the console
|
||||
/// by using the console key. Currently this is used to fix a bug in SDL
|
||||
/// but it is not limited to that use.
|
||||
bool lastKeyWasGlobalActionMap() const { return mLastPressWasGlobalActionMap; }
|
||||
|
||||
void addAcceleratorKey( void *hnd, const String &cmd, U32 keycode, U32 modifier)
|
||||
{
|
||||
AccKeyMap acc;
|
||||
|
|
|
|||
Loading…
Reference in a new issue