Merge pull request #4290 from pchote/text-fix
Attempt to parse unexpected key events as text.
This commit is contained in:
@@ -82,12 +82,6 @@ namespace OpenRA
|
|||||||
return (k & mod) == mod;
|
return (k & mod) == mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsValidInput(this KeyInput key)
|
|
||||||
{
|
|
||||||
return char.IsLetter(key.UnicodeChar) || char.IsDigit(key.UnicodeChar) ||
|
|
||||||
char.IsSymbol(key.UnicodeChar) || char.IsSeparator(key.UnicodeChar) ||
|
|
||||||
char.IsPunctuation(key.UnicodeChar);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static V GetOrAdd<K, V>(this Dictionary<K, V> d, K k)
|
public static V GetOrAdd<K, V>(this Dictionary<K, V> d, K k)
|
||||||
where V : new()
|
where V : new()
|
||||||
|
|||||||
@@ -151,8 +151,16 @@ namespace OpenRA.Renderer.SdlCommon
|
|||||||
{ Sdl.SDLK_UNDO, Keycode.UNDO },
|
{ Sdl.SDLK_UNDO, Keycode.UNDO },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
MouseButton lastButtonBits = (MouseButton)0;
|
MouseButton lastButtonBits = (MouseButton)0;
|
||||||
|
|
||||||
|
static bool IsValidInput(char c)
|
||||||
|
{
|
||||||
|
return char.IsLetter(c) || char.IsDigit(c) ||
|
||||||
|
char.IsSymbol(c) || char.IsSeparator(c) ||
|
||||||
|
char.IsPunctuation(c);
|
||||||
|
}
|
||||||
|
|
||||||
MouseButton MakeButton(byte b)
|
MouseButton MakeButton(byte b)
|
||||||
{
|
{
|
||||||
return b == Sdl.SDL_BUTTON_LEFT ? MouseButton.Left
|
return b == Sdl.SDL_BUTTON_LEFT ? MouseButton.Left
|
||||||
@@ -242,7 +250,14 @@ namespace OpenRA.Renderer.SdlCommon
|
|||||||
// Drop unknown keys
|
// Drop unknown keys
|
||||||
Keycode keyCode;
|
Keycode keyCode;
|
||||||
if (!KeyRemap.TryGetValue(e.key.keysym.sym, out keyCode))
|
if (!KeyRemap.TryGetValue(e.key.keysym.sym, out keyCode))
|
||||||
|
{
|
||||||
|
// Try parsing it as text
|
||||||
|
var c = (char)e.key.keysym.unicode;
|
||||||
|
if (IsValidInput(c))
|
||||||
|
inputHandler.OnTextInput(c.ToString());
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
var type = e.type == Sdl.SDL_KEYDOWN ?
|
var type = e.type == Sdl.SDL_KEYDOWN ?
|
||||||
KeyInputEvent.Down : KeyInputEvent.Up;
|
KeyInputEvent.Down : KeyInputEvent.Up;
|
||||||
@@ -269,7 +284,7 @@ namespace OpenRA.Renderer.SdlCommon
|
|||||||
else
|
else
|
||||||
inputHandler.OnKeyInput(keyEvent);
|
inputHandler.OnKeyInput(keyEvent);
|
||||||
|
|
||||||
if (keyEvent.IsValidInput())
|
if (IsValidInput(keyEvent.UnicodeChar))
|
||||||
inputHandler.OnTextInput(keyEvent.UnicodeChar.ToString());
|
inputHandler.OnTextInput(keyEvent.UnicodeChar.ToString());
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user