|
Size: 2585
Comment: Added note about the interaction of SDL_EventState and SDL_SetEventFilter.
|
Size: 2543
Comment: Fixed explanatory note regarding the interaction of SDL_SetEventFilter, SDL_PushEvent, and SDL_PeepEvent to match actual behavior in source code.
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 48: | Line 48: |
| <<Color2(green,Should this be noted here? Is this no longer valid in 2.0?)>> *Note: Events pushed onto the queue with [[SDL_PushEvent]]() or [[SDL_PeepEvents]]() do not get passed through the event filter.* |
Note: Events pushed onto the queue with [[SDL_PushEvent]]() get passed through the event filter, but events pushed onto the queue with or [[SDL_PeepEvents]]() do not. |
DRAFT |
SDL_SetEventFilter
Use this function to set up a filter to process all events before they change internal state and are posted to the internal event queue.
Syntax
void SDL_SetEventFilter(SDL_EventFilter filter,
void* userdata)
Function Parameters
filter |
the function to call when an event happens; see Remarks for details |
userdata |
a pointer that is passed to filter |
Code Examples
You can add your code example here
Remarks
The function prototype for filter is:
int YourEventFilter(void* userdata, SDL_Event* event)
where YourEventFilter is the name of your function and its parameters are:
userdata
what was passed as userdata to SDL_SetEventFilter()
event
the event that triggered the callback
If filter returns 1, then the event will be added to the internal queue. If it returns 0, then the event will be dropped from the queue, but the internal state will still be updated. This allows selective filtering of dynamically arriving events.
Be very careful of what you do in the event filter function, as it may run in a different thread!
There is one caveat when dealing with the SDL_QUITEVENT event type. The event filter is only called when the window manager desires to close the application window. If the event filter returns 1, then the window will be closed, otherwise the window will remain open if possible.
If the quit event is generated by an interrupt signal, it will bypass the internal queue and be delivered to the application at the next event poll.
Note: Disabled events never make it to the event filter function; see SDL_EventState().
Note: Events pushed onto the queue with SDL_PushEvent() get passed through the event filter, but events pushed onto the queue with or SDL_PeepEvents() do not.
