SDL  2.0
SDL_events.h File Reference
#include "SDL_stdinc.h"
#include "SDL_error.h"
#include "SDL_video.h"
#include "SDL_keyboard.h"
#include "SDL_mouse.h"
#include "SDL_joystick.h"
#include "SDL_gamecontroller.h"
#include "SDL_quit.h"
#include "SDL_gesture.h"
#include "SDL_touch.h"
#include "begin_code.h"
#include "close_code.h"
+ Include dependency graph for SDL_events.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  SDL_CommonEvent
 Fields shared by every event. More...
 
struct  SDL_DisplayEvent
 Display state change event data (event.display.*) More...
 
struct  SDL_WindowEvent
 Window state change event data (event.window.*) More...
 
struct  SDL_KeyboardEvent
 Keyboard button event structure (event.key.*) More...
 
struct  SDL_TextEditingEvent
 Keyboard text editing event structure (event.edit.*) More...
 
struct  SDL_TextInputEvent
 Keyboard text input event structure (event.text.*) More...
 
struct  SDL_MouseMotionEvent
 Mouse motion event structure (event.motion.*) More...
 
struct  SDL_MouseButtonEvent
 Mouse button event structure (event.button.*) More...
 
struct  SDL_MouseWheelEvent
 Mouse wheel event structure (event.wheel.*) More...
 
struct  SDL_JoyAxisEvent
 Joystick axis motion event structure (event.jaxis.*) More...
 
struct  SDL_JoyBallEvent
 Joystick trackball motion event structure (event.jball.*) More...
 
struct  SDL_JoyHatEvent
 Joystick hat position change event structure (event.jhat.*) More...
 
struct  SDL_JoyButtonEvent
 Joystick button event structure (event.jbutton.*) More...
 
struct  SDL_JoyDeviceEvent
 Joystick device event structure (event.jdevice.*) More...
 
struct  SDL_ControllerAxisEvent
 Game controller axis motion event structure (event.caxis.*) More...
 
struct  SDL_ControllerButtonEvent
 Game controller button event structure (event.cbutton.*) More...
 
struct  SDL_ControllerDeviceEvent
 Controller device event structure (event.cdevice.*) More...
 
struct  SDL_ControllerTouchpadEvent
 Game controller touchpad event structure (event.ctouchpad.*) More...
 
struct  SDL_ControllerSensorEvent
 Game controller sensor event structure (event.csensor.*) More...
 
struct  SDL_AudioDeviceEvent
 Audio device event structure (event.adevice.*) More...
 
struct  SDL_TouchFingerEvent
 Touch finger event structure (event.tfinger.*) More...
 
struct  SDL_MultiGestureEvent
 Multiple Finger Gesture Event (event.mgesture.*) More...
 
struct  SDL_DollarGestureEvent
 Dollar Gesture Event (event.dgesture.*) More...
 
struct  SDL_DropEvent
 An event used to request a file open by the system (event.drop.*) This event is enabled by default, you can disable it with SDL_EventState(). More...
 
struct  SDL_SensorEvent
 Sensor event structure (event.sensor.*) More...
 
struct  SDL_QuitEvent
 The "quit requested" event. More...
 
struct  SDL_OSEvent
 OS Specific event. More...
 
struct  SDL_UserEvent
 A user-defined event type (event.user.*) More...
 
struct  SDL_SysWMEvent
 A video driver dependent system event (event.syswm.*) This event is disabled by default, you can enable it with SDL_EventState() More...
 
union  SDL_Event
 General event structure. More...
 

Macros

#define SDL_RELEASED   0
 
#define SDL_PRESSED   1
 
#define SDL_TEXTEDITINGEVENT_TEXT_SIZE   (32)
 
#define SDL_TEXTINPUTEVENT_TEXT_SIZE   (32)
 
#define SDL_QUERY   -1
 
#define SDL_IGNORE   0
 
#define SDL_DISABLE   0
 
#define SDL_ENABLE   1
 
#define SDL_GetEventState(type)   SDL_EventState(type, SDL_QUERY)
 

Typedefs

typedef int(* SDL_EventFilter) (void *userdata, SDL_Event *event)
 

Enumerations

enum  SDL_EventType {
  SDL_FIRSTEVENT = 0 ,
  SDL_QUIT = 0x100 ,
  SDL_APP_TERMINATING ,
  SDL_APP_LOWMEMORY ,
  SDL_APP_WILLENTERBACKGROUND ,
  SDL_APP_DIDENTERBACKGROUND ,
  SDL_APP_WILLENTERFOREGROUND ,
  SDL_APP_DIDENTERFOREGROUND ,
  SDL_LOCALECHANGED ,
  SDL_DISPLAYEVENT = 0x150 ,
  SDL_WINDOWEVENT = 0x200 ,
  SDL_SYSWMEVENT ,
  SDL_KEYDOWN = 0x300 ,
  SDL_KEYUP ,
  SDL_TEXTEDITING ,
  SDL_TEXTINPUT ,
  SDL_KEYMAPCHANGED ,
  SDL_MOUSEMOTION = 0x400 ,
  SDL_MOUSEBUTTONDOWN ,
  SDL_MOUSEBUTTONUP ,
  SDL_MOUSEWHEEL ,
  SDL_JOYAXISMOTION = 0x600 ,
  SDL_JOYBALLMOTION ,
  SDL_JOYHATMOTION ,
  SDL_JOYBUTTONDOWN ,
  SDL_JOYBUTTONUP ,
  SDL_JOYDEVICEADDED ,
  SDL_JOYDEVICEREMOVED ,
  SDL_CONTROLLERAXISMOTION = 0x650 ,
  SDL_CONTROLLERBUTTONDOWN ,
  SDL_CONTROLLERBUTTONUP ,
  SDL_CONTROLLERDEVICEADDED ,
  SDL_CONTROLLERDEVICEREMOVED ,
  SDL_CONTROLLERDEVICEREMAPPED ,
  SDL_CONTROLLERTOUCHPADDOWN ,
  SDL_CONTROLLERTOUCHPADMOTION ,
  SDL_CONTROLLERTOUCHPADUP ,
  SDL_CONTROLLERSENSORUPDATE ,
  SDL_FINGERDOWN = 0x700 ,
  SDL_FINGERUP ,
  SDL_FINGERMOTION ,
  SDL_DOLLARGESTURE = 0x800 ,
  SDL_DOLLARRECORD ,
  SDL_MULTIGESTURE ,
  SDL_CLIPBOARDUPDATE = 0x900 ,
  SDL_DROPFILE = 0x1000 ,
  SDL_DROPTEXT ,
  SDL_DROPBEGIN ,
  SDL_DROPCOMPLETE ,
  SDL_AUDIODEVICEADDED = 0x1100 ,
  SDL_AUDIODEVICEREMOVED ,
  SDL_SENSORUPDATE = 0x1200 ,
  SDL_RENDER_TARGETS_RESET = 0x2000 ,
  SDL_RENDER_DEVICE_RESET ,
  SDL_USEREVENT = 0x8000 ,
  SDL_LASTEVENT = 0xFFFF
}
 The types of events that can be delivered. More...
 
enum  SDL_eventaction {
  SDL_ADDEVENT ,
  SDL_PEEKEVENT ,
  SDL_GETEVENT
}
 

Functions

 SDL_COMPILE_TIME_ASSERT (SDL_Event, sizeof(SDL_Event)==56)
 
void SDL_PumpEvents (void)
 
int SDL_PeepEvents (SDL_Event *events, int numevents, SDL_eventaction action, Uint32 minType, Uint32 maxType)
 
SDL_bool SDL_HasEvent (Uint32 type)
 
SDL_bool SDL_HasEvents (Uint32 minType, Uint32 maxType)
 
void SDL_FlushEvent (Uint32 type)
 
void SDL_FlushEvents (Uint32 minType, Uint32 maxType)
 
int SDL_PollEvent (SDL_Event *event)
 Polls for currently pending events. More...
 
int SDL_WaitEvent (SDL_Event *event)
 Waits indefinitely for the next available event. More...
 
int SDL_WaitEventTimeout (SDL_Event *event, int timeout)
 Waits until the specified timeout (in milliseconds) for the next available event. More...
 
int SDL_PushEvent (SDL_Event *event)
 Add an event to the event queue. More...
 
void SDL_SetEventFilter (SDL_EventFilter filter, void *userdata)
 
SDL_bool SDL_GetEventFilter (SDL_EventFilter *filter, void **userdata)
 
void SDL_AddEventWatch (SDL_EventFilter filter, void *userdata)
 
void SDL_DelEventWatch (SDL_EventFilter filter, void *userdata)
 
void SDL_FilterEvents (SDL_EventFilter filter, void *userdata)
 
Uint8 SDL_EventState (Uint32 type, int state)
 
Uint32 SDL_RegisterEvents (int numevents)
 

Detailed Description

Include file for SDL event handling.

Definition in file SDL_events.h.

Macro Definition Documentation

◆ SDL_DISABLE

#define SDL_DISABLE   0

Definition at line 794 of file SDL_events.h.

◆ SDL_ENABLE

#define SDL_ENABLE   1

Definition at line 795 of file SDL_events.h.

◆ SDL_GetEventState

#define SDL_GetEventState (   type)    SDL_EventState(type, SDL_QUERY)

Definition at line 808 of file SDL_events.h.

◆ SDL_IGNORE

#define SDL_IGNORE   0

Definition at line 793 of file SDL_events.h.

◆ SDL_PRESSED

#define SDL_PRESSED   1

Definition at line 50 of file SDL_events.h.

◆ SDL_QUERY

#define SDL_QUERY   -1

Definition at line 792 of file SDL_events.h.

◆ SDL_RELEASED

#define SDL_RELEASED   0

Definition at line 49 of file SDL_events.h.

◆ SDL_TEXTEDITINGEVENT_TEXT_SIZE

#define SDL_TEXTEDITINGEVENT_TEXT_SIZE   (32)

Definition at line 229 of file SDL_events.h.

◆ SDL_TEXTINPUTEVENT_TEXT_SIZE

#define SDL_TEXTINPUTEVENT_TEXT_SIZE   (32)

Definition at line 244 of file SDL_events.h.

Typedef Documentation

◆ SDL_EventFilter

typedef int( * SDL_EventFilter) (void *userdata, SDL_Event *event)

Definition at line 735 of file SDL_events.h.

Enumeration Type Documentation

◆ SDL_eventaction

Enumerator
SDL_ADDEVENT 
SDL_PEEKEVENT 
SDL_GETEVENT 

Definition at line 649 of file SDL_events.h.

650 {
651  SDL_ADDEVENT,
SDL_eventaction
Definition: SDL_events.h:650
@ SDL_ADDEVENT
Definition: SDL_events.h:651
@ SDL_PEEKEVENT
Definition: SDL_events.h:652
@ SDL_GETEVENT
Definition: SDL_events.h:653

◆ SDL_EventType

The types of events that can be delivered.

Enumerator
SDL_FIRSTEVENT 

Unused (do not remove)

SDL_QUIT 

User-requested quit

SDL_APP_TERMINATING 

The application is being terminated by the OS Called on iOS in applicationWillTerminate() Called on Android in onDestroy()

SDL_APP_LOWMEMORY 

The application is low on memory, free memory if possible. Called on iOS in applicationDidReceiveMemoryWarning() Called on Android in onLowMemory()

SDL_APP_WILLENTERBACKGROUND 

The application is about to enter the background Called on iOS in applicationWillResignActive() Called on Android in onPause()

SDL_APP_DIDENTERBACKGROUND 

The application did enter the background and may not get CPU for some time Called on iOS in applicationDidEnterBackground() Called on Android in onPause()

SDL_APP_WILLENTERFOREGROUND 

The application is about to enter the foreground Called on iOS in applicationWillEnterForeground() Called on Android in onResume()

SDL_APP_DIDENTERFOREGROUND 

The application is now interactive Called on iOS in applicationDidBecomeActive() Called on Android in onResume()

SDL_LOCALECHANGED 

The user's locale preferences have changed.

SDL_DISPLAYEVENT 

Display state change

SDL_WINDOWEVENT 

Window state change

SDL_SYSWMEVENT 

System specific event

SDL_KEYDOWN 

Key pressed

SDL_KEYUP 

Key released

SDL_TEXTEDITING 

Keyboard text editing (composition)

SDL_TEXTINPUT 

Keyboard text input

SDL_KEYMAPCHANGED 

Keymap changed due to a system event such as an input language or keyboard layout change.

SDL_MOUSEMOTION 

Mouse moved

SDL_MOUSEBUTTONDOWN 

Mouse button pressed

SDL_MOUSEBUTTONUP 

Mouse button released

SDL_MOUSEWHEEL 

Mouse wheel motion

SDL_JOYAXISMOTION 

Joystick axis motion

SDL_JOYBALLMOTION 

Joystick trackball motion

SDL_JOYHATMOTION 

Joystick hat position change

SDL_JOYBUTTONDOWN 

Joystick button pressed

SDL_JOYBUTTONUP 

Joystick button released

SDL_JOYDEVICEADDED 

A new joystick has been inserted into the system

SDL_JOYDEVICEREMOVED 

An opened joystick has been removed

SDL_CONTROLLERAXISMOTION 

Game controller axis motion

SDL_CONTROLLERBUTTONDOWN 

Game controller button pressed

SDL_CONTROLLERBUTTONUP 

Game controller button released

SDL_CONTROLLERDEVICEADDED 

A new Game controller has been inserted into the system

SDL_CONTROLLERDEVICEREMOVED 

An opened Game controller has been removed

SDL_CONTROLLERDEVICEREMAPPED 

The controller mapping was updated

SDL_CONTROLLERTOUCHPADDOWN 

Game controller touchpad was touched

SDL_CONTROLLERTOUCHPADMOTION 

Game controller touchpad finger was moved

SDL_CONTROLLERTOUCHPADUP 

Game controller touchpad finger was lifted

SDL_CONTROLLERSENSORUPDATE 

Game controller sensor was updated

SDL_FINGERDOWN 
SDL_FINGERUP 
SDL_FINGERMOTION 
SDL_DOLLARGESTURE 
SDL_DOLLARRECORD 
SDL_MULTIGESTURE 
SDL_CLIPBOARDUPDATE 

The clipboard changed

SDL_DROPFILE 

The system requests a file open

SDL_DROPTEXT 

text/plain drag-and-drop event

SDL_DROPBEGIN 

A new set of drops is beginning (NULL filename)

SDL_DROPCOMPLETE 

Current set of drops is now complete (NULL filename)

SDL_AUDIODEVICEADDED 

A new audio device is available

SDL_AUDIODEVICEREMOVED 

An audio device has been removed.

SDL_SENSORUPDATE 

A sensor was updated

SDL_RENDER_TARGETS_RESET 

The render targets have been reset and their contents need to be updated

SDL_RENDER_DEVICE_RESET 

The device has been reset and all textures need to be recreated

SDL_USEREVENT 

Events SDL_USEREVENT through SDL_LASTEVENT are for your use, and should be allocated with SDL_RegisterEvents()

SDL_LASTEVENT 

This last event is only for bounding internal arrays

Definition at line 55 of file SDL_events.h.

56 {
57  SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */
58 
59  /* Application events */
60  SDL_QUIT = 0x100, /**< User-requested quit */
61 
62  /* These application events have special meaning on iOS, see README-ios.md for details */
63  SDL_APP_TERMINATING, /**< The application is being terminated by the OS
64  Called on iOS in applicationWillTerminate()
65  Called on Android in onDestroy()
66  */
67  SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible.
68  Called on iOS in applicationDidReceiveMemoryWarning()
69  Called on Android in onLowMemory()
70  */
71  SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background
72  Called on iOS in applicationWillResignActive()
73  Called on Android in onPause()
74  */
75  SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time
76  Called on iOS in applicationDidEnterBackground()
77  Called on Android in onPause()
78  */
79  SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground
80  Called on iOS in applicationWillEnterForeground()
81  Called on Android in onResume()
82  */
83  SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive
84  Called on iOS in applicationDidBecomeActive()
85  Called on Android in onResume()
86  */
87 
88  SDL_LOCALECHANGED, /**< The user's locale preferences have changed. */
89 
90  /* Display events */
91  SDL_DISPLAYEVENT = 0x150, /**< Display state change */
92 
93  /* Window events */
94  SDL_WINDOWEVENT = 0x200, /**< Window state change */
95  SDL_SYSWMEVENT, /**< System specific event */
96 
97  /* Keyboard events */
98  SDL_KEYDOWN = 0x300, /**< Key pressed */
99  SDL_KEYUP, /**< Key released */
100  SDL_TEXTEDITING, /**< Keyboard text editing (composition) */
101  SDL_TEXTINPUT, /**< Keyboard text input */
102  SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an
103  input language or keyboard layout change.
104  */
105 
106  /* Mouse events */
107  SDL_MOUSEMOTION = 0x400, /**< Mouse moved */
108  SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */
109  SDL_MOUSEBUTTONUP, /**< Mouse button released */
110  SDL_MOUSEWHEEL, /**< Mouse wheel motion */
111 
112  /* Joystick events */
113  SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */
114  SDL_JOYBALLMOTION, /**< Joystick trackball motion */
115  SDL_JOYHATMOTION, /**< Joystick hat position change */
116  SDL_JOYBUTTONDOWN, /**< Joystick button pressed */
117  SDL_JOYBUTTONUP, /**< Joystick button released */
118  SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */
119  SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */
120 
121  /* Game controller events */
122  SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */
123  SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */
124  SDL_CONTROLLERBUTTONUP, /**< Game controller button released */
125  SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */
126  SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */
127  SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */
128  SDL_CONTROLLERTOUCHPADDOWN, /**< Game controller touchpad was touched */
129  SDL_CONTROLLERTOUCHPADMOTION, /**< Game controller touchpad finger was moved */
130  SDL_CONTROLLERTOUCHPADUP, /**< Game controller touchpad finger was lifted */
131  SDL_CONTROLLERSENSORUPDATE, /**< Game controller sensor was updated */
132 
133  /* Touch events */
134  SDL_FINGERDOWN = 0x700,
135  SDL_FINGERUP,
137 
138  /* Gesture events */
139  SDL_DOLLARGESTURE = 0x800,
142 
143  /* Clipboard events */
144  SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */
145 
146  /* Drag and drop events */
147  SDL_DROPFILE = 0x1000, /**< The system requests a file open */
148  SDL_DROPTEXT, /**< text/plain drag-and-drop event */
149  SDL_DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */
150  SDL_DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */
151 
152  /* Audio hotplug events */
153  SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */
154  SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */
155 
156  /* Sensor events */
157  SDL_SENSORUPDATE = 0x1200, /**< A sensor was updated */
158 
159  /* Render events */
160  SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */
161  SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */
162 
163  /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use,
164  * and should be allocated with SDL_RegisterEvents()
165  */
166  SDL_USEREVENT = 0x8000,
167 
168  /**
169  * This last event is only for bounding internal arrays
170  */
171  SDL_LASTEVENT = 0xFFFF
172 } SDL_EventType;
SDL_EventType
The types of events that can be delivered.
Definition: SDL_events.h:56
@ SDL_MOUSEMOTION
Definition: SDL_events.h:107
@ SDL_JOYDEVICEADDED
Definition: SDL_events.h:118
@ SDL_DROPBEGIN
Definition: SDL_events.h:149
@ SDL_SENSORUPDATE
Definition: SDL_events.h:157
@ SDL_CONTROLLERTOUCHPADDOWN
Definition: SDL_events.h:128
@ SDL_FINGERMOTION
Definition: SDL_events.h:136
@ SDL_TEXTEDITING
Definition: SDL_events.h:100
@ SDL_DROPTEXT
Definition: SDL_events.h:148
@ SDL_QUIT
Definition: SDL_events.h:60
@ SDL_APP_LOWMEMORY
Definition: SDL_events.h:67
@ SDL_JOYBUTTONDOWN
Definition: SDL_events.h:116
@ SDL_APP_WILLENTERFOREGROUND
Definition: SDL_events.h:79
@ SDL_USEREVENT
Definition: SDL_events.h:166
@ SDL_MOUSEBUTTONUP
Definition: SDL_events.h:109
@ SDL_JOYDEVICEREMOVED
Definition: SDL_events.h:119
@ SDL_TEXTINPUT
Definition: SDL_events.h:101
@ SDL_WINDOWEVENT
Definition: SDL_events.h:94
@ SDL_MOUSEWHEEL
Definition: SDL_events.h:110
@ SDL_CONTROLLERTOUCHPADMOTION
Definition: SDL_events.h:129
@ SDL_CLIPBOARDUPDATE
Definition: SDL_events.h:144
@ SDL_SYSWMEVENT
Definition: SDL_events.h:95
@ SDL_LOCALECHANGED
Definition: SDL_events.h:88
@ SDL_JOYBUTTONUP
Definition: SDL_events.h:117
@ SDL_JOYBALLMOTION
Definition: SDL_events.h:114
@ SDL_DISPLAYEVENT
Definition: SDL_events.h:91
@ SDL_FINGERUP
Definition: SDL_events.h:135
@ SDL_RENDER_DEVICE_RESET
Definition: SDL_events.h:161
@ SDL_CONTROLLERBUTTONUP
Definition: SDL_events.h:124
@ SDL_MOUSEBUTTONDOWN
Definition: SDL_events.h:108
@ SDL_CONTROLLERDEVICEADDED
Definition: SDL_events.h:125
@ SDL_APP_DIDENTERFOREGROUND
Definition: SDL_events.h:83
@ SDL_DOLLARRECORD
Definition: SDL_events.h:140
@ SDL_APP_WILLENTERBACKGROUND
Definition: SDL_events.h:71
@ SDL_MULTIGESTURE
Definition: SDL_events.h:141
@ SDL_FINGERDOWN
Definition: SDL_events.h:134
@ SDL_DROPCOMPLETE
Definition: SDL_events.h:150
@ SDL_DOLLARGESTURE
Definition: SDL_events.h:139
@ SDL_CONTROLLERBUTTONDOWN
Definition: SDL_events.h:123
@ SDL_APP_DIDENTERBACKGROUND
Definition: SDL_events.h:75
@ SDL_APP_TERMINATING
Definition: SDL_events.h:63
@ SDL_CONTROLLERAXISMOTION
Definition: SDL_events.h:122
@ SDL_KEYDOWN
Definition: SDL_events.h:98
@ SDL_KEYMAPCHANGED
Definition: SDL_events.h:102
@ SDL_AUDIODEVICEREMOVED
Definition: SDL_events.h:154
@ SDL_DROPFILE
Definition: SDL_events.h:147
@ SDL_AUDIODEVICEADDED
Definition: SDL_events.h:153
@ SDL_KEYUP
Definition: SDL_events.h:99
@ SDL_CONTROLLERDEVICEREMOVED
Definition: SDL_events.h:126
@ SDL_RENDER_TARGETS_RESET
Definition: SDL_events.h:160
@ SDL_CONTROLLERTOUCHPADUP
Definition: SDL_events.h:130
@ SDL_CONTROLLERDEVICEREMAPPED
Definition: SDL_events.h:127
@ SDL_JOYAXISMOTION
Definition: SDL_events.h:113
@ SDL_CONTROLLERSENSORUPDATE
Definition: SDL_events.h:131
@ SDL_JOYHATMOTION
Definition: SDL_events.h:115
@ SDL_FIRSTEVENT
Definition: SDL_events.h:57
@ SDL_LASTEVENT
Definition: SDL_events.h:171

Function Documentation

◆ SDL_AddEventWatch()

void SDL_AddEventWatch ( SDL_EventFilter  filter,
void userdata 
)

Add a function which is called when an event is added to the queue.

Definition at line 893 of file SDL_events.c.

894 {
896  SDL_EventWatcher *event_watchers;
897 
898  event_watchers = SDL_realloc(SDL_event_watchers, (SDL_event_watchers_count + 1) * sizeof(*event_watchers));
899  if (event_watchers) {
900  SDL_EventWatcher *watcher;
901 
902  SDL_event_watchers = event_watchers;
904  watcher->callback = filter;
905  watcher->userdata = userdata;
906  watcher->removed = SDL_FALSE;
908  }
909 
912  }
913  }
914 }
#define SDL_LockMutex
#define SDL_realloc
#define SDL_UnlockMutex
static SDL_mutex * SDL_event_watchers_lock
Definition: SDL_events.c:52
static int SDL_event_watchers_count
Definition: SDL_events.c:55
static SDL_EventWatcher * SDL_event_watchers
Definition: SDL_events.c:54
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
@ SDL_FALSE
Definition: SDL_stdinc.h:169
SDL_EventFilter callback
Definition: SDL_events.c:47
SDL_bool removed
Definition: SDL_events.c:49

References SDL_EventWatcher::callback, SDL_EventWatcher::removed, SDL_event_watchers, SDL_event_watchers_count, SDL_event_watchers_lock, SDL_FALSE, SDL_LockMutex, SDL_realloc, SDL_UnlockMutex, and SDL_EventWatcher::userdata.

◆ SDL_COMPILE_TIME_ASSERT()

SDL_COMPILE_TIME_ASSERT ( SDL_Event  ,
sizeof(SDL_Event = =56 
)

◆ SDL_DelEventWatch()

void SDL_DelEventWatch ( SDL_EventFilter  filter,
void userdata 
)

Remove an event watch function added with SDL_AddEventWatch()

Definition at line 917 of file SDL_events.c.

918 {
920  int i;
921 
922  for (i = 0; i < SDL_event_watchers_count; ++i) {
923  if (SDL_event_watchers[i].callback == filter && SDL_event_watchers[i].userdata == userdata) {
927  } else {
929  if (i < SDL_event_watchers_count) {
931  }
932  }
933  break;
934  }
935  }
936 
939  }
940  }
941 }
#define SDL_memmove
static SDL_bool SDL_event_watchers_dispatching
Definition: SDL_events.c:56
static SDL_bool SDL_event_watchers_removed
Definition: SDL_events.c:57
@ SDL_TRUE
Definition: SDL_stdinc.h:170
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
static Uint32 callback(Uint32 interval, void *param)
Definition: testtimer.c:34

References callback(), i, SDL_EventWatcher::removed, SDL_event_watchers, SDL_event_watchers_count, SDL_event_watchers_dispatching, SDL_event_watchers_lock, SDL_event_watchers_removed, SDL_LockMutex, SDL_memmove, SDL_TRUE, and SDL_UnlockMutex.

◆ SDL_EventState()

Uint8 SDL_EventState ( Uint32  type,
int  state 
)

This function allows you to set the state of processing certain events.

  • If state is set to SDL_IGNORE, that event will be automatically dropped from the event queue and will not be filtered.
  • If state is set to SDL_ENABLE, that event will be processed normally.
  • If state is set to SDL_QUERY, SDL_EventState() will return the current processing state of the specified event.

Definition at line 961 of file SDL_events.c.

962 {
963  const SDL_bool isdnd = ((state == SDL_DISABLE) || (state == SDL_ENABLE)) &&
964  ((type == SDL_DROPFILE) || (type == SDL_DROPTEXT));
965  Uint8 current_state;
966  Uint8 hi = ((type >> 8) & 0xff);
967  Uint8 lo = (type & 0xff);
968 
969  if (SDL_disabled_events[hi] &&
970  (SDL_disabled_events[hi]->bits[lo/32] & (1 << (lo&31)))) {
971  current_state = SDL_DISABLE;
972  } else {
973  current_state = SDL_ENABLE;
974  }
975 
976  if (state != current_state)
977  {
978  switch (state) {
979  case SDL_DISABLE:
980  /* Disable this event type and discard pending events */
981  if (!SDL_disabled_events[hi]) {
983  if (!SDL_disabled_events[hi]) {
984  /* Out of memory, nothing we can do... */
985  break;
986  }
987  }
988  SDL_disabled_events[hi]->bits[lo/32] |= (1 << (lo&31));
990  break;
991  case SDL_ENABLE:
992  SDL_disabled_events[hi]->bits[lo/32] &= ~(1 << (lo&31));
993  break;
994  default:
995  /* Querying state... */
996  break;
997  }
998 
999 #if !SDL_JOYSTICK_DISABLED
1000  if (state == SDL_DISABLE || state == SDL_ENABLE) {
1002  }
1003 #endif
1004 #if !SDL_SENSOR_DISABLED
1005  if (state == SDL_DISABLE || state == SDL_ENABLE) {
1007  }
1008 #endif
1009  }
1010 
1011  /* turn off drag'n'drop support if we've disabled the events.
1012  This might change some UI details at the OS level. */
1013  if (isdnd) {
1015  }
1016 
1017  return current_state;
1018 }
#define SDL_calloc
static void SDL_CalculateShouldUpdateSensors()
Definition: SDL_events.c:124
static void SDL_CalculateShouldUpdateJoysticks()
Definition: SDL_events.c:100
void SDL_FlushEvent(Uint32 type)
Definition: SDL_events.c:681
static SDL_DisabledEventBlock * SDL_disabled_events[256]
Definition: SDL_events.c:63
#define SDL_DISABLE
Definition: SDL_events.h:794
#define SDL_ENABLE
Definition: SDL_events.h:795
GLuint GLuint GLsizei GLenum type
Definition: SDL_opengl.h:1571
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const void * bits
SDL_bool
Definition: SDL_stdinc.h:168
uint8_t Uint8
Definition: SDL_stdinc.h:185
void SDL_ToggleDragAndDropSupport(void)
Definition: SDL_video.c:1412
struct xkb_state * state

References SDL_DisabledEventBlock::bits, SDL_CalculateShouldUpdateJoysticks(), SDL_CalculateShouldUpdateSensors(), SDL_calloc, SDL_DISABLE, SDL_disabled_events, SDL_DROPFILE, SDL_DROPTEXT, SDL_ENABLE, SDL_FlushEvent(), SDL_ToggleDragAndDropSupport(), and state.

Referenced by SDL_StartEventLoop().

◆ SDL_FilterEvents()

void SDL_FilterEvents ( SDL_EventFilter  filter,
void userdata 
)

Run the filter function on the current event queue, removing any events for which the filter returns 0.

Definition at line 944 of file SDL_events.c.

945 {
946  if (!SDL_EventQ.lock || SDL_LockMutex(SDL_EventQ.lock) == 0) {
947  SDL_EventEntry *entry, *next;
948  for (entry = SDL_EventQ.head; entry; entry = next) {
949  next = entry->next;
950  if (!filter(userdata, &entry->event)) {
951  SDL_CutEvent(entry);
952  }
953  }
954  if (SDL_EventQ.lock) {
956  }
957  }
958 }
static struct @26 SDL_EventQ
static void SDL_CutEvent(SDL_EventEntry *entry)
Definition: SDL_events.c:565
Definition: SDL_events.c:68
SDL_Event event
Definition: SDL_events.c:69
struct _SDL_EventEntry * next
Definition: SDL_events.c:72

References SDL_EventEntry::event, SDL_EventEntry::next, SDL_CutEvent(), SDL_EventQ, SDL_LockMutex, and SDL_UnlockMutex.

◆ SDL_FlushEvent()

void SDL_FlushEvent ( Uint32  type)

This function clears events from the event queue This function only affects currently queued events. If you want to make sure that all pending OS events are flushed, you can call SDL_PumpEvents() on the main thread immediately before the flush call.

Definition at line 681 of file SDL_events.c.

682 {
684 }
void SDL_FlushEvents(Uint32 minType, Uint32 maxType)
Definition: SDL_events.c:687

References SDL_FlushEvents().

Referenced by SDL_EventState().

◆ SDL_FlushEvents()

void SDL_FlushEvents ( Uint32  minType,
Uint32  maxType 
)

Definition at line 687 of file SDL_events.c.

688 {
689  /* !!! FIXME: we need to manually SDL_free() the strings in TEXTINPUT and
690  drag'n'drop events if we're flushing them without passing them to the
691  app, but I don't know if this is the right place to do that. */
692 
693  /* Don't look after we've quit */
694  if (!SDL_AtomicGet(&SDL_EventQ.active)) {
695  return;
696  }
697 
698  /* Make sure the events are current */
699 #if 0
700  /* Actually, we can't do this since we might be flushing while processing
701  a resize event, and calling this might trigger further resize events.
702  */
703  SDL_PumpEvents();
704 #endif
705 
706  /* Lock the event queue */
707  if (!SDL_EventQ.lock || SDL_LockMutex(SDL_EventQ.lock) == 0) {
708  SDL_EventEntry *entry, *next;
709  Uint32 type;
710  for (entry = SDL_EventQ.head; entry; entry = next) {
711  next = entry->next;
712  type = entry->event.type;
713  if (minType <= type && type <= maxType) {
714  SDL_CutEvent(entry);
715  }
716  }
717  if (SDL_EventQ.lock) {
719  }
720  }
721 }
#define SDL_AtomicGet
void SDL_PumpEvents(void)
Definition: SDL_events.c:725
uint32_t Uint32
Definition: SDL_stdinc.h:209
Uint32 type
Definition: SDL_events.h:593

References SDL_EventEntry::event, SDL_EventEntry::next, SDL_AtomicGet, SDL_CutEvent(), SDL_EventQ, SDL_LockMutex, SDL_PumpEvents(), SDL_UnlockMutex, and SDL_Event::type.

Referenced by SDL_FlushEvent(), and SDL_SetEventFilter().

◆ SDL_GetEventFilter()

SDL_bool SDL_GetEventFilter ( SDL_EventFilter filter,
void **  userdata 
)

Return the current event filter - can be used to "chain" filters. If there is no event filter set, this function returns SDL_FALSE.

Definition at line 869 of file SDL_events.c.

870 {
871  SDL_EventWatcher event_ok;
872 
874  event_ok = SDL_EventOK;
875 
878  }
879  } else {
880  SDL_zero(event_ok);
881  }
882 
883  if (filter) {
884  *filter = event_ok.callback;
885  }
886  if (userdata) {
887  *userdata = event_ok.userdata;
888  }
889  return event_ok.callback ? SDL_TRUE : SDL_FALSE;
890 }
static SDL_EventWatcher SDL_EventOK
Definition: SDL_events.c:53
#define SDL_zero(x)
Definition: SDL_stdinc.h:426

References SDL_EventWatcher::callback, SDL_event_watchers_lock, SDL_EventOK, SDL_FALSE, SDL_LockMutex, SDL_TRUE, SDL_UnlockMutex, SDL_zero, and SDL_EventWatcher::userdata.

◆ SDL_HasEvent()

SDL_bool SDL_HasEvent ( Uint32  type)

Checks to see if certain event types are in the event queue.

Definition at line 669 of file SDL_events.c.

670 {
671  return (SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, type, type) > 0);
672 }
int SDL_PeepEvents(SDL_Event *events, int numevents, SDL_eventaction action, Uint32 minType, Uint32 maxType)
Definition: SDL_events.c:591
#define NULL
Definition: begin_code.h:163

References NULL, SDL_PEEKEVENT, and SDL_PeepEvents().

◆ SDL_HasEvents()

SDL_bool SDL_HasEvents ( Uint32  minType,
Uint32  maxType 
)

Definition at line 675 of file SDL_events.c.

676 {
677  return (SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, minType, maxType) > 0);
678 }

References NULL, SDL_PEEKEVENT, and SDL_PeepEvents().

◆ SDL_PeepEvents()

int SDL_PeepEvents ( SDL_Event events,
int  numevents,
SDL_eventaction  action,
Uint32  minType,
Uint32  maxType 
)

Checks the event queue for messages and optionally returns them.

If action is SDL_ADDEVENT, up to numevents events will be added to the back of the event queue.

If action is SDL_PEEKEVENT, up to numevents events at the front of the event queue, within the specified minimum and maximum type, will be returned and will not be removed from the queue.

If action is SDL_GETEVENT, up to numevents events at the front of the event queue, within the specified minimum and maximum type, will be returned and will be removed from the queue.

Returns
The number of events actually stored, or -1 if there was an error.

This function is thread-safe.

Definition at line 591 of file SDL_events.c.

593 {
594  int i, used;
595 
596  /* Don't look after we've quit */
597  if (!SDL_AtomicGet(&SDL_EventQ.active)) {
598  /* We get a few spurious events at shutdown, so don't warn then */
599  if (action != SDL_ADDEVENT) {
600  SDL_SetError("The event system has been shut down");
601  }
602  return (-1);
603  }
604  /* Lock the event queue */
605  used = 0;
606  if (!SDL_EventQ.lock || SDL_LockMutex(SDL_EventQ.lock) == 0) {
607  if (action == SDL_ADDEVENT) {
608  for (i = 0; i < numevents; ++i) {
609  used += SDL_AddEvent(&events[i]);
610  }
611  } else {
612  SDL_EventEntry *entry, *next;
613  SDL_SysWMEntry *wmmsg, *wmmsg_next;
614  Uint32 type;
615 
616  if (action == SDL_GETEVENT) {
617  /* Clean out any used wmmsg data
618  FIXME: Do we want to retain the data for some period of time?
619  */
620  for (wmmsg = SDL_EventQ.wmmsg_used; wmmsg; wmmsg = wmmsg_next) {
621  wmmsg_next = wmmsg->next;
622  wmmsg->next = SDL_EventQ.wmmsg_free;
623  SDL_EventQ.wmmsg_free = wmmsg;
624  }
625  SDL_EventQ.wmmsg_used = NULL;
626  }
627 
628  for (entry = SDL_EventQ.head; entry && (!events || used < numevents); entry = next) {
629  next = entry->next;
630  type = entry->event.type;
631  if (minType <= type && type <= maxType) {
632  if (events) {
633  events[used] = entry->event;
634  if (entry->event.type == SDL_SYSWMEVENT) {
635  /* We need to copy the wmmsg somewhere safe.
636  For now we'll guarantee it's valid at least until
637  the next call to SDL_PeepEvents()
638  */
639  if (SDL_EventQ.wmmsg_free) {
640  wmmsg = SDL_EventQ.wmmsg_free;
641  SDL_EventQ.wmmsg_free = wmmsg->next;
642  } else {
643  wmmsg = (SDL_SysWMEntry *)SDL_malloc(sizeof(*wmmsg));
644  }
645  wmmsg->msg = *entry->event.syswm.msg;
646  wmmsg->next = SDL_EventQ.wmmsg_used;
647  SDL_EventQ.wmmsg_used = wmmsg;
648  events[used].syswm.msg = &wmmsg->msg;
649  }
650 
651  if (action == SDL_GETEVENT) {
652  SDL_CutEvent(entry);
653  }
654  }
655  ++used;
656  }
657  }
658  }
659  if (SDL_EventQ.lock) {
661  }
662  } else {
663  return SDL_SetError("Couldn't lock event queue");
664  }
665  return (used);
666 }
#define SDL_SetError
#define SDL_malloc
static int SDL_AddEvent(SDL_Event *event)
Definition: SDL_events.c:511
set set set set set set set set set set set set set set set set set set set set *set set set macro pixldst op &r &cond WK op &r &cond WK op &r &cond WK else op &m &cond &ia op &r &cond WK else op &m &cond &ia elseif elseif else error unsupported base if elseif elseif else error unsupported unaligned pixldst unaligned endm macro pixst base base else pixldst base endif endm macro PF base if bpp PF set rept prefetch_distance PF set OFFSET endr endif endm macro preload_leading_step2 base if bpp ifc DST PF PF else if bpp lsl PF PF lsl PF PF lsl PF PF PF else PF lsl PF lsl PF lsl PF endif SIZE macro preload_middle scratch_holds_offset if bpp if else PF PF endif endif endif endm macro preload_trailing base if bpp if bpp *pix_per_block PF PF lsl PF PF PF PF PF else PF lsl PF lsl PF PF PF PF PF base if bpp if narrow_case &&bpp<=dst_w_bpp) PF bic, WK0, base, #31 PF pld,[WK0] PF add, WK1, base, X, LSL #bpp_shift PF sub, WK1, WK1, #1 PF bic, WK1, WK1, #31 PF cmp, WK1, WK0 PF beq, 90f PF pld,[WK1]90:.else PF bic, WK0, base, #31 PF pld,[WK0] PF add, WK1, base, X, lsl #bpp_shift PF sub, WK1, WK1, #1 PF bic, WK1, WK1, #31 PF cmp, WK1, WK0 PF beq, 92f91:PF add, WK0, WK0, #32 PF cmp, WK0, WK1 PF pld,[WK0] PF bne, 91b92:.endif .endif.endm.macro conditional_process1_helper cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx process_head cond, numbytes, firstreg, unaligned_src, unaligned_mask, 0 .if decrementx sub &cond X, X, #8 *numbytes/dst_w_bpp .endif process_tail cond, numbytes, firstreg .if !((flags) &FLAG_PROCESS_DOES_STORE) pixst cond, numbytes, firstreg, DST .endif.endm.macro conditional_process1 cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx .if(flags) &FLAG_BRANCH_OVER .ifc cond, mi bpl 100f .endif .ifc cond, cs bcc 100f .endif .ifc cond, ne beq 100f .endif conditional_process1_helper, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx100:.else conditional_process1_helper cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx .endif.endm.macro conditional_process2 test, cond1, cond2, process_head, process_tail, numbytes1, numbytes2, firstreg1, firstreg2, unaligned_src, unaligned_mask, decrementx .if(flags) &(FLAG_DST_READWRITE|FLAG_BRANCH_OVER|FLAG_PROCESS_CORRUPTS_PSR|FLAG_PROCESS_DOES_STORE) test conditional_process1 cond1, process_head, process_tail, numbytes1, firstreg1, unaligned_src, unaligned_mask, decrementx .if(flags) &FLAG_PROCESS_CORRUPTS_PSR test .endif conditional_process1 cond2, process_head, process_tail, numbytes2, firstreg2, unaligned_src, unaligned_mask, decrementx .else test process_head cond1, numbytes1, firstreg1, unaligned_src, unaligned_mask, 0 process_head cond2, numbytes2, firstreg2, unaligned_src, unaligned_mask, 0 .if decrementx sub &cond1 X, X, #8 *numbytes1/dst_w_bpp sub &cond2 X, X, #8 *numbytes2/dst_w_bpp .endif process_tail cond1, numbytes1, firstreg1 process_tail cond2, numbytes2, firstreg2 pixst cond1, numbytes1, firstreg1, DST pixst cond2, numbytes2, firstreg2, DST .endif.endm.macro test_bits_1_0_ptr .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 movs SCRATCH, X, lsl #32-1 .else movs SCRATCH, WK0, lsl #32-1 .endif.endm.macro test_bits_3_2_ptr .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 movs SCRATCH, X, lsl #32-3 .else movs SCRATCH, WK0, lsl #32-3 .endif.endm.macro leading_15bytes process_head, process_tail .set DECREMENT_X, 1 .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 .set DECREMENT_X, 0 sub X, X, WK0, lsr #dst_bpp_shift str X,[sp, #LINE_SAVED_REG_COUNT *4] mov X, WK0 .endif .if dst_w_bpp==8 conditional_process2 test_bits_1_0_ptr, mi, cs, process_head, process_tail, 1, 2, 1, 2, 1, 1, DECREMENT_X .elseif dst_w_bpp==16 test_bits_1_0_ptr conditional_process1 cs, process_head, process_tail, 2, 2, 1, 1, DECREMENT_X .endif conditional_process2 test_bits_3_2_ptr, mi, cs, process_head, process_tail, 4, 8, 1, 2, 1, 1, DECREMENT_X .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 ldr X,[sp, #LINE_SAVED_REG_COUNT *4] .endif.endm.macro test_bits_3_2_pix movs SCRATCH, X, lsl #dst_bpp_shift+32-3.endm.macro test_bits_1_0_pix .if dst_w_bpp==8 movs SCRATCH, X, lsl #dst_bpp_shift+32-1 .else movs SCRATCH, X, lsr #1 .endif.endm.macro trailing_15bytes process_head, process_tail, unaligned_src, unaligned_mask conditional_process2 test_bits_3_2_pix, cs, mi, process_head, process_tail, 8, 4, 0, 2, unaligned_src, unaligned_mask, 0 .if dst_w_bpp==16 test_bits_1_0_pix conditional_process1 cs, process_head, process_tail, 2, 0, unaligned_src, unaligned_mask, 0 .elseif dst_w_bpp==8 conditional_process2 test_bits_1_0_pix, cs, mi, process_head, process_tail, 2, 1, 0, 1, unaligned_src, unaligned_mask, 0 .endif.endm.macro wide_case_inner_loop process_head, process_tail, unaligned_src, unaligned_mask, dst_alignment110:.set SUBBLOCK, 0 .rept pix_per_block *dst_w_bpp/128 process_head, 16, 0, unaligned_src, unaligned_mask, 1 .if(src_bpp > 0) &&(mask_bpp==0) &&((flags) &FLAG_PROCESS_PRESERVES_SCRATCH) preload_middle src_bpp, SRC, 1 .elseif(src_bpp==0) &&(mask_bpp > 0) &&((flags) &FLAG_PROCESS_PRESERVES_SCRATCH) preload_middle mask_bpp, MASK, 1 .else preload_middle src_bpp, SRC, 0 preload_middle mask_bpp, MASK, 0 .endif .if(dst_r_bpp > 0) &&((SUBBLOCK % 2)==0) &&(((flags) &FLAG_NO_PRELOAD_DST)==0) PF pld,[DST, #32 *prefetch_distance - dst_alignment] .endif process_tail, 16, 0 .if !((flags) &FLAG_PROCESS_DOES_STORE) pixst, 16, 0, DST .endif .set SUBBLOCK, SUBBLOCK+1 .endr subs X, X, #pix_per_block bhs 110b.endm.macro wide_case_inner_loop_and_trailing_pixels process_head, process_tail, process_inner_loop, exit_label, unaligned_src, unaligned_mask .if dst_r_bpp > tst bne process_inner_loop DST_PRELOAD_BIAS endif preload_trailing SRC preload_trailing MASK DST endif add medium_case_inner_loop_and_trailing_pixels unaligned_mask endm macro medium_case_inner_loop_and_trailing_pixels DST endif subs bhs tst beq exit_label trailing_15bytes unaligned_mask endm macro narrow_case_inner_loop_and_trailing_pixels unaligned_mask tst conditional_process1 trailing_15bytes unaligned_mask endm macro switch_on_alignment action
Definition: SDL_events.c:76
SDL_SysWMmsg msg
Definition: SDL_events.c:77
struct _SDL_SysWMEntry * next
Definition: SDL_events.c:78
SDL_SysWMmsg * msg
Definition: SDL_events.h:585
static SDL_Event events[EVENT_BUF_SIZE]
Definition: testgesture.c:39
SDL_SysWMEvent syswm
Definition: SDL_events.h:617

References action, SDL_EventEntry::event, events, i, SDL_SysWMEvent::msg, SDL_SysWMEntry::msg, SDL_EventEntry::next, SDL_SysWMEntry::next, NULL, SDL_ADDEVENT, SDL_AddEvent(), SDL_AtomicGet, SDL_CutEvent(), SDL_EventQ, SDL_GETEVENT, SDL_LockMutex, SDL_malloc, SDL_SetError, SDL_SYSWMEVENT, SDL_UnlockMutex, SDL_Event::syswm, and SDL_Event::type.

Referenced by SDL_HasEvent(), SDL_HasEvents(), SDL_PushEvent(), and SDL_WaitEventTimeout().

◆ SDL_PollEvent()

int SDL_PollEvent ( SDL_Event event)

Polls for currently pending events.

Returns
1 if there are any pending events, or 0 if there are none available.
Parameters
eventIf not NULL, the next event is removed from the queue and stored in that area.

Definition at line 757 of file SDL_events.c.

758 {
759  return SDL_WaitEventTimeout(event, 0);
760 }
int SDL_WaitEventTimeout(SDL_Event *event, int timeout)
Waits until the specified timeout (in milliseconds) for the next available event.
Definition: SDL_events.c:769
struct _cl_event * event

References SDL_WaitEventTimeout().

◆ SDL_PumpEvents()

void SDL_PumpEvents ( void  )

Pumps the event loop, gathering events from the input devices.

This function updates the event queue and internal input device state.

This should only be run in the thread that sets the video mode.

Definition at line 147 of file SDL_dynapi_procs.h.

References _this, SDL_VideoDevice::PumpEvents, SDL_GetVideoDevice(), SDL_JoystickUpdate, SDL_ReleaseAutoReleaseKeys(), SDL_SendPendingSignalEvents(), SDL_SensorUpdate, SDL_update_joysticks, and SDL_update_sensors.

Referenced by SDL_FlushEvents(), and SDL_WaitEventTimeout().

◆ SDL_PushEvent()

int SDL_PushEvent ( SDL_Event event)

Add an event to the event queue.

Returns
1 on success, 0 if the event was filtered, or -1 if the event queue was full or there was some other error.

Definition at line 800 of file SDL_events.c.

801 {
802  event->common.timestamp = SDL_GetTicks();
803 
809  }
810  return 0;
811  }
812 
813  if (SDL_event_watchers_count > 0) {
814  /* Make sure we only dispatch the current watcher list */
815  int i, event_watchers_count = SDL_event_watchers_count;
816 
818  for (i = 0; i < event_watchers_count; ++i) {
819  if (!SDL_event_watchers[i].removed) {
821  }
822  }
824 
826  for (i = SDL_event_watchers_count; i--; ) {
827  if (SDL_event_watchers[i].removed) {
829  if (i < SDL_event_watchers_count) {
831  }
832  }
833  }
835  }
836  }
837 
840  }
841  }
842  }
843 
844  if (SDL_PeepEvents(event, 1, SDL_ADDEVENT, 0, 0) <= 0) {
845  return -1;
846  }
847 
849 
850  return 1;
851 }
void SDL_GestureProcessEvent(SDL_Event *event)
Definition: SDL_gesture.c:551
Uint32 SDL_GetTicks(void)
Get the number of milliseconds since the SDL library initialization.

References SDL_EventWatcher::callback, i, SDL_ADDEVENT, SDL_event_watchers, SDL_event_watchers_count, SDL_event_watchers_dispatching, SDL_event_watchers_lock, SDL_event_watchers_removed, SDL_EventOK, SDL_FALSE, SDL_GestureProcessEvent(), SDL_GetTicks(), SDL_LockMutex, SDL_memmove, SDL_PeepEvents(), SDL_TRUE, SDL_UnlockMutex, and SDL_EventWatcher::userdata.

Referenced by SDL_SendAppEvent(), and SDL_SendSysWMEvent().

◆ SDL_RegisterEvents()

Uint32 SDL_RegisterEvents ( int  numevents)

This function allocates a set of user-defined events, and returns the beginning event number for that set of events.

If there aren't enough user-defined events left, this function returns (Uint32)-1

Definition at line 1021 of file SDL_events.c.

1022 {
1023  Uint32 event_base;
1024 
1025  if ((numevents > 0) && (SDL_userevents+numevents <= SDL_LASTEVENT)) {
1026  event_base = SDL_userevents;
1027  SDL_userevents += numevents;
1028  } else {
1029  event_base = (Uint32)-1;
1030  }
1031  return event_base;
1032 }
static Uint32 SDL_userevents
Definition: SDL_events.c:64

References SDL_LASTEVENT, and SDL_userevents.

◆ SDL_SetEventFilter()

void SDL_SetEventFilter ( SDL_EventFilter  filter,
void userdata 
)

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

The filter is prototyped as:

int SDL_EventFilter(void *userdata, SDL_Event * event);
int(* SDL_EventFilter)(void *userdata, SDL_Event *event)
Definition: SDL_events.h:735
General event structure.
Definition: SDL_events.h:592

If the 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!

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.

Definition at line 854 of file SDL_events.c.

855 {
857  /* Set filter and discard pending events */
859  SDL_EventOK.userdata = userdata;
861 
864  }
865  }
866 }

References SDL_EventWatcher::callback, SDL_event_watchers_lock, SDL_EventOK, SDL_FIRSTEVENT, SDL_FlushEvents(), SDL_LASTEVENT, SDL_LockMutex, SDL_UnlockMutex, and SDL_EventWatcher::userdata.

◆ SDL_WaitEvent()

int SDL_WaitEvent ( SDL_Event event)

Waits indefinitely for the next available event.

Returns
1, or 0 if there was an error while waiting for events.
Parameters
eventIf not NULL, the next event is removed from the queue and stored in that area.

Definition at line 763 of file SDL_events.c.

764 {
765  return SDL_WaitEventTimeout(event, -1);
766 }

References SDL_WaitEventTimeout().

◆ SDL_WaitEventTimeout()

int SDL_WaitEventTimeout ( SDL_Event event,
int  timeout 
)

Waits until the specified timeout (in milliseconds) for the next available event.

Returns
1, or 0 if there was an error while waiting for events.
Parameters
eventIf not NULL, the next event is removed from the queue and stored in that area.
timeoutThe timeout (in milliseconds) to wait for next event.

Definition at line 769 of file SDL_events.c.

770 {
771  Uint32 expiration = 0;
772 
773  if (timeout > 0)
774  expiration = SDL_GetTicks() + timeout;
775 
776  for (;;) {
777  SDL_PumpEvents();
779  case -1:
780  return 0;
781  case 0:
782  if (timeout == 0) {
783  /* Polling and no events, just return */
784  return 0;
785  }
786  if (timeout > 0 && SDL_TICKS_PASSED(SDL_GetTicks(), expiration)) {
787  /* Timeout expired and no events */
788  return 0;
789  }
790  SDL_Delay(1);
791  break;
792  default:
793  /* Has events */
794  return 1;
795  }
796  }
797 }
#define SDL_Delay
GLbitfield GLuint64 timeout
#define SDL_TICKS_PASSED(A, B)
Compare SDL ticks values, and return true if A has passed B.
Definition: SDL_timer.h:56

References SDL_Delay, SDL_FIRSTEVENT, SDL_GETEVENT, SDL_GetTicks(), SDL_LASTEVENT, SDL_PeepEvents(), SDL_PumpEvents(), and SDL_TICKS_PASSED.

Referenced by SDL_PollEvent(), and SDL_WaitEvent().