Skip to content

Commit f76caa5

Browse files
committed
Merge pull request OpenRA#4290 from pchote/text-fix
Attempt to parse unexpected key events as text.
2 parents 0c19912 + 719c9c1 commit f76caa5

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

OpenRA.FileFormats/Exts.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,6 @@ public static bool HasModifier(this Modifiers k, Modifiers mod)
8282
return (k & mod) == mod;
8383
}
8484

85-
public static bool IsValidInput(this KeyInput key)
86-
{
87-
return char.IsLetter(key.UnicodeChar) || char.IsDigit(key.UnicodeChar) ||
88-
char.IsSymbol(key.UnicodeChar) || char.IsSeparator(key.UnicodeChar) ||
89-
char.IsPunctuation(key.UnicodeChar);
90-
}
9185

9286
public static V GetOrAdd<K, V>(this Dictionary<K, V> d, K k)
9387
where V : new()

OpenRA.Renderer.SdlCommon/SdlInput.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,16 @@ public class SdlInput
151151
{ Sdl.SDLK_UNDO, Keycode.UNDO },
152152
};
153153

154+
154155
MouseButton lastButtonBits = (MouseButton)0;
155156

157+
static bool IsValidInput(char c)
158+
{
159+
return char.IsLetter(c) || char.IsDigit(c) ||
160+
char.IsSymbol(c) || char.IsSeparator(c) ||
161+
char.IsPunctuation(c);
162+
}
163+
156164
MouseButton MakeButton(byte b)
157165
{
158166
return b == Sdl.SDL_BUTTON_LEFT ? MouseButton.Left
@@ -242,7 +250,14 @@ public void PumpInput(IInputHandler inputHandler)
242250
// Drop unknown keys
243251
Keycode keyCode;
244252
if (!KeyRemap.TryGetValue(e.key.keysym.sym, out keyCode))
253+
{
254+
// Try parsing it as text
255+
var c = (char)e.key.keysym.unicode;
256+
if (IsValidInput(c))
257+
inputHandler.OnTextInput(c.ToString());
258+
245259
break;
260+
}
246261

247262
var type = e.type == Sdl.SDL_KEYDOWN ?
248263
KeyInputEvent.Down : KeyInputEvent.Up;
@@ -269,7 +284,7 @@ public void PumpInput(IInputHandler inputHandler)
269284
else
270285
inputHandler.OnKeyInput(keyEvent);
271286

272-
if (keyEvent.IsValidInput())
287+
if (IsValidInput(keyEvent.UnicodeChar))
273288
inputHandler.OnTextInput(keyEvent.UnicodeChar.ToString());
274289

275290
break;

0 commit comments

Comments
 (0)