Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

giieventread(3) [debian man page]

giiEventPoll(3) 							GGI							   giiEventPoll(3)

NAME
giiEventPoll, giiEventSelect, giiEventsQueued, giiEventRead - Wait for and receive events SYNOPSIS
#include <ggi/gii.h> gii_event_mask giiEventPoll(gii_input_t inp, gii_event_mask mask, struct timeval *t); int giiEventSelect(gii_input_t inp, gii_event_mask *mask, int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int giiEventsQueued(gii_input_t inp, gii_event_mask mask); int giiEventRead(gii_input_t inp, gii_event *ev, gii_event_mask mask); DESCRIPTION
giiEventPoll waits for specific events to become available on an input. This call somewhat resembles the Unix select(2) call, but only for LibGII events and is more portable. The function returns after an event matching the given event mask is available or after the amount of time specified by t has elapsed, whichever occurs first. If t is NULL, there is no timeout. The timeout value on return is updated to the time that would have been remaining. So make sure to re-setup this value when calling giiEventPoll in a loop. giiEventSelect is the combination of giiEventPoll and select(2) allowing to wait for both LibGII events and arbitrary file descriptors in any of the three states. However, this function is not available if the operating system does not support the select(2) call, not even as a stub. giiEventsQueued returns the number of events matching the specified event mask that are currently queued in the input. giiEventRead blocks for and transfers an event from the given input to the location pointed to by ev. The event with the earliest timestamp that matches the given mask is returned to the application. RETURN VALUE
giiEventPoll returns a mask of available events (constrained by the given mask). It is 0 if no events are available. On error, an nega- tive gii-error(3) code is returned. giiEventSelect returns the same values as select(2). Unlike other LibGGI/LibGII functions, it also uses errno. It will update the timeout regardless of whether or not the system call does so. giiEventsQueued returns the number of events. giiEventRead returns the size of event on success, and 0 on error. EXAMPLES
This is one of the various ways of coding an event-polling loop: for(;;) { tv.tv_sec = 0; tv.tv_usec = 100; /* change to 0 for non-blocking behaviour */ ggiEventPoll(vis, emAll, &tv); n = ggiEventsQueued(vis, emAll); /* Process events in one gulp, when available */ while(n--) { ggiEventRead(vis, &ggievent, emAll); switch(ggievent.any.type) { /* ... */ } } /* Do other stuff */ } Note: This code uses the LibGGI functions and types instead of the LibGII ones, since the former is the more common case. libgii-1.0.x 2006-12-30 giiEventPoll(3)

Check Out this Related Man Page

gii_pmove_event(3)							GGI							gii_pmove_event(3)

NAME
gii_pmove_event - LibGII pointer movement events SYNOPSIS
#include <ggi/events.h> typedef struct gii_pmove_event { COMMON_DATA; int32_t x, y; /* absolute/relative position */ int32_t z, wheel; } gii_pmove_event; DESCRIPTION
The gii_pmove_event structure is used to report change of pointer position. Depending on the event type, the values are either absolute or relative. GENERATED EVENTS
This structure is used for evPtrRelative and evPtrAbsolute events. STRUCTURE MEMBERS
The gii_pmove_event structure describes pointer (mice, etc.) motion in terms of the x, y, z coordinates and the wheel values of the device. The motion described may be relative (offset from the current location) or absolute (a specific location on the 'screen'), depending on whether the event is of type evPtrRelative or evPtrAbsolute, respectively. LibGII does not attempt to interpolate or keep track of the current pointer position. (This is the application's responsibility.) LibGII may also report both relative and absolute pointer motion for the same input, which may happen when the mouse is being emulated using a keyboard on an input/target that is normally reports absolute motion. EXAMPLES
Input handling for applications expecting absolute pointer position: { static int mousex,mousey; ggiEventPoll(vis, emKey|emPointer, NULL); events = ggiEventsQueued(vis, emKey|emPointer); while (events--) { ggiEventRead(vis, &event, emKey|emPointer); switch(event.any.type) { case evPtrButtonPress: switch(event.pbutton.button) { case GII_PBUTTON_FIRST: do_something_as_appropriate(mousex,mousey); break; case GII_PBUTTON_SECOND: /* ... */ } break; case evPtrButtonRelease: /* ... if needed ... */ break; case evPtrAbsolute: mousex = event.pmove.x; mousey = event.pmove.y; break; case evPtrRelative: mousex += event.pmove.x; mousey += event.pmove.y; break; } /* Constrain mouse in any case */ if (mousex < 0) mousex = 0; if (mousey < 0) mousey = 0; if (mousex > xmax) mousex = xmax; if (mousey > ymax) mousey = ymax; } /* while */ } SEE ALSO
gii_event(3) libgii-1.0.x 2006-12-30 gii_pmove_event(3)
Man Page