fixed handling global animation key actions when mouse button is pressed
authorHolger Schemel <info@artsoft.org>
Wed, 20 Mar 2019 18:18:54 +0000 (19:18 +0100)
committerHolger Schemel <info@artsoft.org>
Wed, 20 Mar 2019 19:03:33 +0000 (20:03 +0100)
When handling key actions for global animations (like pressing "Enter"
or "Escape") which are translated into global animation click events,
they were ignored if a "real" mouse button is already held pressed at
the same time. This can especially happen with animation event actions
that simulate key press events when clicking on global animations, so
the key actions were ignored if the mouse button was held down for too
long.

This change forces key actions of global animations to be handled even
if a mouse button was pressed at the same time.

src/anim.c
src/anim.h
src/events.c

index 2ebf520f79d793a365b5acdedfbdc77a5ea263e5..71f9958857020ce938ee3edc49277b18333fa9a0 100644 (file)
@@ -1795,7 +1795,7 @@ static void ResetGlobalAnim_Clicked(void)
   InitGlobalAnim_Clicked(-1, -1, ANIM_CLICKED_RESET);
 }
 
-boolean HandleGlobalAnimClicks(int mx, int my, int button)
+boolean HandleGlobalAnimClicks(int mx, int my, int button, boolean force_click)
 {
   static boolean click_consumed = FALSE;
   static int last_button = 0;
@@ -1803,6 +1803,9 @@ boolean HandleGlobalAnimClicks(int mx, int my, int button)
   boolean release_event;
   boolean click_consumed_current = click_consumed;
 
+  if (button != 0 && force_click)
+    last_button = 0;
+
   // check if button state has changed since last invocation
   press_event   = (button != 0 && last_button == 0);
   release_event = (button == 0 && last_button != 0);
index 6b87a0412775dfa7b7fe2fe3e13c3b4e6ba33173..cbaeda2b596134d25c17ecb52e92b5c03b47418e 100644 (file)
@@ -18,6 +18,6 @@ int getAnimationFrame(int, int, int, int, int);
 void InitGlobalAnimations(void);
 void DrawGlobalAnimations(int, int);
 
-boolean HandleGlobalAnimClicks(int, int, int);
+boolean HandleGlobalAnimClicks(int, int, int, boolean);
 
 #endif
index 52595e2512fd177b4127a1bd4af4b3cf13579275..9348533aaeed0e42d6e0f4a8107de44db1805c37 100644 (file)
@@ -1745,7 +1745,7 @@ void HandleButton(int mx, int my, int button, int button_nr)
       !virtual_button_pressed));
 #endif
 
-  if (HandleGlobalAnimClicks(mx, my, button))
+  if (HandleGlobalAnimClicks(mx, my, button, FALSE))
   {
     // do not handle this button event anymore
     return;            // force mouse event not to be handled at all
@@ -2249,7 +2249,7 @@ void HandleKey(Key key, int key_status)
 
   if (HandleGlobalAnimClicks(-1, -1, (key == KSYM_space ||
                                      key == KSYM_Return ||
-                                     key == KSYM_Escape)))
+                                     key == KSYM_Escape), TRUE))
   {
     // do not handle this key event anymore
     if (key != KSYM_Escape)    // always allow ESC key to be handled
@@ -2560,7 +2560,7 @@ void HandleJoystick(void)
   int dy       = (up   ? -1    : down  ? 1     : 0);
   boolean use_delay_value_first = (joytest != joytest_last);
 
-  if (HandleGlobalAnimClicks(-1, -1, newbutton))
+  if (HandleGlobalAnimClicks(-1, -1, newbutton, FALSE))
   {
     // do not handle this button event anymore
     return;