gii_event, gii_any_event, gii_event_type, gii_event_mask — LibGII event structures
#include <ggi/events.h>
typedef union gii_event { uint8 size; gii_any_event any; gii_cmd_event cmd; gii_expose_event expose; gii_val_event val; gii_key_event key; gii_pmove_event pmove; gii_pbutton_event pbutton; } gii_event;
#define COMMON_DATA \ uint8 size; /* size of event in bytes */\ uint8 type; /* type of this event */\ sint16 error; /* error (for replies) */\ uint32 origin; /* origin device (etc) */\ uint32 target; /* target device (etc) */\ struct timeval time /* timestamp */
typedef struct { COMMON_DATA; } gii_any_event;
Events are of type gii_event. It is a union of all of the structures for each specific type of event.
All of the event structures contains housekeeping information at the beginning, as defined by COMMON_DATA.
Thus, by analyzing the contents of any.type, you can determine what the given event is, and select the appropriate member of the gii_event union to access to get at the event data.
The comon fields found in any event structure are:
Specifies the size of the given event (in bytes).
An enumeration of the possible types of LibGII events (see next section).
Mainly there to round things up to a 32-bit boundary, but could be used to signal an error in a send-reply sequence.
A device handle: it distinguishes one input device from another. Other than that there's no real meaning to the number.
Also a device handle, but for distinguishes input devices when sending events to an input device via giiEventSend.
Indicates when the event in question has been generated. See gettimeofday(2) for more info on the timeval structure.
The different types of events are defined as an enumeration.
typedef enum gii_event_type { evNothing = 0, /* event is not valid. (must be zero) */ evCommand, /* report command/do action */ evInformation, /* notification of new information */ evExpose, /* exposure event */ /* empty slot */ evKeyPress=5, /* key has been pressed */ evKeyRelease, /* key has been released */ evKeyRepeat, /* automatically repeated keypress */ evPtrRelative, /* pointer movements reported relative */ evPtrAbsolute, /* pointer movements reported absolute */ evPtrButtonPress, /* pointer button pressed */ evPtrButtonRelease, /* pointer button released */ evValRelative, /* valuator change (reported relative) */ evValAbsolute, /* valuator change (reported absolute) */ evLast /* must be less than 33 */ } gii_event_type;
gii_event_mask is passed to various event handling functions to indicate which types of events the program is interested in. The list below sums the available event masks:
emCommand : evCommand |
emInformation : evInformation |
emExpose : evExpose |
emKeyPress : evKeyPress |
emKeyRelease : evKeyRelease |
emKeyRepeat : evKeyRepeat |
emKey : Any of evKeyPress, evKeyRelease or evKeyRepeat |
emPtrRelative : evPtrRelative |
emPtrAbsolute : evPtrAbsolute |
emPtrButtonPress : evPtrButtonPress |
emButtonRelease : evButtonRelease |
emPtrMove : Any of evPtrRelative, evPtrAbsolute |
emPtrButton : Any of evPtrButtonPress or evPtrButtonRelease |
emPointer : All pointer events |
emValRelative : evValRelative |
emValAbsolute : evValAbsolute |
emValuator : Any of evValRelative or evValAbsolute |
emAll : Any event type |
emNothing : Matches no event type |