SDL_SetEventFilter: Don't flush when removing filter

Don't flush the event queue if the filter paramter is NULL.
This commit is contained in:
Hunter Kvalevog authored and Sam Lantinga committed 2024-05-30 13:06:01 -07:00
1 parent 0136bf2f8f
commit 8604847214
1 file changed
+11 -8
+11 -8
View File
@@ -1310,22 +1310,25 @@ int SDL_PushEvent(SDL_Event *event)
void SDL_SetEventFilter(SDL_EventFilter filter, void *userdata)
{
SDL_EventEntry *event;
SDL_EventEntry *event, *next;
SDL_LockMutex(SDL_event_watchers_lock);
{
/* Set filter and discard pending events */
SDL_EventOK.callback = filter;
SDL_EventOK.userdata = userdata;
/* Flush all events not accpeted by the filter */
SDL_LockMutex(SDL_EventQ.lock);
{
for (event = SDL_EventQ.head; event; event = event->next) {
if (!filter(userdata, &event->event)) {
SDL_CutEvent(event);
if (filter) {
/* Cut all events not accepted by the filter */
SDL_LockMutex(SDL_EventQ.lock);
{
for (event = SDL_EventQ.head; event; event = next) {
next = event->next;
if (!filter(userdata, &event->event)) {
SDL_CutEvent(event);
}
}
}
SDL_UnlockMutex(SDL_EventQ.lock);
}
SDL_UnlockMutex(SDL_EventQ.lock);
}
SDL_UnlockMutex(SDL_event_watchers_lock);
}