|
@@ -287,52 +287,48 @@ SDL_PeepEvents(SDL_Event * events, int numevents, SDL_eventaction action,
|
|
|
} else {
|
|
|
SDL_EventEntry *entry, *next;
|
|
|
SDL_SysWMEntry *wmmsg, *wmmsg_next;
|
|
|
- SDL_Event tmpevent;
|
|
|
Uint32 type;
|
|
|
|
|
|
- /* If 'events' is NULL, just see if they exist */
|
|
|
- if (events == NULL) {
|
|
|
- action = SDL_PEEKEVENT;
|
|
|
- numevents = 1;
|
|
|
- events = &tmpevent;
|
|
|
- }
|
|
|
-
|
|
|
- /* Clean out any used wmmsg data
|
|
|
- FIXME: Do we want to retain the data for some period of time?
|
|
|
- */
|
|
|
- for (wmmsg = SDL_EventQ.wmmsg_used; wmmsg; wmmsg = wmmsg_next) {
|
|
|
- wmmsg_next = wmmsg->next;
|
|
|
- wmmsg->next = SDL_EventQ.wmmsg_free;
|
|
|
- SDL_EventQ.wmmsg_free = wmmsg;
|
|
|
+ if (action == SDL_GETEVENT) {
|
|
|
+ /* Clean out any used wmmsg data
|
|
|
+ FIXME: Do we want to retain the data for some period of time?
|
|
|
+ */
|
|
|
+ for (wmmsg = SDL_EventQ.wmmsg_used; wmmsg; wmmsg = wmmsg_next) {
|
|
|
+ wmmsg_next = wmmsg->next;
|
|
|
+ wmmsg->next = SDL_EventQ.wmmsg_free;
|
|
|
+ SDL_EventQ.wmmsg_free = wmmsg;
|
|
|
+ }
|
|
|
+ SDL_EventQ.wmmsg_used = NULL;
|
|
|
}
|
|
|
- SDL_EventQ.wmmsg_used = NULL;
|
|
|
|
|
|
- for (entry = SDL_EventQ.head; entry && used < numevents; entry = next) {
|
|
|
+ for (entry = SDL_EventQ.head; entry && (!events || used < numevents); entry = next) {
|
|
|
next = entry->next;
|
|
|
type = entry->event.type;
|
|
|
if (minType <= type && type <= maxType) {
|
|
|
- events[used] = entry->event;
|
|
|
- if (entry->event.type == SDL_SYSWMEVENT) {
|
|
|
- /* We need to copy the wmmsg somewhere safe.
|
|
|
- For now we'll guarantee it's valid at least until
|
|
|
- the next call to SDL_PeepEvents()
|
|
|
- */
|
|
|
- if (SDL_EventQ.wmmsg_free) {
|
|
|
- wmmsg = SDL_EventQ.wmmsg_free;
|
|
|
- SDL_EventQ.wmmsg_free = wmmsg->next;
|
|
|
- } else {
|
|
|
- wmmsg = (SDL_SysWMEntry *)SDL_malloc(sizeof(*wmmsg));
|
|
|
+ if (events) {
|
|
|
+ events[used] = entry->event;
|
|
|
+ if (entry->event.type == SDL_SYSWMEVENT) {
|
|
|
+ /* We need to copy the wmmsg somewhere safe.
|
|
|
+ For now we'll guarantee it's valid at least until
|
|
|
+ the next call to SDL_PeepEvents()
|
|
|
+ */
|
|
|
+ if (SDL_EventQ.wmmsg_free) {
|
|
|
+ wmmsg = SDL_EventQ.wmmsg_free;
|
|
|
+ SDL_EventQ.wmmsg_free = wmmsg->next;
|
|
|
+ } else {
|
|
|
+ wmmsg = (SDL_SysWMEntry *)SDL_malloc(sizeof(*wmmsg));
|
|
|
+ }
|
|
|
+ wmmsg->msg = *entry->event.syswm.msg;
|
|
|
+ wmmsg->next = SDL_EventQ.wmmsg_used;
|
|
|
+ SDL_EventQ.wmmsg_used = wmmsg;
|
|
|
+ events[used].syswm.msg = &wmmsg->msg;
|
|
|
}
|
|
|
- wmmsg->msg = *entry->event.syswm.msg;
|
|
|
- wmmsg->next = SDL_EventQ.wmmsg_used;
|
|
|
- SDL_EventQ.wmmsg_used = wmmsg;
|
|
|
- events[used].syswm.msg = &wmmsg->msg;
|
|
|
- }
|
|
|
- ++used;
|
|
|
|
|
|
- if (action == SDL_GETEVENT) {
|
|
|
- SDL_CutEvent(entry);
|
|
|
+ if (action == SDL_GETEVENT) {
|
|
|
+ SDL_CutEvent(entry);
|
|
|
+ }
|
|
|
}
|
|
|
+ ++used;
|
|
|
}
|
|
|
}
|
|
|
}
|