Pārlūkot izejas kodu

SDL_SetEventFilter: Don't flush when removing filter

Don't flush the event queue if the filter paramter is NULL.
Hunter Kvalevog 10 mēneši atpakaļ
vecāks
revīzija
8604847214
1 mainītis faili ar 11 papildinājumiem un 8 dzēšanām
  1. 11 8
      src/events/SDL_events.c

+ 11 - 8
src/events/SDL_events.c

@@ -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);
 }