fixed handling global animation click events (finally)
[rocksndiamonds.git] / src / anim.c
index 0aa1c0f4ff12a0970415d9c2b5f67f87429f8b04..1e155f9eeacec35859e67fc38087bb8a54f8cb30 100644 (file)
@@ -1760,6 +1760,7 @@ static void InitGlobalAnim_Clickable(void)
 static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event)
 {
   boolean click_consumed = FALSE;
+  boolean anything_clicked = FALSE;
   boolean any_part_clicked = FALSE;
   boolean any_event_action = FALSE;
   int mode_nr;
@@ -1803,7 +1804,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event)
                 part->old_anim_nr + 1, part->old_nr + 1);
 #endif
 
-         part->clicked = TRUE;
+         anything_clicked = part->clicked = TRUE;
          click_consumed |= clickConsumed(part);
        }
 
@@ -1816,7 +1817,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event)
                 part->old_anim_nr + 1, part->old_nr + 1);
 #endif
 
-         part->clicked = TRUE;
+         anything_clicked = part->clicked = TRUE;
          click_consumed |= clickConsumed(part);
        }
 
@@ -1846,7 +1847,7 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event)
                   part->old_anim_nr + 1, part->old_nr + 1);
 #endif
 
-           part->clicked = TRUE;
+           anything_clicked = part->clicked = TRUE;
            click_consumed |= clickConsumed(part);
          }
 
@@ -1858,13 +1859,16 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, int clicked_event)
     }
   }
 
-  if (click_consumed)
+  if (anything_clicked)
   {
     handle_click = TRUE;
 
     HandleGlobalAnim(ANIM_CONTINUE, game_status);
 
     handle_click = FALSE;
+
+    // prevent ignoring release event if processed within same game frame
+    StopProcessingEvents();
   }
 
   return (click_consumed || any_event_action);