fixed text event handling for newer SDL versions on Android
[rocksndiamonds.git] / src / events.c
index d48cf4801b239fb2a9dee795f67708c77487f089..2678fa28b94c227855bd4f772ae5bcc57615f31c 100644 (file)
@@ -464,7 +464,7 @@ static void SetPlayerMouseAction(int mx, int my, int button)
   local_player->mouse_action.ly = ly;
   local_player->mouse_action.button = button;
 
-  if (tape.recording && tape.pausing && tape.event_mask == GAME_EVENTS_MOUSE)
+  if (tape.recording && tape.pausing && tape.use_mouse_actions)
   {
     // un-pause a paused game only if mouse button was newly pressed down
     if (new_button)
@@ -1375,18 +1375,14 @@ static void HandleButtonOrFinger(int mx, int my, int button)
   {
     if (strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER))
       HandleButtonOrFinger_FollowFinger(mx, my, button);
-    else if (game.event_mask == GAME_EVENTS_MOUSE && valid_mouse_event)
+    else if (game.use_mouse_actions && valid_mouse_event)
       SetPlayerMouseAction(mx, my, button);
   }
 }
 
-static boolean checkTextInputKeyModState(void)
+static boolean checkTextInputKey(Key key)
 {
-  // when playing, only handle raw key events and ignore text input
-  if (game_status == GAME_MODE_PLAYING)
-    return FALSE;
-
-  return ((GetKeyModState() & KMOD_TextInput) != KMOD_None);
+  return (textinput_status && KSYM_PRINTABLE(key));
 }
 
 void HandleTextEvent(TextEvent *event)
@@ -1404,16 +1400,12 @@ void HandleTextEvent(TextEvent *event)
        GetKeyModState());
 #endif
 
-#if !defined(HAS_SCREEN_KEYBOARD)
-  // non-mobile devices: only handle key input with modifier keys pressed here
-  // (every other key input is handled directly as physical key input event)
-  if (!checkTextInputKeyModState())
-    return;
-#endif
-
-  // process text input as "classic" (with uppercase etc.) key input event
-  HandleKey(key, KEY_PRESSED);
-  HandleKey(key, KEY_RELEASED);
+  if (checkTextInputKey(key))
+  {
+    // process printable keys (with uppercase etc.) in text input mode
+    HandleKey(key, KEY_PRESSED);
+    HandleKey(key, KEY_RELEASED);
+  }
 }
 
 void HandlePauseResumeEvent(PauseResumeEvent *event)
@@ -1470,8 +1462,8 @@ void HandleKeyEvent(KeyEvent *event)
 
   HandleKeyModState(keymod, key_status);
 
-  // only handle raw key input without text modifier keys pressed
-  if (!checkTextInputKeyModState())
+  // process all keys if not in text input mode or if non-printable keys
+  if (!checkTextInputKey(key))
     HandleKey(key, key_status);
 }
 
@@ -2098,7 +2090,7 @@ void HandleKey(Key key, int key_status)
       if (stored_player[pnr].snap_action)
        stored_player[pnr].action |= JOY_BUTTON_SNAP;
 
-      if (tape.recording && tape.pausing && tape.event_mask == GAME_EVENTS_KEYS)
+      if (tape.recording && tape.pausing && tape.use_key_actions)
       {
        if (tape.single_step)
        {
@@ -2633,7 +2625,7 @@ void HandleJoystick(void)
        return;
       }
 
-      if (tape.recording && tape.pausing && tape.event_mask == GAME_EVENTS_KEYS)
+      if (tape.recording && tape.pausing && tape.use_key_actions)
       {
        if (tape.single_step)
        {