fixed handling passthrough option for clickable global animations
[rocksndiamonds.git] / src / events.c
index 2120931852677da9e9a8e70cd4692aa341a77b18..22cfdcd12ebadba2d7084591f3d6ec9bac91ab12 100644 (file)
@@ -649,12 +649,7 @@ void HandleWindowEvent(WindowEvent *event)
          int x, y;
 
          if (game_status == GAME_MODE_SETUP)
-         {
-           // save active virtual buttons (in case of just configuring them)
-           for (x = 0; x < MAX_GRID_XSIZE; x++)
-             for (y = 0; y < MAX_GRID_YSIZE; y++)
-               setup.touch.grid_button[nr][x][y] = overlay.grid_button[x][y];
-         }
+           RedrawSetupScreenAfterScreenRotation(nr);
 
          nr = GRID_ACTIVE_NR();
 
@@ -687,6 +682,7 @@ void HandleFingerEvent_VirtualButtons(FingerEvent *event)
   int x = event->x * overlay.grid_xsize;
   int y = event->y * overlay.grid_ysize;
   int grid_button = overlay.grid_button[x][y];
+  int grid_button_action = GET_ACTION_FROM_GRID_BUTTON(grid_button);
   Key key = (grid_button == CHAR_GRID_BUTTON_LEFT  ? setup.input[0].key.left :
             grid_button == CHAR_GRID_BUTTON_RIGHT ? setup.input[0].key.right :
             grid_button == CHAR_GRID_BUTTON_UP    ? setup.input[0].key.up :
@@ -730,6 +726,11 @@ void HandleFingerEvent_VirtualButtons(FingerEvent *event)
   Error(ERR_DEBUG, "::: key '%s' was '%s' [fingerId: %lld]",
        getKeyNameFromKey(key), key_status_name, event->fingerId);
 
+  if (key_status == KEY_PRESSED)
+    overlay.grid_button_action |= grid_button_action;
+  else
+    overlay.grid_button_action &= ~grid_button_action;
+
   // check if we already know this touch event's finger id
   for (i = 0; i < NUM_TOUCH_FINGERS; i++)
   {
@@ -1674,6 +1675,11 @@ static void HandleKeysSpecial(Key key)
     {
       InsertSolutionTape();
     }
+    else if (is_string_suffix(cheat_input, ":play-solution-tape") ||
+            is_string_suffix(cheat_input, ":pst"))
+    {
+      PlaySolutionTape();
+    }
     else if (is_string_suffix(cheat_input, ":reload-graphics") ||
             is_string_suffix(cheat_input, ":rg"))
     {
@@ -1754,6 +1760,14 @@ static void HandleKeysSpecial(Key key)
       DumpBrush_Small();
     }
   }
+
+  /* special key shortcuts for all game modes */
+  if (is_string_suffix(cheat_input, ":dump-gadget-ids") ||
+      is_string_suffix(cheat_input, ":dgi") ||
+      is_string_suffix(cheat_input, ":DGI"))
+  {
+    DumpGadgetIdentifiers();
+  }
 }
 
 void HandleKeysDebug(Key key)
@@ -2417,24 +2431,38 @@ void HandleJoystick()
 void HandleSpecialGameControllerButtons(Event *event)
 {
 #if defined(TARGET_SDL2)
+  int key_status;
+  Key key;
+
   switch (event->type)
   {
     case SDL_CONTROLLERBUTTONDOWN:
-      if (event->cbutton.button == SDL_CONTROLLER_BUTTON_START)
-       HandleKey(KSYM_space, KEY_PRESSED);
-      else if (event->cbutton.button == SDL_CONTROLLER_BUTTON_BACK)
-       HandleKey(KSYM_Escape, KEY_PRESSED);
-
+      key_status = KEY_PRESSED;
       break;
 
     case SDL_CONTROLLERBUTTONUP:
-      if (event->cbutton.button == SDL_CONTROLLER_BUTTON_START)
-       HandleKey(KSYM_space, KEY_RELEASED);
-      else if (event->cbutton.button == SDL_CONTROLLER_BUTTON_BACK)
-       HandleKey(KSYM_Escape, KEY_RELEASED);
+      key_status = KEY_RELEASED;
+      break;
 
+    default:
+      return;
+  }
+
+  switch (event->cbutton.button)
+  {
+    case SDL_CONTROLLER_BUTTON_START:
+      key = KSYM_space;
+      break;
+
+    case SDL_CONTROLLER_BUTTON_BACK:
+      key = KSYM_Escape;
       break;
+
+    default:
+      return;
   }
+
+  HandleKey(key, key_status);
 #endif
 }