# SDL_SetEventFilter

Set up a filter to process all events before they change internal state and are posted to the internal event queue.

## Header File

Defined in [SDL_events.h](https://github.com/libsdl-org/SDL/blob/SDL2/include/SDL_events.h)

## Syntax

```c
void SDL_SetEventFilter(SDL_EventFilter filter,
                        void *userdata);
```

## Function Parameters

|                                    |              |                                                                               |
| ---------------------------------- | ------------ | ----------------------------------------------------------------------------- |
| [SDL_EventFilter](SDL_EventFilter) | **filter**   | An [SDL_EventFilter](SDL_EventFilter) function to call when an event happens. |
| void *                             | **userdata** | a pointer that is passed to `filter`.                                         |

## Remarks

If the filter function returns 1 when called, 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.

**WARNING**: Be very careful of what you do in the event filter function,
as it may run in a different thread!

On platforms that support it, if the quit event is generated by an
interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the
application at the next event poll.

There is one caveat when dealing with the [SDL_QuitEvent](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.

Note: Disabled events never make it to the event filter function; see
[SDL_EventState](SDL_EventState)().

Note: If you just want to inspect events without filtering, you should use
[SDL_AddEventWatch](SDL_AddEventWatch)() instead.

Note: Events pushed onto the queue with [SDL_PushEvent](SDL_PushEvent)()
get passed through the event filter, but events pushed onto the queue with
[SDL_PeepEvents](SDL_PeepEvents)() do not.

## Version

This function is available since SDL 2.0.0.

## See Also

- [SDL_AddEventWatch](SDL_AddEventWatch)
- [SDL_EventState](SDL_EventState)
- [SDL_GetEventFilter](SDL_GetEventFilter)
- [SDL_PeepEvents](SDL_PeepEvents)
- [SDL_PushEvent](SDL_PushEvent)

----
[CategoryAPI](CategoryAPI), [CategoryAPIFunction](CategoryAPIFunction), [CategoryEvents](CategoryEvents)

