SDL  2.0
SDL_events.c File Reference
#include "../SDL_internal.h"
#include "SDL.h"
#include "SDL_events.h"
#include "SDL_thread.h"
#include "SDL_events_c.h"
#include "../timer/SDL_timer_c.h"
#include "../joystick/SDL_joystick_c.h"
#include "../video/SDL_sysvideo.h"
#include "SDL_syswm.h"
+ Include dependency graph for SDL_events.c:

Go to the source code of this file.

Data Structures

struct  SDL_EventWatcher
 
struct  SDL_DisabledEventBlock
 
struct  _SDL_EventEntry
 
struct  _SDL_SysWMEntry
 

Macros

#define SDL_MAX_QUEUED_EVENTS   65535
 
#define uint   unsigned int
 
#define SDL_EVENT_CASE(x)   case x: SDL_strlcpy(name, #x, sizeof (name));
 
#define SDL_WINDOWEVENT_CASE(x)   case x: SDL_strlcpy(name2, #x, sizeof (name2)); break
 
#define PRINT_KEY_EVENT(event)
 
#define PRINT_MBUTTON_EVENT(event)
 
#define PRINT_JBUTTON_EVENT(event)
 
#define PRINT_JOYDEV_EVENT(event)   SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d)", (uint) event->jdevice.timestamp, (int) event->jdevice.which)
 
#define PRINT_CBUTTON_EVENT(event)
 
#define PRINT_CONTROLLERDEV_EVENT(event)   SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d)", (uint) event->cdevice.timestamp, (int) event->cdevice.which)
 
#define PRINT_FINGER_EVENT(event)
 
#define PRINT_DOLLAR_EVENT(event)
 
#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)
 
#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");
 

Functions

static void SDL_EventLoggingChanged (void *userdata, const char *name, const char *oldValue, const char *hint)
 
static void SDL_LogEvent (const SDL_Event *event)
 
void SDL_StopEventLoop (void)
 
int SDL_StartEventLoop (void)
 
static int SDL_AddEvent (SDL_Event *event)
 
static void SDL_CutEvent (SDL_EventEntry *entry)
 
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)
 
void SDL_PumpEvents (void)
 
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)
 
int SDL_SendAppEvent (SDL_EventType eventType)
 
int SDL_SendSysWMEvent (SDL_SysWMmsg *message)
 
int SDL_SendKeymapChangedEvent (void)
 
int SDL_EventsInit (void)
 
void SDL_EventsQuit (void)
 

Variables

static SDL_mutexSDL_event_watchers_lock
 
static SDL_EventWatcher SDL_EventOK
 
static SDL_EventWatcherSDL_event_watchers = NULL
 
static int SDL_event_watchers_count = 0
 
static SDL_bool SDL_event_watchers_dispatching = SDL_FALSE
 
static SDL_bool SDL_event_watchers_removed = SDL_FALSE
 
static SDL_DisabledEventBlockSDL_disabled_events [256]
 
static Uint32 SDL_userevents = SDL_USEREVENT
 
struct {
   SDL_mutex *   lock
 
   SDL_atomic_t   active
 
   SDL_atomic_t   count
 
   int   max_events_seen
 
   SDL_EventEntry *   head
 
   SDL_EventEntry *   tail
 
   SDL_EventEntry *   free
 
   SDL_SysWMEntry *   wmmsg_used
 
   SDL_SysWMEntry *   wmmsg_free
 
SDL_EventQ = { NULL, { 1 }, { 0 }, 0, NULL, NULL, NULL, NULL, NULL }
 
static int SDL_DoEventLogging = 0
 

Macro Definition Documentation

◆ PRINT_AUDIODEV_EVENT

#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");

◆ PRINT_CBUTTON_EVENT

#define PRINT_CBUTTON_EVENT (   event)
Value:
SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d button=%u state=%s)", \
(uint) event->cbutton.timestamp, (int) event->cbutton.which, \
(uint) event->cbutton.button, event->cbutton.state == SDL_PRESSED ? "pressed" : "released")

◆ PRINT_CONTROLLERDEV_EVENT

#define PRINT_CONTROLLERDEV_EVENT (   event)    SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d)", (uint) event->cdevice.timestamp, (int) event->cdevice.which)

◆ PRINT_DOLLAR_EVENT

#define PRINT_DOLLAR_EVENT (   event)
Value:
SDL_snprintf(details, sizeof (details), " (timestamp=%u touchid=%"SDL_PRIs64" gestureid=%"SDL_PRIs64" numfingers=%u error=%f x=%f y=%f)", \
(uint) event->dgesture.timestamp, event->dgesture.touchId, \
event->dgesture.gestureId, (uint) event->dgesture.numFingers, \
event->dgesture.error, event->dgesture.x, event->dgesture.y);

◆ PRINT_DROP_EVENT

#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)

◆ PRINT_FINGER_EVENT

#define PRINT_FINGER_EVENT (   event)
Value:
SDL_snprintf(details, sizeof (details), " (timestamp=%u touchid=%"SDL_PRIs64" fingerid=%"SDL_PRIs64" x=%f y=%f dx=%f dy=%f pressure=%f)", \
(uint) event->tfinger.timestamp, event->tfinger.touchId, \
event->tfinger.fingerId, event->tfinger.x, event->tfinger.y, \
event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure)

◆ PRINT_JBUTTON_EVENT

#define PRINT_JBUTTON_EVENT (   event)
Value:
SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d button=%u state=%s)", \
(uint) event->jbutton.timestamp, (int) event->jbutton.which, \
(uint) event->jbutton.button, event->jbutton.state == SDL_PRESSED ? "pressed" : "released")

◆ PRINT_JOYDEV_EVENT

#define PRINT_JOYDEV_EVENT (   event)    SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d)", (uint) event->jdevice.timestamp, (int) event->jdevice.which)

◆ PRINT_KEY_EVENT

#define PRINT_KEY_EVENT (   event)
Value:
SDL_snprintf(details, sizeof (details), " (timestamp=%u windowid=%u state=%s repeat=%s scancode=%u keycode=%u mod=%u)", \
(uint) event->key.timestamp, (uint) event->key.windowID, \
event->key.state == SDL_PRESSED ? "pressed" : "released", \
event->key.repeat ? "true" : "false", \
(uint) event->key.keysym.scancode, \
(uint) event->key.keysym.sym, \
(uint) event->key.keysym.mod)

◆ PRINT_MBUTTON_EVENT

#define PRINT_MBUTTON_EVENT (   event)
Value:
SDL_snprintf(details, sizeof (details), " (timestamp=%u windowid=%u which=%u button=%u state=%s clicks=%u x=%d y=%d)", \
(uint) event->button.timestamp, (uint) event->button.windowID, \
(uint) event->button.which, (uint) event->button.button, \
event->button.state == SDL_PRESSED ? "pressed" : "released", \
(uint) event->button.clicks, (int) event->button.x, (int) event->button.y)

◆ SDL_EVENT_CASE

#define SDL_EVENT_CASE (   x)    case x: SDL_strlcpy(name, #x, sizeof (name));

◆ SDL_MAX_QUEUED_EVENTS

#define SDL_MAX_QUEUED_EVENTS   65535

Definition at line 37 of file SDL_events.c.

◆ SDL_WINDOWEVENT_CASE

#define SDL_WINDOWEVENT_CASE (   x)    case x: SDL_strlcpy(name2, #x, sizeof (name2)); break

◆ uint

#define uint   unsigned int

Function Documentation

◆ SDL_AddEvent()

static int SDL_AddEvent ( SDL_Event event)
static

Definition at line 456 of file SDL_events.c.

457 {
458  SDL_EventEntry *entry;
459  const int initial_count = SDL_AtomicGet(&SDL_EventQ.count);
460  int final_count;
461 
462  if (initial_count >= SDL_MAX_QUEUED_EVENTS) {
463  SDL_SetError("Event queue is full (%d events)", initial_count);
464  return 0;
465  }
466 
467  if (SDL_EventQ.free == NULL) {
468  entry = (SDL_EventEntry *)SDL_malloc(sizeof(*entry));
469  if (!entry) {
470  return 0;
471  }
472  } else {
473  entry = SDL_EventQ.free;
474  SDL_EventQ.free = entry->next;
475  }
476 
477  if (SDL_DoEventLogging) {
479  }
480 
481  entry->event = *event;
482  if (event->type == SDL_SYSWMEVENT) {
483  entry->msg = *event->syswm.msg;
484  entry->event.syswm.msg = &entry->msg;
485  }
486 
487  if (SDL_EventQ.tail) {
488  SDL_EventQ.tail->next = entry;
489  entry->prev = SDL_EventQ.tail;
490  SDL_EventQ.tail = entry;
491  entry->next = NULL;
492  } else {
493  SDL_assert(!SDL_EventQ.head);
494  SDL_EventQ.head = entry;
495  SDL_EventQ.tail = entry;
496  entry->prev = NULL;
497  entry->next = NULL;
498  }
499 
500  final_count = SDL_AtomicAdd(&SDL_EventQ.count, 1) + 1;
501  if (final_count > SDL_EventQ.max_events_seen) {
502  SDL_EventQ.max_events_seen = final_count;
503  }
504 
505  return 1;
506 }

References NULL, SDL_assert, SDL_AtomicAdd, SDL_AtomicGet, SDL_DoEventLogging, SDL_EventQ, SDL_LogEvent(), SDL_malloc, SDL_MAX_QUEUED_EVENTS, SDL_SetError, and SDL_SYSWMEVENT.

Referenced by SDL_PeepEvents().

◆ 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 834 of file SDL_events.c.

835 {
837  SDL_EventWatcher *event_watchers;
838 
839  event_watchers = SDL_realloc(SDL_event_watchers, (SDL_event_watchers_count + 1) * sizeof(*event_watchers));
840  if (event_watchers) {
841  SDL_EventWatcher *watcher;
842 
843  SDL_event_watchers = event_watchers;
845  watcher->callback = filter;
846  watcher->userdata = userdata;
847  watcher->removed = SDL_FALSE;
849  }
850 
853  }
854  }
855 }

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_CutEvent()

static void SDL_CutEvent ( SDL_EventEntry *  entry)
static

Definition at line 510 of file SDL_events.c.

511 {
512  if (entry->prev) {
513  entry->prev->next = entry->next;
514  }
515  if (entry->next) {
516  entry->next->prev = entry->prev;
517  }
518 
519  if (entry == SDL_EventQ.head) {
520  SDL_assert(entry->prev == NULL);
521  SDL_EventQ.head = entry->next;
522  }
523  if (entry == SDL_EventQ.tail) {
524  SDL_assert(entry->next == NULL);
525  SDL_EventQ.tail = entry->prev;
526  }
527 
528  entry->next = SDL_EventQ.free;
529  SDL_EventQ.free = entry;
530  SDL_assert(SDL_AtomicGet(&SDL_EventQ.count) > 0);
531  SDL_AtomicAdd(&SDL_EventQ.count, -1);
532 }

References NULL, SDL_assert, SDL_AtomicAdd, SDL_AtomicGet, and SDL_EventQ.

Referenced by SDL_FilterEvents(), SDL_FlushEvents(), and SDL_PeepEvents().

◆ SDL_DelEventWatch()

void SDL_DelEventWatch ( SDL_EventFilter  filter,
void userdata 
)

Remove an event watch function added with SDL_AddEventWatch()

Definition at line 858 of file SDL_events.c.

859 {
861  int i;
862 
863  for (i = 0; i < SDL_event_watchers_count; ++i) {
864  if (SDL_event_watchers[i].callback == filter && SDL_event_watchers[i].userdata == userdata) {
868  } else {
870  if (i < SDL_event_watchers_count) {
872  }
873  }
874  break;
875  }
876  }
877 
880  }
881  }
882 }

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_EventLoggingChanged()

static void SDL_EventLoggingChanged ( void userdata,
const char *  name,
const char *  oldValue,
const char *  hint 
)
static

Definition at line 92 of file SDL_events.c.

93 {
94  SDL_DoEventLogging = (hint && *hint) ? SDL_max(SDL_min(SDL_atoi(hint), 2), 0) : 0;
95 }

References SDL_atoi, SDL_DoEventLogging, SDL_max, and SDL_min.

Referenced by SDL_EventsInit(), and SDL_EventsQuit().

◆ SDL_EventsInit()

int SDL_EventsInit ( void  )

◆ SDL_EventsQuit()

◆ 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 902 of file SDL_events.c.

903 {
904  const SDL_bool isdnd = ((state == SDL_DISABLE) || (state == SDL_ENABLE)) &&
905  ((type == SDL_DROPFILE) || (type == SDL_DROPTEXT));
906  Uint8 current_state;
907  Uint8 hi = ((type >> 8) & 0xff);
908  Uint8 lo = (type & 0xff);
909 
910  if (SDL_disabled_events[hi] &&
911  (SDL_disabled_events[hi]->bits[lo/32] & (1 << (lo&31)))) {
912  current_state = SDL_DISABLE;
913  } else {
914  current_state = SDL_ENABLE;
915  }
916 
917  if (state != current_state)
918  {
919  switch (state) {
920  case SDL_DISABLE:
921  /* Disable this event type and discard pending events */
922  if (!SDL_disabled_events[hi]) {
924  if (!SDL_disabled_events[hi]) {
925  /* Out of memory, nothing we can do... */
926  break;
927  }
928  }
929  SDL_disabled_events[hi]->bits[lo/32] |= (1 << (lo&31));
931  break;
932  case SDL_ENABLE:
933  SDL_disabled_events[hi]->bits[lo/32] &= ~(1 << (lo&31));
934  break;
935  default:
936  /* Querying state... */
937  break;
938  }
939  }
940 
941  /* turn off drag'n'drop support if we've disabled the events.
942  This might change some UI details at the OS level. */
943  if (isdnd) {
945  }
946 
947  return current_state;
948 }

References SDL_DisabledEventBlock::bits, 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 885 of file SDL_events.c.

886 {
887  if (!SDL_EventQ.lock || SDL_LockMutex(SDL_EventQ.lock) == 0) {
888  SDL_EventEntry *entry, *next;
889  for (entry = SDL_EventQ.head; entry; entry = next) {
890  next = entry->next;
891  if (!filter(userdata, &entry->event)) {
892  SDL_CutEvent(entry);
893  }
894  }
895  if (SDL_EventQ.lock) {
897  }
898  }
899 }

References _SDL_SysWMEntry::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 626 of file SDL_events.c.

627 {
629 }

References SDL_FlushEvents().

Referenced by SDL_EventState().

◆ SDL_FlushEvents()

void SDL_FlushEvents ( Uint32  minType,
Uint32  maxType 
)

Definition at line 632 of file SDL_events.c.

633 {
634  /* !!! FIXME: we need to manually SDL_free() the strings in TEXTINPUT and
635  drag'n'drop events if we're flushing them without passing them to the
636  app, but I don't know if this is the right place to do that. */
637 
638  /* Don't look after we've quit */
639  if (!SDL_AtomicGet(&SDL_EventQ.active)) {
640  return;
641  }
642 
643  /* Make sure the events are current */
644 #if 0
645  /* Actually, we can't do this since we might be flushing while processing
646  a resize event, and calling this might trigger further resize events.
647  */
648  SDL_PumpEvents();
649 #endif
650 
651  /* Lock the event queue */
652  if (!SDL_EventQ.lock || SDL_LockMutex(SDL_EventQ.lock) == 0) {
653  SDL_EventEntry *entry, *next;
654  Uint32 type;
655  for (entry = SDL_EventQ.head; entry; entry = next) {
656  next = entry->next;
657  type = entry->event.type;
658  if (minType <= type && type <= maxType) {
659  SDL_CutEvent(entry);
660  }
661  }
662  if (SDL_EventQ.lock) {
664  }
665  }
666 }

References _SDL_SysWMEntry::next, SDL_AtomicGet, SDL_CutEvent(), SDL_EventQ, SDL_LockMutex, SDL_PumpEvents(), and SDL_UnlockMutex.

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 810 of file SDL_events.c.

811 {
812  SDL_EventWatcher event_ok;
813 
815  event_ok = SDL_EventOK;
816 
819  }
820  } else {
821  SDL_zero(event_ok);
822  }
823 
824  if (filter) {
825  *filter = event_ok.callback;
826  }
827  if (userdata) {
828  *userdata = event_ok.userdata;
829  }
830  return event_ok.callback ? SDL_TRUE : SDL_FALSE;
831 }

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 614 of file SDL_events.c.

615 {
616  return (SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, type, type) > 0);
617 }

References NULL, SDL_PEEKEVENT, and SDL_PeepEvents().

◆ SDL_HasEvents()

SDL_bool SDL_HasEvents ( Uint32  minType,
Uint32  maxType 
)

Definition at line 620 of file SDL_events.c.

621 {
622  return (SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, minType, maxType) > 0);
623 }

References NULL, SDL_PEEKEVENT, and SDL_PeepEvents().

◆ SDL_LogEvent()

static void SDL_LogEvent ( const SDL_Event event)
static

Definition at line 98 of file SDL_events.c.

99 {
100  char name[32];
101  char details[128];
102 
103  /* mouse/finger motion are spammy, ignore these if they aren't demanded. */
104  if ( (SDL_DoEventLogging < 2) &&
105  ( (event->type == SDL_MOUSEMOTION) ||
106  (event->type == SDL_FINGERMOTION) ) ) {
107  return;
108  }
109 
110  /* this is to make SDL_snprintf() calls cleaner. */
111  #define uint unsigned int
112 
113  name[0] = '\0';
114  details[0] = '\0';
115 
116  /* !!! FIXME: This code is kinda ugly, sorry. */
117 
118  if ((event->type >= SDL_USEREVENT) && (event->type <= SDL_LASTEVENT)) {
119  char plusstr[16];
120  SDL_strlcpy(name, "SDL_USEREVENT", sizeof (name));
121  if (event->type > SDL_USEREVENT) {
122  SDL_snprintf(plusstr, sizeof (plusstr), "+%u", ((uint) event->type) - SDL_USEREVENT);
123  } else {
124  plusstr[0] = '\0';
125  }
126  SDL_snprintf(details, sizeof (details), "%s (timestamp=%u windowid=%u code=%d data1=%p data2=%p)",
127  plusstr, (uint) event->user.timestamp, (uint) event->user.windowID,
128  (int) event->user.code, event->user.data1, event->user.data2);
129  }
130 
131  switch (event->type) {
132  #define SDL_EVENT_CASE(x) case x: SDL_strlcpy(name, #x, sizeof (name));
133  SDL_EVENT_CASE(SDL_FIRSTEVENT) SDL_strlcpy(details, " (THIS IS PROBABLY A BUG!)", sizeof (details)); break;
134  SDL_EVENT_CASE(SDL_QUIT) SDL_snprintf(details, sizeof (details), " (timestamp=%u)", (uint) event->quit.timestamp); break;
145 
147  char name2[64];
148  switch(event->window.event) {
149  case SDL_WINDOWEVENT_NONE: SDL_strlcpy(name2, "SDL_WINDOWEVENT_NONE (THIS IS PROBABLY A BUG!)", sizeof (name2)); break;
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;
169  }
170  SDL_snprintf(details, sizeof (details), " (timestamp=%u windowid=%u event=%s data1=%d data2=%d)",
171  (uint) event->window.timestamp, (uint) event->window.windowID, name2, (int) event->window.data1, (int) event->window.data2);
172  break;
173  }
174 
176  /* !!! FIXME: we don't delve further at the moment. */
177  SDL_snprintf(details, sizeof (details), " (timestamp=%u)", (uint) event->syswm.timestamp);
178  break;
179 
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
191 
193  SDL_snprintf(details, sizeof (details), " (timestamp=%u windowid=%u text='%s' start=%d length=%d)",
194  (uint) event->edit.timestamp, (uint) event->edit.windowID,
195  event->edit.text, (int) event->edit.start, (int) event->edit.length);
196  break;
197 
199  SDL_snprintf(details, sizeof (details), " (timestamp=%u windowid=%u text='%s')", (uint) event->text.timestamp, (uint) event->text.windowID, event->text.text);
200  break;
201 
202 
204  SDL_snprintf(details, sizeof (details), " (timestamp=%u windowid=%u which=%u state=%u x=%d y=%d xrel=%d yrel=%d)",
205  (uint) event->motion.timestamp, (uint) event->motion.windowID,
206  (uint) event->motion.which, (uint) event->motion.state,
207  (int) event->motion.x, (int) event->motion.y,
208  (int) event->motion.xrel, (int) event->motion.yrel);
209  break;
210 
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
220 
221 
223  SDL_snprintf(details, sizeof (details), " (timestamp=%u windowid=%u which=%u x=%d y=%d direction=%s)",
224  (uint) event->wheel.timestamp, (uint) event->wheel.windowID,
225  (uint) event->wheel.which, (int) event->wheel.x, (int) event->wheel.y,
226  event->wheel.direction == SDL_MOUSEWHEEL_NORMAL ? "normal" : "flipped");
227  break;
228 
230  SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d axis=%u value=%d)",
231  (uint) event->jaxis.timestamp, (int) event->jaxis.which,
232  (uint) event->jaxis.axis, (int) event->jaxis.value);
233  break;
234 
236  SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d ball=%u xrel=%d yrel=%d)",
237  (uint) event->jball.timestamp, (int) event->jball.which,
238  (uint) event->jball.ball, (int) event->jball.xrel, (int) event->jball.yrel);
239  break;
240 
242  SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d hat=%u value=%u)",
243  (uint) event->jhat.timestamp, (int) event->jhat.which,
244  (uint) event->jhat.hat, (uint) event->jhat.value);
245  break;
246 
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
254 
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
259 
261  SDL_snprintf(details, sizeof (details), " (timestamp=%u which=%d axis=%u value=%d)",
262  (uint) event->caxis.timestamp, (int) event->caxis.which,
263  (uint) event->caxis.axis, (int) event->caxis.value);
264  break;
265 
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
273 
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
279 
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
289 
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
298 
300  SDL_snprintf(details, sizeof (details), " (timestamp=%u touchid=%"SDL_PRIs64" dtheta=%f ddist=%f x=%f y=%f numfingers=%u)",
301  (uint) event->mgesture.timestamp, event->mgesture.touchId,
302  event->mgesture.dTheta, event->mgesture.dDist,
303  event->mgesture.x, event->mgesture.y, (uint) event->mgesture.numFingers);
304  break;
305 
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
312 
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
317 
318  #undef SDL_EVENT_CASE
319 
320  default:
321  if (!name[0]) {
322  SDL_strlcpy(name, "UNKNOWN", sizeof (name));
323  SDL_snprintf(details, sizeof (details), " #%u! (Bug? FIXME?)", (uint) event->type);
324  }
325  break;
326  }
327 
328  if (name[0]) {
329  SDL_Log("SDL EVENT: %s%s", name, details);
330  }
331 
332  #undef uint
333 }

References PRINT_AUDIODEV_EVENT, PRINT_CBUTTON_EVENT, PRINT_CONTROLLERDEV_EVENT, PRINT_DOLLAR_EVENT, PRINT_DROP_EVENT, PRINT_FINGER_EVENT, PRINT_JBUTTON_EVENT, PRINT_JOYDEV_EVENT, PRINT_KEY_EVENT, PRINT_MBUTTON_EVENT, SDL_APP_DIDENTERBACKGROUND, SDL_APP_DIDENTERFOREGROUND, SDL_APP_LOWMEMORY, SDL_APP_TERMINATING, SDL_APP_WILLENTERBACKGROUND, SDL_APP_WILLENTERFOREGROUND, SDL_AUDIODEVICEADDED, SDL_AUDIODEVICEREMOVED, SDL_CLIPBOARDUPDATE, SDL_CONTROLLERAXISMOTION, SDL_CONTROLLERBUTTONDOWN, SDL_CONTROLLERBUTTONUP, SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMAPPED, SDL_CONTROLLERDEVICEREMOVED, SDL_DoEventLogging, SDL_DOLLARGESTURE, SDL_DOLLARRECORD, SDL_DROPBEGIN, SDL_DROPCOMPLETE, SDL_DROPFILE, SDL_DROPTEXT, SDL_EVENT_CASE, SDL_FINGERDOWN, SDL_FINGERMOTION, SDL_FINGERUP, SDL_FIRSTEVENT, SDL_JOYAXISMOTION, SDL_JOYBALLMOTION, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED, SDL_JOYHATMOTION, SDL_KEYDOWN, SDL_KEYMAPCHANGED, SDL_KEYUP, SDL_LASTEVENT, SDL_Log, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP, SDL_MOUSEMOTION, SDL_MOUSEWHEEL, SDL_MOUSEWHEEL_NORMAL, SDL_MULTIGESTURE, SDL_PRIs64, SDL_QUIT, SDL_RENDER_DEVICE_RESET, SDL_RENDER_TARGETS_RESET, SDL_snprintf, SDL_strlcpy, SDL_SYSWMEVENT, SDL_TEXTEDITING, SDL_TEXTINPUT, SDL_USEREVENT, SDL_WINDOWEVENT, SDL_WINDOWEVENT_CASE, SDL_WINDOWEVENT_CLOSE, SDL_WINDOWEVENT_ENTER, SDL_WINDOWEVENT_EXPOSED, SDL_WINDOWEVENT_FOCUS_GAINED, SDL_WINDOWEVENT_FOCUS_LOST, SDL_WINDOWEVENT_HIDDEN, SDL_WINDOWEVENT_HIT_TEST, SDL_WINDOWEVENT_LEAVE, SDL_WINDOWEVENT_MAXIMIZED, SDL_WINDOWEVENT_MINIMIZED, SDL_WINDOWEVENT_MOVED, SDL_WINDOWEVENT_NONE, SDL_WINDOWEVENT_RESIZED, SDL_WINDOWEVENT_RESTORED, SDL_WINDOWEVENT_SHOWN, SDL_WINDOWEVENT_SIZE_CHANGED, SDL_WINDOWEVENT_TAKE_FOCUS, and uint.

Referenced by SDL_AddEvent().

◆ 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 536 of file SDL_events.c.

538 {
539  int i, used;
540 
541  /* Don't look after we've quit */
542  if (!SDL_AtomicGet(&SDL_EventQ.active)) {
543  /* We get a few spurious events at shutdown, so don't warn then */
544  if (action != SDL_ADDEVENT) {
545  SDL_SetError("The event system has been shut down");
546  }
547  return (-1);
548  }
549  /* Lock the event queue */
550  used = 0;
551  if (!SDL_EventQ.lock || SDL_LockMutex(SDL_EventQ.lock) == 0) {
552  if (action == SDL_ADDEVENT) {
553  for (i = 0; i < numevents; ++i) {
554  used += SDL_AddEvent(&events[i]);
555  }
556  } else {
557  SDL_EventEntry *entry, *next;
558  SDL_SysWMEntry *wmmsg, *wmmsg_next;
559  Uint32 type;
560 
561  if (action == SDL_GETEVENT) {
562  /* Clean out any used wmmsg data
563  FIXME: Do we want to retain the data for some period of time?
564  */
565  for (wmmsg = SDL_EventQ.wmmsg_used; wmmsg; wmmsg = wmmsg_next) {
566  wmmsg_next = wmmsg->next;
567  wmmsg->next = SDL_EventQ.wmmsg_free;
568  SDL_EventQ.wmmsg_free = wmmsg;
569  }
570  SDL_EventQ.wmmsg_used = NULL;
571  }
572 
573  for (entry = SDL_EventQ.head; entry && (!events || used < numevents); entry = next) {
574  next = entry->next;
575  type = entry->event.type;
576  if (minType <= type && type <= maxType) {
577  if (events) {
578  events[used] = entry->event;
579  if (entry->event.type == SDL_SYSWMEVENT) {
580  /* We need to copy the wmmsg somewhere safe.
581  For now we'll guarantee it's valid at least until
582  the next call to SDL_PeepEvents()
583  */
584  if (SDL_EventQ.wmmsg_free) {
585  wmmsg = SDL_EventQ.wmmsg_free;
586  SDL_EventQ.wmmsg_free = wmmsg->next;
587  } else {
588  wmmsg = (SDL_SysWMEntry *)SDL_malloc(sizeof(*wmmsg));
589  }
590  wmmsg->msg = *entry->event.syswm.msg;
591  wmmsg->next = SDL_EventQ.wmmsg_used;
592  SDL_EventQ.wmmsg_used = wmmsg;
593  events[used].syswm.msg = &wmmsg->msg;
594  }
595 
596  if (action == SDL_GETEVENT) {
597  SDL_CutEvent(entry);
598  }
599  }
600  ++used;
601  }
602  }
603  }
604  if (SDL_EventQ.lock) {
606  }
607  } else {
608  return SDL_SetError("Couldn't lock event queue");
609  }
610  return (used);
611 }

References events, i, SDL_SysWMmsg::msg, SDL_SysWMEvent::msg, _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, and SDL_Event::syswm.

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 698 of file SDL_events.c.

699 {
700  return SDL_WaitEventTimeout(event, 0);
701 }

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 670 of file SDL_events.c.

671 {
673 
674  /* Get events from the video subsystem */
675  if (_this) {
677  }
678 #if !SDL_JOYSTICK_DISABLED
679  /* Check for joystick state change */
682  }
683 #endif
684 
685 #if !SDL_SENSOR_DISABLED
686  /* Check for sensor state change */
689  }
690 #endif
691 
692  SDL_SendPendingSignalEvents(); /* in case we had a signal handler fire, etc. */
693 }

References _this, SDL_VideoDevice::PumpEvents, SDL_disabled_events, SDL_GetVideoDevice(), SDL_JOYAXISMOTION, SDL_JoystickEventState, SDL_JoystickUpdate, SDL_QUERY, SDL_SendPendingSignalEvents(), SDL_SENSORUPDATE, and SDL_SensorUpdate.

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 741 of file SDL_events.c.

742 {
743  event->common.timestamp = SDL_GetTicks();
744 
750  }
751  return 0;
752  }
753 
754  if (SDL_event_watchers_count > 0) {
755  /* Make sure we only dispatch the current watcher list */
756  int i, event_watchers_count = SDL_event_watchers_count;
757 
759  for (i = 0; i < event_watchers_count; ++i) {
760  if (!SDL_event_watchers[i].removed) {
762  }
763  }
765 
767  for (i = SDL_event_watchers_count; i--; ) {
768  if (SDL_event_watchers[i].removed) {
770  if (i < SDL_event_watchers_count) {
772  }
773  }
774  }
776  }
777  }
778 
781  }
782  }
783  }
784 
785  if (SDL_PeepEvents(event, 1, SDL_ADDEVENT, 0, 0) <= 0) {
786  return -1;
787  }
788 
790 
791  return 1;
792 }

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 951 of file SDL_events.c.

952 {
953  Uint32 event_base;
954 
955  if ((numevents > 0) && (SDL_userevents+numevents <= SDL_LASTEVENT)) {
956  event_base = SDL_userevents;
957  SDL_userevents += numevents;
958  } else {
959  event_base = (Uint32)-1;
960  }
961  return event_base;
962 }

References SDL_LASTEVENT, and SDL_userevents.

◆ SDL_SendAppEvent()

int SDL_SendAppEvent ( SDL_EventType  eventType)

Definition at line 965 of file SDL_events.c.

966 {
967  int posted;
968 
969  posted = 0;
970  if (SDL_GetEventState(eventType) == SDL_ENABLE) {
972  event.type = eventType;
973  posted = (SDL_PushEvent(&event) > 0);
974  }
975  return (posted);
976 }

References SDL_ENABLE, SDL_GetEventState, and SDL_PushEvent().

Referenced by SDL_OnApplicationDidBecomeActive(), SDL_OnApplicationDidEnterBackground(), SDL_OnApplicationDidReceiveMemoryWarning(), SDL_OnApplicationWillEnterForeground(), SDL_OnApplicationWillResignActive(), SDL_OnApplicationWillTerminate(), SDL_SendKeymapChangedEvent(), and SDL_SendQuit().

◆ SDL_SendKeymapChangedEvent()

int SDL_SendKeymapChangedEvent ( void  )

Definition at line 996 of file SDL_events.c.

997 {
999 }

References SDL_KEYMAPCHANGED, and SDL_SendAppEvent().

◆ SDL_SendSysWMEvent()

int SDL_SendSysWMEvent ( SDL_SysWMmsg message)

Definition at line 979 of file SDL_events.c.

980 {
981  int posted;
982 
983  posted = 0;
986  SDL_memset(&event, 0, sizeof(event));
987  event.type = SDL_SYSWMEVENT;
988  event.syswm.msg = message;
989  posted = (SDL_PushEvent(&event) > 0);
990  }
991  /* Update internal event state */
992  return (posted);
993 }

References SDL_ENABLE, SDL_GetEventState, SDL_memset, SDL_PushEvent(), and SDL_SYSWMEVENT.

◆ 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);

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 795 of file SDL_events.c.

796 {
798  /* Set filter and discard pending events */
800  SDL_EventOK.userdata = userdata;
802 
805  }
806  }
807 }

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_StartEventLoop()

int SDL_StartEventLoop ( void  )

Definition at line 414 of file SDL_events.c.

415 {
416  /* We'll leave the event queue alone, since we might have gotten
417  some important events at launch (like SDL_DROPFILE)
418 
419  FIXME: Does this introduce any other bugs with events at startup?
420  */
421 
422  /* Create the lock and set ourselves active */
423 #if !SDL_THREADS_DISABLED
424  if (!SDL_EventQ.lock) {
425  SDL_EventQ.lock = SDL_CreateMutex();
426  if (SDL_EventQ.lock == NULL) {
427  return -1;
428  }
429  }
430 
433  if (SDL_event_watchers_lock == NULL) {
434  return -1;
435  }
436  }
437 #endif /* !SDL_THREADS_DISABLED */
438 
439  /* Process most event types */
443 #if 0 /* Leave these events enabled so apps can respond to items being dragged onto them at startup */
446 #endif
447 
448  SDL_AtomicSet(&SDL_EventQ.active, 1);
449 
450  return 0;
451 }

References NULL, SDL_AtomicSet, SDL_CreateMutex, SDL_DISABLE, SDL_DROPFILE, SDL_DROPTEXT, SDL_event_watchers_lock, SDL_EventQ, SDL_EventState(), SDL_SYSWMEVENT, SDL_TEXTEDITING, and SDL_TEXTINPUT.

Referenced by SDL_EventsInit().

◆ SDL_StopEventLoop()

void SDL_StopEventLoop ( void  )

Definition at line 340 of file SDL_events.c.

341 {
342  const char *report = SDL_GetHint("SDL_EVENT_QUEUE_STATISTICS");
343  int i;
344  SDL_EventEntry *entry;
345  SDL_SysWMEntry *wmmsg;
346 
347  if (SDL_EventQ.lock) {
349  }
350 
351  SDL_AtomicSet(&SDL_EventQ.active, 0);
352 
353  if (report && SDL_atoi(report)) {
354  SDL_Log("SDL EVENT QUEUE: Maximum events in-flight: %d\n",
355  SDL_EventQ.max_events_seen);
356  }
357 
358  /* Clean out EventQ */
359  for (entry = SDL_EventQ.head; entry; ) {
360  SDL_EventEntry *next = entry->next;
361  SDL_free(entry);
362  entry = next;
363  }
364  for (entry = SDL_EventQ.free; entry; ) {
365  SDL_EventEntry *next = entry->next;
366  SDL_free(entry);
367  entry = next;
368  }
369  for (wmmsg = SDL_EventQ.wmmsg_used; wmmsg; ) {
370  SDL_SysWMEntry *next = wmmsg->next;
371  SDL_free(wmmsg);
372  wmmsg = next;
373  }
374  for (wmmsg = SDL_EventQ.wmmsg_free; wmmsg; ) {
375  SDL_SysWMEntry *next = wmmsg->next;
376  SDL_free(wmmsg);
377  wmmsg = next;
378  }
379 
380  SDL_AtomicSet(&SDL_EventQ.count, 0);
381  SDL_EventQ.max_events_seen = 0;
382  SDL_EventQ.head = NULL;
383  SDL_EventQ.tail = NULL;
384  SDL_EventQ.free = NULL;
385  SDL_EventQ.wmmsg_used = NULL;
386  SDL_EventQ.wmmsg_free = NULL;
387 
388  /* Clear disabled event state */
389  for (i = 0; i < SDL_arraysize(SDL_disabled_events); ++i) {
392  }
393 
397  }
398  if (SDL_event_watchers) {
402  }
404 
405  if (SDL_EventQ.lock) {
408  SDL_EventQ.lock = NULL;
409  }
410 }

References i, _SDL_SysWMEntry::next, NULL, SDL_arraysize, SDL_atoi, SDL_AtomicSet, SDL_DestroyMutex, SDL_disabled_events, SDL_event_watchers, SDL_event_watchers_count, SDL_event_watchers_lock, SDL_EventOK, SDL_EventQ, SDL_free, SDL_GetHint, SDL_LockMutex, SDL_Log, SDL_UnlockMutex, and SDL_zero.

Referenced by SDL_EventsQuit().

◆ 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 704 of file SDL_events.c.

705 {
706  return SDL_WaitEventTimeout(event, -1);
707 }

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 710 of file SDL_events.c.

711 {
712  Uint32 expiration = 0;
713 
714  if (timeout > 0)
715  expiration = SDL_GetTicks() + timeout;
716 
717  for (;;) {
718  SDL_PumpEvents();
720  case -1:
721  return 0;
722  case 0:
723  if (timeout == 0) {
724  /* Polling and no events, just return */
725  return 0;
726  }
727  if (timeout > 0 && SDL_TICKS_PASSED(SDL_GetTicks(), expiration)) {
728  /* Timeout expired and no events */
729  return 0;
730  }
731  SDL_Delay(10);
732  break;
733  default:
734  /* Has events */
735  return 1;
736  }
737  }
738 }

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().

Variable Documentation

◆ active

SDL_atomic_t active

Definition at line 77 of file SDL_events.c.

Referenced by SDL_BWin::WindowActivated().

◆ count

Definition at line 78 of file SDL_events.c.

◆ free

SDL_EventEntry* free

◆ head

SDL_EventEntry* head

Definition at line 80 of file SDL_events.c.

Referenced by mmap_alloc().

◆ lock

◆ max_events_seen

int max_events_seen

Definition at line 79 of file SDL_events.c.

◆ SDL_disabled_events

SDL_DisabledEventBlock* SDL_disabled_events[256]
static

Definition at line 56 of file SDL_events.c.

Referenced by SDL_EventState(), SDL_PumpEvents(), and SDL_StopEventLoop().

◆ SDL_DoEventLogging

int SDL_DoEventLogging = 0
static

Definition at line 89 of file SDL_events.c.

Referenced by SDL_AddEvent(), SDL_EventLoggingChanged(), and SDL_LogEvent().

◆ SDL_event_watchers

SDL_EventWatcher* SDL_event_watchers = NULL
static

◆ SDL_event_watchers_count

int SDL_event_watchers_count = 0
static

◆ SDL_event_watchers_dispatching

SDL_bool SDL_event_watchers_dispatching = SDL_FALSE
static

Definition at line 49 of file SDL_events.c.

Referenced by SDL_DelEventWatch(), and SDL_PushEvent().

◆ SDL_event_watchers_lock

◆ SDL_event_watchers_removed

SDL_bool SDL_event_watchers_removed = SDL_FALSE
static

Definition at line 50 of file SDL_events.c.

Referenced by SDL_DelEventWatch(), and SDL_PushEvent().

◆ SDL_EventOK

SDL_EventWatcher SDL_EventOK
static

◆ SDL_EventQ

◆ SDL_userevents

Uint32 SDL_userevents = SDL_USEREVENT
static

Definition at line 57 of file SDL_events.c.

Referenced by SDL_RegisterEvents().

◆ tail

SDL_EventEntry* tail

Definition at line 81 of file SDL_events.c.

◆ wmmsg_free

SDL_SysWMEntry* wmmsg_free

Definition at line 84 of file SDL_events.c.

◆ wmmsg_used

SDL_SysWMEntry* wmmsg_used

Definition at line 83 of file SDL_events.c.

SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:416
SDL_CONTROLLERDEVICEREMOVED
@ SDL_CONTROLLERDEVICEREMOVED
Definition: SDL_events.h:124
SDL_memset
#define SDL_memset
Definition: SDL_dynapi_overrides.h:386
PRINT_DOLLAR_EVENT
#define PRINT_DOLLAR_EVENT(event)
Uint32
uint32_t Uint32
Definition: SDL_stdinc.h:203
SDL_EventWatcher::callback
SDL_EventFilter callback
Definition: SDL_events.c:40
SDL_EventWatcher::removed
SDL_bool removed
Definition: SDL_events.c:42
SDL_strlcpy
#define SDL_strlcpy
Definition: SDL_dynapi_overrides.h:394
SDL_APP_TERMINATING
@ SDL_APP_TERMINATING
Definition: SDL_events.h:63
SDL_APP_DIDENTERBACKGROUND
@ SDL_APP_DIDENTERBACKGROUND
Definition: SDL_events.h:75
SDL_APP_DIDENTERFOREGROUND
@ SDL_APP_DIDENTERFOREGROUND
Definition: SDL_events.h:83
SDL_AddEvent
static int SDL_AddEvent(SDL_Event *event)
Definition: SDL_events.c:456
PRINT_MBUTTON_EVENT
#define PRINT_MBUTTON_EVENT(event)
SDL_LockMutex
#define SDL_LockMutex
Definition: SDL_dynapi_overrides.h:260
SDL_EventWatcher::userdata
void * userdata
Definition: SDL_events.c:41
SDL_event_watchers_count
static int SDL_event_watchers_count
Definition: SDL_events.c:48
SDL_ADDEVENT
@ SDL_ADDEVENT
Definition: SDL_events.h:615
NULL
#define NULL
Definition: begin_code.h:167
message
GLuint GLsizei const GLchar * message
Definition: SDL_opengl_glext.h:2483
SDL_WINDOWEVENT_FOCUS_LOST
@ SDL_WINDOWEVENT_FOCUS_LOST
Definition: SDL_video.h:166
timeout
GLbitfield GLuint64 timeout
Definition: SDL_opengl_glext.h:1483
SDL_CutEvent
static void SDL_CutEvent(SDL_EventEntry *entry)
Definition: SDL_events.c:510
SDL_KEYUP
@ SDL_KEYUP
Definition: SDL_events.h:97
SDL_WINDOWEVENT_CLOSE
@ SDL_WINDOWEVENT_CLOSE
Definition: SDL_video.h:167
SDL_CONTROLLERBUTTONDOWN
@ SDL_CONTROLLERBUTTONDOWN
Definition: SDL_events.h:121
SDL_SensorUpdate
#define SDL_SensorUpdate
Definition: SDL_dynapi_overrides.h:696
SDL_EventFilter
int(* SDL_EventFilter)(void *userdata, SDL_Event *event)
Definition: SDL_events.h:699
PRINT_JOYDEV_EVENT
#define PRINT_JOYDEV_EVENT(event)
SDL_WINDOWEVENT_ENTER
@ SDL_WINDOWEVENT_ENTER
Definition: SDL_video.h:163
SDL_DOLLARRECORD
@ SDL_DOLLARRECORD
Definition: SDL_events.h:134
SDL_ToggleDragAndDropSupport
void SDL_ToggleDragAndDropSupport(void)
Definition: SDL_video.c:1374
SDL_MOUSEBUTTONUP
@ SDL_MOUSEBUTTONUP
Definition: SDL_events.h:107
SDL_realloc
#define SDL_realloc
Definition: SDL_dynapi_overrides.h:376
SDL_WINDOWEVENT_RESIZED
@ SDL_WINDOWEVENT_RESIZED
Definition: SDL_video.h:155
SDL_TEXTEDITING
@ SDL_TEXTEDITING
Definition: SDL_events.h:98
SDL_CreateMutex
#define SDL_CreateMutex
Definition: SDL_dynapi_overrides.h:259
SDL_SysWMmsg::msg
union SDL_SysWMmsg::@15 msg
callback
static Uint32 callback(Uint32 interval, void *param)
Definition: testtimer.c:34
SDL_GestureProcessEvent
void SDL_GestureProcessEvent(SDL_Event *event)
Definition: SDL_gesture.c:542
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:759
uint
#define uint
SDL_DoEventLogging
static int SDL_DoEventLogging
Definition: SDL_events.c:89
SDL_JOYDEVICEREMOVED
@ SDL_JOYDEVICEREMOVED
Definition: SDL_events.h:117
SDL_WINDOWEVENT_MOVED
@ SDL_WINDOWEVENT_MOVED
Definition: SDL_video.h:153
SDL_GetHint
#define SDL_GetHint
Definition: SDL_dynapi_overrides.h:191
SDL_DisabledEventBlock::bits
Uint32 bits[8]
Definition: SDL_events.c:53
SDL_AUDIODEVICEADDED
@ SDL_AUDIODEVICEADDED
Definition: SDL_events.h:147
SDL_KEYDOWN
@ SDL_KEYDOWN
Definition: SDL_events.h:96
SDL_APP_LOWMEMORY
@ SDL_APP_LOWMEMORY
Definition: SDL_events.h:67
SDL_EventWatcher
Definition: SDL_events.c:39
SDL_CONTROLLERDEVICEADDED
@ SDL_CONTROLLERDEVICEADDED
Definition: SDL_events.h:123
SDL_QuitQuit
void SDL_QuitQuit(void)
Definition: SDL_quit.c:165
SDL_FIRSTEVENT
@ SDL_FIRSTEVENT
Definition: SDL_events.h:57
SDL_APP_WILLENTERFOREGROUND
@ SDL_APP_WILLENTERFOREGROUND
Definition: SDL_events.h:79
SDL_CONTROLLERAXISMOTION
@ SDL_CONTROLLERAXISMOTION
Definition: SDL_events.h:120
SDL_SysWMEvent::msg
SDL_SysWMmsg * msg
Definition: SDL_events.h:551
SDL_RENDER_TARGETS_RESET
@ SDL_RENDER_TARGETS_RESET
Definition: SDL_events.h:154
filter
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: SDL_opengl_glext.h:1184
SDL_event_watchers_lock
static SDL_mutex * SDL_event_watchers_lock
Definition: SDL_events.c:45
PRINT_DROP_EVENT
#define PRINT_DROP_EVENT(event)
SDL_WINDOWEVENT_SHOWN
@ SDL_WINDOWEVENT_SHOWN
Definition: SDL_video.h:149
SDL_FINGERUP
@ SDL_FINGERUP
Definition: SDL_events.h:129
SDL_QUERY
#define SDL_QUERY
Definition: SDL_events.h:756
SDL_PushEvent
int SDL_PushEvent(SDL_Event *event)
Add an event to the event queue.
Definition: SDL_events.c:741
SDL_PRESSED
#define SDL_PRESSED
Definition: SDL_events.h:50
PRINT_JBUTTON_EVENT
#define PRINT_JBUTTON_EVENT(event)
SDL_event_watchers_removed
static SDL_bool SDL_event_watchers_removed
Definition: SDL_events.c:50
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_FALSE
@ SDL_FALSE
Definition: SDL_stdinc.h:163
SDL_MOUSEMOTION
@ SDL_MOUSEMOTION
Definition: SDL_events.h:105
SDL_FINGERDOWN
@ SDL_FINGERDOWN
Definition: SDL_events.h:128
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:121
SDL_CONTROLLERBUTTONUP
@ SDL_CONTROLLERBUTTONUP
Definition: SDL_events.h:122
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:772
SDL_Log
#define SDL_Log
Definition: SDL_dynapi_overrides.h:31
PRINT_AUDIODEV_EVENT
#define PRINT_AUDIODEV_EVENT(event)
SDL_TEXTINPUT
@ SDL_TEXTINPUT
Definition: SDL_events.h:99
SDL_DROPCOMPLETE
@ SDL_DROPCOMPLETE
Definition: SDL_events.h:144
SDL_event_watchers_dispatching
static SDL_bool SDL_event_watchers_dispatching
Definition: SDL_events.c:49
SDL_free
#define SDL_free
Definition: SDL_dynapi_overrides.h:377
SDL_SENSORUPDATE
@ SDL_SENSORUPDATE
Definition: SDL_events.h:151
SDL_DROPTEXT
@ SDL_DROPTEXT
Definition: SDL_events.h:142
SDL_max
#define SDL_max(x, y)
Definition: SDL_stdinc.h:407
SDL_QUIT
@ SDL_QUIT
Definition: SDL_events.h:60
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_SendPendingSignalEvents
void SDL_SendPendingSignalEvents(void)
Definition: SDL_quit.c:175
SDL_WINDOWEVENT_EXPOSED
@ SDL_WINDOWEVENT_EXPOSED
Definition: SDL_video.h:151
SDL_MOUSEWHEEL
@ SDL_MOUSEWHEEL
Definition: SDL_events.h:108
SDL_GetTicks
Uint32 SDL_GetTicks(void)
Get the number of milliseconds since the SDL library initialization.
SDL_min
#define SDL_min(x, y)
Definition: SDL_stdinc.h:406
SDL_FINGERMOTION
@ SDL_FINGERMOTION
Definition: SDL_events.h:130
SDL_memmove
#define SDL_memmove
Definition: SDL_dynapi_overrides.h:388
SDL_WINDOWEVENT_HIT_TEST
@ SDL_WINDOWEVENT_HIT_TEST
Definition: SDL_video.h:169
SDL_JOYAXISMOTION
@ SDL_JOYAXISMOTION
Definition: SDL_events.h:111
SDL_QuitInit
int SDL_QuitInit(void)
Definition: SDL_quit.c:154
SDL_APP_WILLENTERBACKGROUND
@ SDL_APP_WILLENTERBACKGROUND
Definition: SDL_events.h:71
SDL_WINDOWEVENT_SIZE_CHANGED
@ SDL_WINDOWEVENT_SIZE_CHANGED
Definition: SDL_video.h:156
SDL_Delay
#define SDL_Delay
Definition: SDL_dynapi_overrides.h:486
SDL_EventQ
static struct @23 SDL_EventQ
PRINT_KEY_EVENT
#define PRINT_KEY_EVENT(event)
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:169
SDL_DISABLE
#define SDL_DISABLE
Definition: SDL_events.h:758
PRINT_CBUTTON_EVENT
#define PRINT_CBUTTON_EVENT(event)
SDL_WINDOWEVENT_MINIMIZED
@ SDL_WINDOWEVENT_MINIMIZED
Definition: SDL_video.h:159
SDL_WINDOWEVENT_TAKE_FOCUS
@ SDL_WINDOWEVENT_TAKE_FOCUS
Definition: SDL_video.h:168
SDL_EVENT_CASE
#define SDL_EVENT_CASE(x)
SDL_VideoDevice
Definition: SDL_sysvideo.h:148
PRINT_FINGER_EVENT
#define PRINT_FINGER_EVENT(event)
SDL_JoystickUpdate
#define SDL_JoystickUpdate
Definition: SDL_dynapi_overrides.h:209
SDL_DROPBEGIN
@ SDL_DROPBEGIN
Definition: SDL_events.h:143
SDL_KEYMAPCHANGED
@ SDL_KEYMAPCHANGED
Definition: SDL_events.h:100
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:115
SDL_calloc
#define SDL_calloc
Definition: SDL_dynapi_overrides.h:375
SDL_atoi
#define SDL_atoi
Definition: SDL_dynapi_overrides.h:410
SDL_FlushEvent
void SDL_FlushEvent(Uint32 type)
Definition: SDL_events.c:626
SDL_userevents
static Uint32 SDL_userevents
Definition: SDL_events.c:57
events
static SDL_Event events[EVENT_BUF_SIZE]
Definition: testgesture.c:39
SDL_TRUE
@ SDL_TRUE
Definition: SDL_stdinc.h:164
SDL_AddHintCallback
#define SDL_AddHintCallback
Definition: SDL_dynapi_overrides.h:192
SDL_EventState
Uint8 SDL_EventState(Uint32 type, int state)
Definition: SDL_events.c:902
SDL_AtomicAdd
#define SDL_AtomicAdd
Definition: SDL_dynapi_overrides.h:69
SDL_WINDOWEVENT_NONE
@ SDL_WINDOWEVENT_NONE
Definition: SDL_video.h:148
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30
SDL_EventOK
static SDL_EventWatcher SDL_EventOK
Definition: SDL_events.c:46
SDL_snprintf
#define SDL_snprintf
Definition: SDL_dynapi_overrides.h:40
SDL_HINT_EVENT_LOGGING
#define SDL_HINT_EVENT_LOGGING
A variable controlling whether SDL logs all events pushed onto its internal queue.
Definition: SDL_hints.h:1109
SDL_JOYBUTTONUP
@ SDL_JOYBUTTONUP
Definition: SDL_events.h:115
SDL_disabled_events
static SDL_DisabledEventBlock * SDL_disabled_events[256]
Definition: SDL_events.c:56
SDL_StopEventLoop
void SDL_StopEventLoop(void)
Definition: SDL_events.c:340
SDL_MULTIGESTURE
@ SDL_MULTIGESTURE
Definition: SDL_events.h:135
SDL_event_watchers
static SDL_EventWatcher * SDL_event_watchers
Definition: SDL_events.c:47
SDL_JoystickEventState
#define SDL_JoystickEventState
Definition: SDL_dynapi_overrides.h:210
SDL_RENDER_DEVICE_RESET
@ SDL_RENDER_DEVICE_RESET
Definition: SDL_events.h:155
SDL_DestroyMutex
#define SDL_DestroyMutex
Definition: SDL_dynapi_overrides.h:263
SDL_GETEVENT
@ SDL_GETEVENT
Definition: SDL_events.h:617
SDL_LogEvent
static void SDL_LogEvent(const SDL_Event *event)
Definition: SDL_events.c:98
SDL_MOUSEBUTTONDOWN
@ SDL_MOUSEBUTTONDOWN
Definition: SDL_events.h:106
SDL_JOYDEVICEADDED
@ SDL_JOYDEVICEADDED
Definition: SDL_events.h:116
SDL_SYSWMEVENT
@ SDL_SYSWMEVENT
Definition: SDL_events.h:93
SDL_WaitEventTimeout
int SDL_WaitEventTimeout(SDL_Event *event, int timeout)
Waits until the specified timeout (in milliseconds) for the next available event.
Definition: SDL_events.c:710
SDL_PumpEvents
void SDL_PumpEvents(void)
Definition: SDL_events.c:670
SDL_TICKS_PASSED
#define SDL_TICKS_PASSED(A, B)
Compare SDL ticks values, and return true if A has passed B.
Definition: SDL_timer.h:56
PRINT_CONTROLLERDEV_EVENT
#define PRINT_CONTROLLERDEV_EVENT(event)
SDL_MOUSEWHEEL_NORMAL
@ SDL_MOUSEWHEEL_NORMAL
Definition: SDL_mouse.h:68
bits
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const void * bits
Definition: SDL_opengl_glext.h:6176
SDL_WINDOWEVENT_HIDDEN
@ SDL_WINDOWEVENT_HIDDEN
Definition: SDL_video.h:150
SDL_Event::syswm
SDL_SysWMEvent syswm
Definition: SDL_events.h:581
SDL_Event
General event structure.
Definition: SDL_events.h:557
SDL_WINDOWEVENT
@ SDL_WINDOWEVENT
Definition: SDL_events.h:92
SDL_GetVideoDevice
SDL_VideoDevice * SDL_GetVideoDevice(void)
Definition: SDL_video.c:586
SDL_EventLoggingChanged
static void SDL_EventLoggingChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_events.c:92
SDL_DelHintCallback
#define SDL_DelHintCallback
Definition: SDL_dynapi_overrides.h:193
SDL_WINDOWEVENT_RESTORED
@ SDL_WINDOWEVENT_RESTORED
Definition: SDL_video.h:161
SDL_AtomicSet
#define SDL_AtomicSet
Definition: SDL_dynapi_overrides.h:67
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:374
SDL_JOYBUTTONDOWN
@ SDL_JOYBUTTONDOWN
Definition: SDL_events.h:114
SDL_AtomicGet
#define SDL_AtomicGet
Definition: SDL_dynapi_overrides.h:68
SDL_PRIs64
#define SDL_PRIs64
Definition: SDL_stdinc.h:227
SDL_DisabledEventBlock
Definition: SDL_events.c:52
SDL_AUDIODEVICEREMOVED
@ SDL_AUDIODEVICEREMOVED
Definition: SDL_events.h:148
SDL_LASTEVENT
@ SDL_LASTEVENT
Definition: SDL_events.h:165
SDL_UnlockMutex
#define SDL_UnlockMutex
Definition: SDL_dynapi_overrides.h:262
SDL_CONTROLLERDEVICEREMAPPED
@ SDL_CONTROLLERDEVICEREMAPPED
Definition: SDL_events.h:125
SDL_WINDOWEVENT_FOCUS_GAINED
@ SDL_WINDOWEVENT_FOCUS_GAINED
Definition: SDL_video.h:165
SDL_VideoDevice::PumpEvents
void(* PumpEvents)(_THIS)
Definition: SDL_sysvideo.h:281
SDL_SendAppEvent
int SDL_SendAppEvent(SDL_EventType eventType)
Definition: SDL_events.c:965
SDL_PeepEvents
int SDL_PeepEvents(SDL_Event *events, int numevents, SDL_eventaction action, Uint32 minType, Uint32 maxType)
Definition: SDL_events.c:536
SDL_FlushEvents
void SDL_FlushEvents(Uint32 minType, Uint32 maxType)
Definition: SDL_events.c:632
type
GLuint GLuint GLsizei GLenum type
Definition: SDL_opengl.h:1571
state
struct xkb_state * state
Definition: SDL_waylandsym.h:113
i
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
SDL_JOYHATMOTION
@ SDL_JOYHATMOTION
Definition: SDL_events.h:113
SDL_DOLLARGESTURE
@ SDL_DOLLARGESTURE
Definition: SDL_events.h:133
SDL_DROPFILE
@ SDL_DROPFILE
Definition: SDL_events.h:141
SDL_MAX_QUEUED_EVENTS
#define SDL_MAX_QUEUED_EVENTS
Definition: SDL_events.c:37
SDL_WINDOWEVENT_CASE
#define SDL_WINDOWEVENT_CASE(x)
SDL_StartEventLoop
int SDL_StartEventLoop(void)
Definition: SDL_events.c:414
SDL_WINDOWEVENT_MAXIMIZED
@ SDL_WINDOWEVENT_MAXIMIZED
Definition: SDL_video.h:160
SDL_JOYBALLMOTION
@ SDL_JOYBALLMOTION
Definition: SDL_events.h:112
SDL_CLIPBOARDUPDATE
@ SDL_CLIPBOARDUPDATE
Definition: SDL_events.h:138
SDL_PEEKEVENT
@ SDL_PEEKEVENT
Definition: SDL_events.h:616
SDL_WINDOWEVENT_LEAVE
@ SDL_WINDOWEVENT_LEAVE
Definition: SDL_video.h:164
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:161
SDL_USEREVENT
@ SDL_USEREVENT
Definition: SDL_events.h:160
Uint8
uint8_t Uint8
Definition: SDL_stdinc.h:179