X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=b51839817a0e480b37be24bc8fb26bab2aee0aca;hb=1db2f63d60082eadc1ef59bb872060edb1c7efb6;hp=e575a9814d2cfde95f9bcfb8c4f1067ff01aca77;hpb=bbb1e1a4759841b63e3651b93cb7b28724146d56;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index e575a981..b5183981 100644 --- a/src/events.c +++ b/src/events.c @@ -128,6 +128,19 @@ static boolean SkipPressedMouseMotionEvent(const Event *event) return FALSE; } +static boolean WaitValidEvent(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 (WaitValidEvent(event)) return TRUE; - } return FALSE; } @@ -340,12 +341,10 @@ void EventLoop(void) void ClearEventQueue() { - while (PendingEvent()) - { - Event event; - - NextEvent(&event); + Event event; + while (NextValidEvent(&event)) + { switch (event.type) { case EVENT_BUTTONRELEASE: @@ -392,7 +391,8 @@ void SleepWhileUnmapped() { Event event; - NextEvent(&event); + if (!WaitValidEvent(&event)) + continue; switch (event.type) {