Go to the documentation of this file.
21 #include "../SDL_internal.h"
29 #include "../timer/SDL_timer_c.h"
30 #if !SDL_JOYSTICK_DISABLED
31 #include "../joystick/SDL_joystick_c.h"
33 #include "../video/SDL_sysvideo.h"
37 #define SDL_MAX_QUEUED_EVENTS 65535
60 typedef struct _SDL_EventEntry
64 struct _SDL_EventEntry *
prev;
65 struct _SDL_EventEntry *
next;
68 typedef struct _SDL_SysWMEntry
71 struct _SDL_SysWMEntry *
next;
111 #define uint unsigned int
126 SDL_snprintf(details,
sizeof (details),
"%s (timestamp=%u windowid=%u code=%d data1=%p data2=%p)",
131 switch (
event->type) {
132 #define SDL_EVENT_CASE(x) case x: SDL_strlcpy(name, #x, sizeof (name));
148 switch(
event->window.event) {
150 #define SDL_WINDOWEVENT_CASE(x) case x: SDL_strlcpy(name2, #x, sizeof (name2)); break
167 #undef SDL_WINDOWEVENT_CASE
168 default:
SDL_strlcpy(name2,
"UNKNOWN (bug? fixme?)",
sizeof (name2));
break;
170 SDL_snprintf(details,
sizeof (details),
" (timestamp=%u windowid=%u event=%s data1=%d data2=%d)",
180 #define PRINT_KEY_EVENT(event) \
181 SDL_snprintf(details, sizeof (details), " (timestamp=%u windowid=%u state=%s repeat=%s scancode=%u keycode=%u mod=%u)", \
182 (uint) event->key.timestamp, (uint) event->key.windowID, \
183 event->key.state == SDL_PRESSED ? "pressed" : "released", \
184 event->key.repeat ? "true" : "false", \
185 (uint) event->key.keysym.scancode, \
186 (uint) event->key.keysym.sym, \
187 (uint) event->key.keysym.mod)
190 #undef PRINT_KEY_EVENT
193 SDL_snprintf(details,
sizeof (details),
" (timestamp=%u windowid=%u text='%s' start=%d length=%d)",
204 SDL_snprintf(details,
sizeof (details),
" (timestamp=%u windowid=%u which=%u state=%u x=%d y=%d xrel=%d yrel=%d)",
208 (
int)
event->motion.xrel, (
int)
event->motion.yrel);
211 #define PRINT_MBUTTON_EVENT(event) \
212 SDL_snprintf(details, sizeof (details), " (timestamp=%u windowid=%u which=%u button=%u state=%s clicks=%u x=%d y=%d)", \
213 (uint) event->button.timestamp, (uint) event->button.windowID, \
214 (uint) event->button.which, (uint) event->button.button, \
215 event->button.state == SDL_PRESSED ? "pressed" : "released", \
216 (uint) event->button.clicks, (int) event->button.x, (int) event->button.y)
219 #undef PRINT_MBUTTON_EVENT
223 SDL_snprintf(details,
sizeof (details),
" (timestamp=%u windowid=%u which=%u x=%d y=%d direction=%s)",
230 SDL_snprintf(details,
sizeof (details),
" (timestamp=%u which=%d axis=%u value=%d)",
236 SDL_snprintf(details,
sizeof (details),
" (timestamp=%u which=%d ball=%u xrel=%d yrel=%d)",
242 SDL_snprintf(details,
sizeof (details),
" (timestamp=%u which=%d hat=%u value=%u)",
247 #define PRINT_JBUTTON_EVENT(event) \
248 SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d button=%u state=%s)", \
249 (uint) event->jbutton.timestamp, (int) event->jbutton.which, \
250 (uint) event->jbutton.button, event->jbutton.state == SDL_PRESSED ? "pressed" : "released")
253 #undef PRINT_JBUTTON_EVENT
255 #define PRINT_JOYDEV_EVENT(event) SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d)", (uint) event->jdevice.timestamp, (int) event->jdevice.which)
258 #undef PRINT_JOYDEV_EVENT
261 SDL_snprintf(details,
sizeof (details),
" (timestamp=%u which=%d axis=%u value=%d)",
266 #define PRINT_CBUTTON_EVENT(event) \
267 SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d button=%u state=%s)", \
268 (uint) event->cbutton.timestamp, (int) event->cbutton.which, \
269 (uint) event->cbutton.button, event->cbutton.state == SDL_PRESSED ? "pressed" : "released")
272 #undef PRINT_CBUTTON_EVENT
274 #define PRINT_CONTROLLERDEV_EVENT(event) SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d)", (uint) event->cdevice.timestamp, (int) event->cdevice.which)
278 #undef PRINT_CONTROLLERDEV_EVENT
280 #define PRINT_FINGER_EVENT(event) \
281 SDL_snprintf(details, sizeof (details), " (timestamp=%u touchid=%"SDL_PRIs64" fingerid=%"SDL_PRIs64" x=%f y=%f dx=%f dy=%f pressure=%f)", \
282 (uint) event->tfinger.timestamp, event->tfinger.touchId, \
283 event->tfinger.fingerId, event->tfinger.x, event->tfinger.y, \
284 event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure)
288 #undef PRINT_FINGER_EVENT
290 #define PRINT_DOLLAR_EVENT(event) \
291 SDL_snprintf(details, sizeof (details), " (timestamp=%u touchid=%"SDL_PRIs64" gestureid=%"SDL_PRIs64" numfingers=%u error=%f x=%f y=%f)", \
292 (uint) event->dgesture.timestamp, event->dgesture.touchId, \
293 event->dgesture.gestureId, (uint) event->dgesture.numFingers, \
294 event->dgesture.error, event->dgesture.x, event->dgesture.y);
297 #undef PRINT_DOLLAR_EVENT
300 SDL_snprintf(details,
sizeof (details),
" (timestamp=%u touchid=%"SDL_PRIs64" dtheta=%f ddist=%f x=%f y=%f numfingers=%u)",
302 event->mgesture.dTheta,
event->mgesture.dDist,
306 #define PRINT_DROP_EVENT(event) SDL_snprintf(details, sizeof (details), " (file='%s' timestamp=%u windowid=%u)", event->drop.file, (uint) event->drop.timestamp, (uint) event->drop.windowID)
311 #undef PRINT_DROP_EVENT
313 #define PRINT_AUDIODEV_EVENT(event) SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%u iscapture=%s)", (uint) event->adevice.timestamp, (uint) event->adevice.which, event->adevice.iscapture ? "true" : "false");
316 #undef PRINT_AUDIODEV_EVENT
318 #undef SDL_EVENT_CASE
342 const char *report =
SDL_GetHint(
"SDL_EVENT_QUEUE_STATISTICS");
354 SDL_Log(
"SDL EVENT QUEUE: Maximum events in-flight: %d\n",
369 for (wmmsg =
SDL_EventQ.wmmsg_used; wmmsg; ) {
374 for (wmmsg =
SDL_EventQ.wmmsg_free; wmmsg; ) {
423 #if !SDL_THREADS_DISABLED
463 SDL_SetError(
"Event queue is full (%d events)", initial_count);
483 entry->
msg = *
event->syswm.
msg;
501 if (final_count >
SDL_EventQ.max_events_seen) {
553 for (
i = 0;
i < numevents; ++
i) {
565 for (wmmsg =
SDL_EventQ.wmmsg_used; wmmsg; wmmsg = wmmsg_next) {
566 wmmsg_next = wmmsg->
next;
573 for (entry =
SDL_EventQ.head; entry && (!
events || used < numevents); entry = next) {
576 if (minType <=
type &&
type <= maxType) {
655 for (entry =
SDL_EventQ.head; entry; entry = next) {
658 if (minType <=
type &&
type <= maxType) {
678 #if !SDL_JOYSTICK_DISABLED
685 #if !SDL_SENSOR_DISABLED
759 for (
i = 0;
i < event_watchers_count; ++
i) {
840 if (event_watchers) {
889 for (entry =
SDL_EventQ.head; entry; entry = next) {
917 if (
state != current_state)
947 return current_state;
972 event.type = eventType;
SDL_bool SDL_GetEventFilter(SDL_EventFilter *filter, void **userdata)
#define PRINT_DOLLAR_EVENT(event)
int SDL_SendSysWMEvent(SDL_SysWMmsg *message)
static int SDL_AddEvent(SDL_Event *event)
#define PRINT_MBUTTON_EVENT(event)
static int SDL_event_watchers_count
GLuint GLsizei const GLchar * message
void SDL_FilterEvents(SDL_EventFilter filter, void *userdata)
GLbitfield GLuint64 timeout
static void SDL_CutEvent(SDL_EventEntry *entry)
#define PRINT_JOYDEV_EVENT(event)
void SDL_ToggleDragAndDropSupport(void)
SDL_SysWMEntry * wmmsg_free
static Uint32 callback(Uint32 interval, void *param)
void SDL_GestureProcessEvent(SDL_Event *event)
static int SDL_DoEventLogging
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
static SDL_mutex * SDL_event_watchers_lock
#define PRINT_DROP_EVENT(event)
SDL_bool SDL_HasEvents(Uint32 minType, Uint32 maxType)
int SDL_PushEvent(SDL_Event *event)
Add an event to the event queue.
#define PRINT_JBUTTON_EVENT(event)
static SDL_bool SDL_event_watchers_removed
union SDL_SysWMmsg::@15 msg
struct _SDL_SysWMEntry * next
static SDL_VideoDevice * _this
int SDL_WaitEvent(SDL_Event *event)
Waits indefinitely for the next available event.
#define SDL_GetEventState(type)
#define PRINT_AUDIODEV_EVENT(event)
int SDL_PollEvent(SDL_Event *event)
Polls for currently pending events.
static SDL_bool SDL_event_watchers_dispatching
Uint32 SDL_RegisterEvents(int numevents)
GLuint const GLchar * name
void SDL_SendPendingSignalEvents(void)
Uint32 SDL_GetTicks(void)
Get the number of milliseconds since the SDL library initialization.
#define PRINT_KEY_EVENT(event)
#define SDL_assert(condition)
#define PRINT_CBUTTON_EVENT(event)
static struct @23 SDL_EventQ
#define SDL_EVENT_CASE(x)
void SDL_SetEventFilter(SDL_EventFilter filter, void *userdata)
#define PRINT_FINGER_EVENT(event)
#define SDL_JoystickUpdate
#define SDL_arraysize(array)
void SDL_AddEventWatch(SDL_EventFilter filter, void *userdata)
void SDL_FlushEvent(Uint32 type)
static Uint32 SDL_userevents
struct _SDL_EventEntry * prev
static SDL_Event events[EVENT_BUF_SIZE]
#define SDL_AddHintCallback
Uint8 SDL_EventState(Uint32 type, int state)
SDL_SysWMEntry * wmmsg_used
int(* SDL_EventFilter)(void *userdata, SDL_Event *event)
static SDL_EventWatcher SDL_EventOK
#define SDL_HINT_EVENT_LOGGING
A variable controlling whether SDL logs all events pushed onto its internal queue.
static SDL_DisabledEventBlock * SDL_disabled_events[256]
void SDL_StopEventLoop(void)
static SDL_EventWatcher * SDL_event_watchers
#define SDL_JoystickEventState
A type representing an atomic integer value. It is a struct so people don't accidentally use numeric ...
int SDL_SendKeymapChangedEvent(void)
static void SDL_LogEvent(const SDL_Event *event)
int SDL_WaitEventTimeout(SDL_Event *event, int timeout)
Waits until the specified timeout (in milliseconds) for the next available event.
SDL_EventType
The types of events that can be delivered.
void SDL_PumpEvents(void)
#define SDL_TICKS_PASSED(A, B)
Compare SDL ticks values, and return true if A has passed B.
#define PRINT_CONTROLLERDEV_EVENT(event)
struct _SDL_EventEntry * next
SDL_bool SDL_HasEvent(Uint32 type)
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const void * bits
SDL_VideoDevice * SDL_GetVideoDevice(void)
static void SDL_EventLoggingChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
#define SDL_DelHintCallback
void SDL_EventsQuit(void)
void(* PumpEvents)(_THIS)
int SDL_SendAppEvent(SDL_EventType eventType)
int SDL_PeepEvents(SDL_Event *events, int numevents, SDL_eventaction action, Uint32 minType, Uint32 maxType)
void SDL_FlushEvents(Uint32 minType, Uint32 maxType)
void SDL_DelEventWatch(SDL_EventFilter filter, void *userdata)
GLuint GLuint GLsizei GLenum type
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)
#define SDL_MAX_QUEUED_EVENTS
#define SDL_WINDOWEVENT_CASE(x)
int SDL_StartEventLoop(void)