## EEvent

EEvent

## Synopsis

    struct              EEvent;
    enum                e_event_t;
    struct              EEventItem;
                        EEventFactory;
    struct              EEventTarget;
    void                (*EEventItemsFunc)                  (EEvent *ee,
                                                             GSList *items,
                                                             gpointer data);
    void                (*EEventFunc)                       (EEvent *ee,
                                                             EEventItem *item,
                                                             gpointer data);
    void                (*EEventFactoryFunc)                (EEvent *ee,
                                                             gpointer Param2);
    EEvent *            e_event_construct                   (EEvent *event,
                                                             const gchar *id);
    gpointer            e_event_add_items                   (EEvent *event,
                                                             GSList *items,
                                                             EEventItemsFunc freefunc,
                                                             gpointer data);
    void                e_event_remove_items                (EEvent *event,
                                                             gpointer handle);
    void                e_event_emit                        (EEvent *event,
                                                             const gchar *id,
                                                             EEventTarget *target);
    gpointer            e_event_target_new                  (EEvent *event,
                                                             gint type,
                                                             gsize size);
    void                e_event_target_free                 (EEvent *event,
                                                             gpointer target);
    struct              EEventHook;
    typedef             EEventHookTargetMap;
    typedef             EEventHookTargetMask;
    void                (*EEventHookFunc)                   (EPlugin *plugin,
                                                             EEventTarget *target);
    void                e_event_hook_class_add_target_map   (EEventHookClass *hook_class,
                                                             const EEventHookTargetMap *map);

## Object Hierarchy

      GObject
       +----EEvent

      GObject
       +----EPluginHook
             +----EEventHook

## Description

## Details

### struct EEvent

    struct EEvent;

### enum e_event_t

    enum e_event_t {
    	E_EVENT_PASS,		/* passthrough */
    	E_EVENT_SINK		/* sink events */
    };

`E_EVENT_PASS` |
`E_EVENT_SINK` |

### struct EEventItem

    struct EEventItem {
    	enum _e_event_t type;
    	gint priority;		/* priority of event */
    	const gchar *id;		/* event id */
    	gint target_type;
    	EEventFunc handle;
    	gpointer user_data;
    	guint32 enable;		/* enable mask */
    };

### EEventFactory

    typedef struct _EEventFactory EEventFactory;

### struct EEventTarget

    struct EEventTarget {
    	EEvent *event; /* used for virtual methods */

    	guint32 type;		/* targe type, for implementors */
    	guint32 mask;		/* depends on type, enable mask */

    	/* implementation fields follow */
    };

### EEventItemsFunc ()

    void                (*EEventItemsFunc)                  (EEvent *ee,
                                                             GSList *items,
                                                             gpointer data);

### EEventFunc ()

    void                (*EEventFunc)                       (EEvent *ee,
                                                             EEventItem *item,
                                                             gpointer data);

### EEventFactoryFunc ()

    void                (*EEventFactoryFunc)                (EEvent *ee,
                                                             gpointer Param2);

### e_event_construct ()

    EEvent *            e_event_construct                   (EEvent *event,
                                                             const gchar *id);

Construct the base event instance with standard parameters.

`event` : | An instantiated but uninitialised EEvent.
`id` : | Event manager id.
Returns : | the `event`

### e_event_add_items ()

    gpointer            e_event_add_items                   (EEvent *event,
                                                             GSList *items,
                                                             EEventItemsFunc freefunc,
                                                             gpointer data);

Adds `items` to the list of events listened to on the event manager `event`.

`event` : | An initialised EEvent structure.
`items` : | A list of EEventItems event listeners to register on this event manager.
`freefunc` : | A function called when the `items` list is no longer needed.
`data` : | callback data for `freefunc` and for item event handlers.
Returns : | An opaque key which can later be passed to remove_items.

### e_event_remove_items ()

    void                e_event_remove_items                (EEvent *event,
                                                             gpointer handle);

Remove items previously added. They MUST have been previously added, and may only be removed once.

`event` : | an EEvent
`handle` : | an opaque key returned by `e_event_add_items()`

### e_event_emit ()

    void                e_event_emit                        (EEvent *event,
                                                             const gchar *id,
                                                             EEventTarget *target);

Emit an event. `target` will automatically be freed once its emission is complete.

`id` : | Event name. This will be compared against EEventItem.id.
`target` : | The target describing the event context. This will be implementation defined.

### e_event_target_new ()

    gpointer            e_event_target_new                  (EEvent *event,
                                                             gint type,
                                                             gsize size);

Allocate a new event target suitable for this class. It is up to the implementation to define the available target types and their structure.

`event` : | An initialised EEvent instance.
`type` : | type, up to implementor
`size` : | The size of memory to allocate. This must be >= sizeof(EEventTarget).

### e_event_target_free ()

    void                e_event_target_free                 (EEvent *event,
                                                             gpointer target);

Free a target. This invokes the virtual free method on the EEventClass.

`event` : | An initialised EEvent instance on which this target was allocated.
`target` : | The target to free.

### struct EEventHook

    struct EEventHook;

### EEventHookTargetMap

    typedef struct _EPluginHookTargetMap EEventHookTargetMap;

### EEventHookTargetMask

    typedef struct _EPluginHookTargetKey EEventHookTargetMask;

### EEventHookFunc ()

    void                (*EEventHookFunc)                   (EPlugin *plugin,
                                                             EEventTarget *target);

### e_event_hook_class_add_target_map ()

    void                e_event_hook_class_add_target_map   (EEventHookClass *hook_class,
                                                             const EEventHookTargetMap *map);

Add a target map to a concrete derived class of EEvent. The target map enumerates a single target type and th eenable mask bit names, so that the type can be loaded automatically by the base EEvent class.

`hook_class` : | The derived EEventHook class.
`map` : | A map used to describe a single EEventTarget type for this class.