# HG changeset patch # User Sam Lantinga # Date 1260924933 0 # Node ID 41cd18e059654dfcf61fe6919fdd4d8f62b3ec53 # Parent 6bb9952d5029fd2e01370385a5e2db3eb64071cf Fixed bug #666 Don't let the event queue overflow with resize events diff -r 6bb9952d5029 -r 41cd18e05965 src/events/SDL_windowevents.c --- a/src/events/SDL_windowevents.c Wed Dec 16 00:44:53 2009 +0000 +++ b/src/events/SDL_windowevents.c Wed Dec 16 00:55:33 2009 +0000 @@ -28,6 +28,21 @@ #include "SDL_mouse_c.h" #include "../video/SDL_sysvideo.h" + +static int +RemovePendingSizeEvents(void * userdata, SDL_Event *event) +{ + SDL_Event *new_event = (SDL_Event *)userdata; + + if (event->type == SDL_WINDOWEVENT && + event->window.event == SDL_WINDOWEVENT_RESIZED && + event->window.windowID == new_event->window.windowID) { + /* We're about to post a new size event, drop the old one */ + return 0; + } + return 1; +} + int SDL_SendWindowEvent(SDL_WindowID windowID, Uint8 windowevent, int data1, int data2) @@ -138,6 +153,12 @@ event.window.data1 = data1; event.window.data2 = data2; event.window.windowID = windowID; + + /* Fixes queue overflow with resize events that aren't processed */ + if (windowevent == SDL_WINDOWEVENT_RESIZED) { + SDL_FilterEvents(RemovePendingSizeEvents, &event); + } + posted = (SDL_PushEvent(&event) > 0); } return (posted);