Provided by: allegro5-doc_5.0.10-2_all bug

NAME

       al_init_user_event_source - Allegro 5 API

SYNOPSIS

              #include <allegro5/allegro.h>

              void al_init_user_event_source(ALLEGRO_EVENT_SOURCE *src)

DESCRIPTION

       Initialise  an event source for emitting user events.  The space for the event source must
       already have been allocated.

       One possible way of creating custom event sources  is  to  derive  other  structures  with
       ALLEGRO_EVENT_SOURCE at the head, e.g.

              typedef struct THING THING;

              struct THING {
                  ALLEGRO_EVENT_SOURCE event_source;
                  int field1;
                  int field2;
                  /* etc. */
              };

              THING *create_thing(void)
              {
                  THING *thing = malloc(sizeof(THING));

                  if (thing) {
                      al_init_user_event_source(&thing->event_source);
                      thing->field1 = 0;
                      thing->field2 = 0;
                  }

                  return thing;
              }

       The  advantage here is that the THING pointer will be the same as the ALLEGRO_EVENT_SOURCE
       pointer.  Events emitted by the event source will have the event  source  pointer  as  the
       source field, from which you can get a pointer to a THING by a simple cast (after ensuring
       checking the event is of the correct type).

       However, it is only one technique and you are not obliged to use it.

       The user event source will never be destroyed automatically.  You must destroy it manually
       with al_destroy_user_event_source(3alleg5).

SEE ALSO

       ALLEGRO_EVENT_SOURCE(3alleg5),                      al_destroy_user_event_source(3alleg5),
       al_emit_user_event(3alleg5), ALLEGRO_USER_EVENT(3alleg5)