improved code to type player name in main menu
[rocksndiamonds.git] / src / events.c
index 41b60832fa50f92d165da235a709403b24d034d4..f2f645933e6be727a2e8bb39a4637fffe4740e59 100644 (file)
@@ -43,6 +43,7 @@ static boolean stop_processing_events = FALSE;
 
 
 // forward declarations for internal use
+static void ClearTouchInfo(void);
 static void HandleNoEvent(void);
 static void HandleEventActions(void);
 
@@ -407,6 +408,7 @@ void ClearEventQueue(void)
        button_status = MB_RELEASED;
        break;
 
+      case EVENT_FINGERRELEASE:
       case EVENT_KEYRELEASE:
        ClearPlayerAction();
        break;
@@ -442,6 +444,10 @@ void ClearPlayerAction(void)
     stored_player[i].snap_action = 0;
   }
 
+  // simulate finger release events for still pressed virtual buttons
+  overlay.grid_button_action = JOY_NO_ACTION;
+
+  ClearTouchInfo();
   ClearJoystickState();
   ClearPlayerMouseAction();
 }
@@ -667,19 +673,10 @@ void HandleWindowEvent(WindowEvent *event)
        // check if screen orientation has changed (should always be true here)
        if (nr != GRID_ACTIVE_NR())
        {
-         int x, y;
-
          if (game_status == GAME_MODE_SETUP)
            RedrawSetupScreenAfterScreenRotation(nr);
 
-         nr = GRID_ACTIVE_NR();
-
-         overlay.grid_xsize = setup.touch.grid_xsize[nr];
-         overlay.grid_ysize = setup.touch.grid_ysize[nr];
-
-         for (x = 0; x < MAX_GRID_XSIZE; x++)
-           for (y = 0; y < MAX_GRID_YSIZE; y++)
-             overlay.grid_button[x][y] = setup.touch.grid_button[nr][x][y];
+         SetOverlayGridSizeAndButtons();
        }
       }
     }
@@ -708,6 +705,14 @@ static void SetTouchInfo(int pos, SDL_FingerID finger_id, int counter,
   touch_info[pos].action = action;
 }
 
+static void ClearTouchInfo(void)
+{
+  int i;
+
+  for (i = 0; i < NUM_TOUCH_FINGERS; i++)
+    SetTouchInfo(i, 0, 0, 0, JOY_NO_ACTION);
+}
+
 static void HandleFingerEvent_VirtualButtons(FingerEvent *event)
 {
   int x = event->x * overlay.grid_xsize;
@@ -1744,7 +1749,7 @@ void HandleButton(int mx, int my, int button, int button_nr)
       break;
 
     case GAME_MODE_PSEUDO_TYPENAME:
-      HandleTypeName(0, KSYM_Return);
+      HandleTypeName(KSYM_Return);
       break;
 
     case GAME_MODE_LEVELS:
@@ -1885,6 +1890,10 @@ static void HandleKeysSpecial(Key key)
     {
       global.show_frames_per_second = !global.show_frames_per_second;
     }
+    else if (strSuffix(cheat_input, ":xsn"))
+    {
+      tile_cursor.xsn_debug = TRUE;
+    }
   }
   else if (game_status == GAME_MODE_PLAYING)
   {
@@ -2288,7 +2297,7 @@ void HandleKey(Key key, int key_status)
   switch (game_status)
   {
     case GAME_MODE_PSEUDO_TYPENAME:
-      HandleTypeName(0, key);
+      HandleTypeName(key);
       break;
 
     case GAME_MODE_TITLE: