diff --git a/source/lib/input.cpp b/source/lib/input.cpp index 6f7b4d18df..6a8feb03f7 100644 --- a/source/lib/input.cpp +++ b/source/lib/input.cpp @@ -77,14 +77,17 @@ void in_push_priority_event(const SDL_Event_* event) priority_events.push_back(*event); } +int in_poll_priority_event(SDL_Event_* event) +{ + if (priority_events.empty()) + return 0; + + *event = priority_events.front(); + priority_events.pop_front(); + return 1; +} + int in_poll_event(SDL_Event_* event) { - if (!priority_events.empty()) - { - *event = priority_events.front(); - priority_events.pop_front(); - return 1; - } - - return SDL_PollEvent(&event->ev); + return in_poll_priority_event(event) ? 1 : SDL_PollEvent(&event->ev); } diff --git a/source/lib/input.h b/source/lib/input.h index 851e638795..9be8ffe60d 100644 --- a/source/lib/input.h +++ b/source/lib/input.h @@ -59,7 +59,11 @@ extern void in_dispatch_event(const SDL_Event_* event); // be returned by in_poll_event before any standard SDL events extern void in_push_priority_event(const SDL_Event_* event); -// reads events that were pushed by in_push_priority_event, or (if there are +// reads events that were pushed by in_push_priority_event +// returns 1 if an event was read, 0 otherwise. +extern int in_poll_priority_event(SDL_Event_* event); + +// reads events that were pushed by in_push_priority_event, or, if there are // no high-priority events) reads from the SDL event queue with SDL_PollEvent. // returns 1 if an event was read, 0 otherwise. extern int in_poll_event(SDL_Event_* event); diff --git a/source/tools/atlas/GameInterface/GameLoop.cpp b/source/tools/atlas/GameInterface/GameLoop.cpp index 44c575e10d..98912cd27b 100644 --- a/source/tools/atlas/GameInterface/GameLoop.cpp +++ b/source/tools/atlas/GameInterface/GameLoop.cpp @@ -218,7 +218,7 @@ static void* RunEngine(void* data) // Pump SDL events (e.g. hotkeys) SDL_Event_ ev; - while (in_poll_event(&ev)) + while (in_poll_priority_event(&ev)) in_dispatch_event(&ev); if (g_GUI)