diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c index 7bd982a7a..ff079c50e 100644 --- a/src/events/SDL_events.c +++ b/src/events/SDL_events.c @@ -809,7 +809,7 @@ SDL_FlushEvents(Uint32 minType, Uint32 maxType) /* Run the system dependent event loops */ void -SDL_PumpEvents() +SDL_PumpEventsInternal(SDL_bool push_sentinel) { SDL_VideoDevice *_this = SDL_GetVideoDevice(); @@ -836,6 +836,20 @@ SDL_PumpEvents() #endif SDL_SendPendingSignalEvents(); /* in case we had a signal handler fire, etc. */ + + if (push_sentinel && SDL_GetEventState(SDL_POLLSENTINEL) == SDL_ENABLE) { + SDL_Event sentinel; + + SDL_zero(sentinel); + sentinel.type = SDL_POLLSENTINEL; + SDL_PushEvent(&sentinel); + } +} + +void +SDL_PumpEvents() +{ + SDL_PumpEventsInternal(SDL_FALSE); } /* Public functions */ @@ -877,7 +891,7 @@ SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Event * event, c) Periodic processing that takes place in some platform PumpEvents() functions happens d) Signals received in WaitEventTimeout() are turned into SDL events */ - SDL_PumpEvents(); + SDL_PumpEventsInternal(SDL_TRUE); if (!_this->wakeup_lock || SDL_LockMutex(_this->wakeup_lock) == 0) { int status = SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT); @@ -976,15 +990,7 @@ SDL_WaitEventTimeout(SDL_Event * event, int timeout) /* If there isn't a poll sentinel event pending, pump events and add one */ if (SDL_AtomicGet(&SDL_sentinel_pending) == 0) { - SDL_PumpEvents(); - - if (SDL_GetEventState(SDL_POLLSENTINEL) == SDL_ENABLE) { - SDL_Event sentinel; - - SDL_zero(sentinel); - sentinel.type = SDL_POLLSENTINEL; - SDL_PushEvent(&sentinel); - } + SDL_PumpEventsInternal(SDL_TRUE); } /* First check for existing events */ @@ -1031,7 +1037,7 @@ SDL_WaitEventTimeout(SDL_Event * event, int timeout) } for (;;) { - SDL_PumpEvents(); + SDL_PumpEventsInternal(SDL_TRUE); switch (SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)) { case -1: return 0;