added forcing user to restart program after adding level collection
[rocksndiamonds.git] / src / events.c
index 2810e84f11643b1cb09a99bde0faf69efb90dafc..87eaa2b9be911593392a6107d15413ee3ec6fab3 100644 (file)
@@ -1551,6 +1551,15 @@ static int HandleDropFileEvent(char *filename)
   // add extracted level or artwork set to tree info structure
   AddTreeSetToTreeInfo(tree_node, directory, top_dir, tree_type);
 
+  // force restart after adding level collection
+  if (getTreeInfoFromIdentifier(TREE_FIRST_NODE(tree_type), top_dir) == NULL)
+  {
+    Request("Program must be restarted after adding a new level collection!",
+           REQ_CONFIRM);
+
+    CloseAllAndExit(0);
+  }
+
   // update menu screen (and possibly change current level set)
   DrawScreenAfterAddingSet(top_dir, tree_type);
 
@@ -2204,6 +2213,9 @@ void HandleKey(Key key, int key_status)
     // reset flag to ignore repeated "key pressed" events after key release
     ignore_repeated_key = FALSE;
 
+    // send key release event to global animation event handling
+    HandleGlobalAnimClicks(-1, -1, KEY_RELEASED, FALSE);
+
     return;
   }
 
@@ -2556,10 +2568,10 @@ static void HandleTileCursor(int dx, int dy, int button)
     int new_xpos = tile_cursor.xpos + dx;
     int new_ypos = tile_cursor.ypos + dy;
 
-    if (!IN_LEV_FIELD(new_xpos, old_ypos))
+    if (!IN_LEV_FIELD(new_xpos, old_ypos) || !IN_SCR_FIELD(new_xpos, old_ypos))
       new_xpos = old_xpos;
 
-    if (!IN_LEV_FIELD(old_xpos, new_ypos))
+    if (!IN_LEV_FIELD(old_xpos, new_ypos) || !IN_SCR_FIELD(old_xpos, new_ypos))
       new_ypos = old_ypos;
 
     SetTileCursorTargetXY(new_xpos, new_ypos);
@@ -2614,12 +2626,15 @@ void HandleJoystick(void)
   int up       = joy & JOY_UP;
   int down     = joy & JOY_DOWN;
   int button   = joy & JOY_BUTTON;
-  int newbutton        = (AnyJoystickButton() == JOY_BUTTON_NEW_PRESSED);
+  int anybutton = AnyJoystickButton();
+  int newbutton        = (anybutton == JOY_BUTTON_NEW_PRESSED);
   int dx       = (left ? -1    : right ? 1     : 0);
   int dy       = (up   ? -1    : down  ? 1     : 0);
   boolean use_delay_value_first = (joytest != joytest_last);
+  boolean new_button_event = (anybutton == JOY_BUTTON_NEW_PRESSED ||
+                             anybutton == JOY_BUTTON_NEW_RELEASED);
 
-  if (HandleGlobalAnimClicks(-1, -1, newbutton, FALSE))
+  if (new_button_event && HandleGlobalAnimClicks(-1, -1, newbutton, FALSE))
   {
     // do not handle this button event anymore
     return;