WINDOW_RESIZED events shouldn't flush WINDOW_SIZE_CHANGED events and vice versa.

This commit is contained in:
Sam Lantinga 2012-09-29 01:10:53 -07:00
parent e4c54831a2
commit 316add4b4b

View file

@ -29,13 +29,26 @@
static int static int
RemovePendingSizeEvents(void * userdata, SDL_Event *event) RemovePendingResizedEvents(void * userdata, SDL_Event *event)
{ {
SDL_Event *new_event = (SDL_Event *)userdata; SDL_Event *new_event = (SDL_Event *)userdata;
if (event->type == SDL_WINDOWEVENT && if (event->type == SDL_WINDOWEVENT &&
(event->window.event == SDL_WINDOWEVENT_RESIZED || event->window.event == SDL_WINDOWEVENT_RESIZED &&
event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) && event->window.windowID == new_event->window.windowID) {
/* We're about to post a new size event, drop the old one */
return 0;
}
return 1;
}
static int
RemovePendingSizeChangedEvents(void * userdata, SDL_Event *event)
{
SDL_Event *new_event = (SDL_Event *)userdata;
if (event->type == SDL_WINDOWEVENT &&
event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED &&
event->window.windowID == new_event->window.windowID) { event->window.windowID == new_event->window.windowID) {
/* We're about to post a new size event, drop the old one */ /* We're about to post a new size event, drop the old one */
return 0; return 0;
@ -169,9 +182,11 @@ SDL_SendWindowEvent(SDL_Window * window, Uint8 windowevent, int data1,
event.window.windowID = window->id; event.window.windowID = window->id;
/* Fixes queue overflow with resize events that aren't processed */ /* Fixes queue overflow with resize events that aren't processed */
if (windowevent == SDL_WINDOWEVENT_RESIZED || if (windowevent == SDL_WINDOWEVENT_RESIZED) {
windowevent == SDL_WINDOWEVENT_SIZE_CHANGED) { SDL_FilterEvents(RemovePendingResizedEvents, &event);
SDL_FilterEvents(RemovePendingSizeEvents, &event); }
if (windowevent == SDL_WINDOWEVENT_SIZE_CHANGED) {
SDL_FilterEvents(RemovePendingSizeChangedEvents, &event);
} }
if (windowevent == SDL_WINDOWEVENT_MOVED) { if (windowevent == SDL_WINDOWEVENT_MOVED) {
SDL_FilterEvents(RemovePendingMoveEvents, &event); SDL_FilterEvents(RemovePendingMoveEvents, &event);