moved waiting for and filtering events to separate function
[rocksndiamonds.git] / src / events.c
index d56edaf9c38596a3c9933c15bbd26de96965c703..10950bd9513e2a993531382756a07658583c7996 100644 (file)
@@ -128,6 +128,19 @@ static boolean SkipPressedMouseMotionEvent(const Event *event)
   return FALSE;
 }
 
+static boolean WaitEventFiltered(Event *event)
+{
+  WaitEvent(event);
+
+  if (!FilterEvents(event))
+    return FALSE;
+
+  if (SkipPressedMouseMotionEvent(event))
+    return FALSE;
+
+  return TRUE;
+}
+
 /* this is especially needed for event modifications for the Android target:
    if mouse coordinates should be modified in the event filter function,
    using a properly installed SDL event filter does not work, because in
@@ -139,20 +152,8 @@ static boolean SkipPressedMouseMotionEvent(const Event *event)
 boolean NextValidEvent(Event *event)
 {
   while (PendingEvent())
-  {
-    boolean handle_this_event = FALSE;
-
-    NextEvent(event);
-
-    if (FilterEvents(event))
-      handle_this_event = TRUE;
-
-    if (SkipPressedMouseMotionEvent(event))
-      handle_this_event = FALSE;
-
-    if (handle_this_event)
+    if (WaitEventFiltered(event))
       return TRUE;
-  }
 
   return FALSE;
 }
@@ -344,7 +345,7 @@ void ClearEventQueue()
   {
     Event event;
 
-    NextEvent(&event);
+    WaitEvent(&event);
 
     switch (event.type)
     {
@@ -392,7 +393,7 @@ void SleepWhileUnmapped()
   {
     Event event;
 
-    NextEvent(&event);
+    WaitEvent(&event);
 
     switch (event.type)
     {
@@ -1275,7 +1276,7 @@ void HandleButton(int mx, int my, int button, int button_nr)
   if (HandleGlobalAnimClicks(mx, my, button))
   {
     /* do not handle this button event anymore */
-    mx = my = -32;     /* force mouse event to be outside screen tiles */
+    return;            /* force mouse event not to be handled at all */
   }
 
   if (button_hold && game_status == GAME_MODE_PLAYING && tape.pausing)