Wiki Page Content

Differences between revisions 28 and 29
Revision 28 as of 2017-02-12 22:28:30
Size: 2644
Comment: Fixed typo (Bugzilla 3582).
Revision 29 as of 2017-08-11 17:54:24
Size: 2331
Editor: Sam Lantinga
Comment: Fixed bug 3582 - SDL_SetEventFilter and SDL_QUIT
Deletions are marked like this. Additions are marked like this.
Line 41: Line 41:
There is one caveat when dealing with the [[SDL_QuitEvent|SDL_QUIT]] 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.
If the quit event is generated by an interrupt signal (e.g. Ctrl-C), it will be delivered to the application at the next event poll.

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.

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

If the quit event is generated by an interrupt signal (e.g. Ctrl-C), it will 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: If you just want to inspect events without filtering, you should use SDL_AddEventWatch() instead.

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


CategoryAPI, CategoryEvents

None: SDL_SetEventFilter (last edited 2017-08-11 17:54:24 by Sam Lantinga)

Feedback
Please include your contact information if you'd like to receive a reply.
Submit