Volver al índice ; Próximo: Recursos ; Previo: Dibujando en X

Eventos

Selección de eventos

El cliente especifica (XCreateWindow, XChangeWindowAttributes o XSelectInputs) al servidor qué eventos debe notificarle en cada ventana. Las máscaras de eventos disponibles y sus eventos asociados son:


    Máscara                         Tipo de evento
    ------------                    --------------
    Button1MotionMask               MotionNotify
    Button2MotionMask               MotionNotify
    Button3MotionMask               MotionNotify
    Button4MotionMask               MotionNotify
    Button5MotionMask               MotionNotify
    ButtonMotionMask                MotionNotify (any button)
    ButtonPressMask                 ButtonPress
    ButtonReleaseMask               ButtonRelease
    ColorMapChangeMask              ColormapNotify
    EnterWindowMask                 EnterNotify
    ExposureMask                    Expose
    FocusChangeMask                 FocusIn, FocusOut
    KeymapStateMask                 KeymapNotify
    KeyPressMask                    KeyPress
    KeyReleaseMask                  KeyRelease
    LeaveWindowMask                 LeaveNotify
    NoEventMask                     None
    OwnerGrabButtonMask             None
    PointerMotionHintMask           None
    PointerMotionMask               MotionNotify
    PropertyChangeMask              PropertyNotify
    ResizeRedirectMask              ResizeRequest
    StructureNotifyMask             CirculateNotify,
                                    ConfigureNotify,
                                    DestroyNotify,
                                    GravityNotify,
                                    MapNotify,
                                    ReparentNotify,
                                    UnmapNotify
    SubstructureNotifyMask          CirculateNotify,
                                    ConfigureNotify,
                                    CreateNotify,
                                    DestroyNotify,
                                    GravityNotify,
                                    MapNotify,
                                    ReparentNotify,
                                    UnmapNotify
    SubstructureNotifyMask          CirculateRequest,
                                    ConfigureRequest,
                                    MapRequest
    VisibilityChangeMask            VisibilityNotify
    [Siempre seleccionados]         MappingNotify,
                                    ClientMessage,
                                    SelectionClear,
                                    SelectionNotify,
                                    SelectionRequest

Obteniendo los eventos.

Hay numerosas funciones para obtener eventos de la cola con distintos modos de funcionamiento. Ejemplos:

Propagación de eventos

Los eventos del teclado y del ratón están vinculados con la ventana visible más pequeña que contiene el puntero en ese instante. Hay tres casos en el mecanismo de propagación:

El mecanismo de propagación descrito tiene dos excepciones:

El enfoque del teclado

En cada momento hay una ventana que tiene el enfoque del teclado. Los eventos del teclado estarán asociados sólo a la ventana con el enfoque y sus descendientes. Dos casos:

Por defecto el enfoque está en la ventana raiz y se cambia con la primitiva XSetInputFocus. Normalmente, lo hace el gestor de ventanas.

Posesión del teclado y puntero

Un cliente puede establecer un grab sobre el teclado o ratón para asegurarse de que todos los eventos que produzca el dispositivo se le notifiquen sólo a él. Hay dos tipos:

Ademas del ratón y el teclado, un cliente puede tomar posesión del servidor evitando no sólo la propagación de eventos a otros clientes sino también el procesamiento de sus peticiones.

Algunos eventos

Cada evento lleva asociado una estructura XEvent que proporciona información detallada sobre el evento. Algunos eventos:

KeyPress, KeyRelease
Tecla pulsada y liberada. La estrutura del evento contiene un código de tecla dependiente del servidor. La aplicación debe usar XLookupString para obtener el valor ASCII.
ButtonPress, ButtonRelease
Respectivamente, botón del ratón pulsado y liberado.
MotionNotify
Indica que el ratón se ha movido. Hay tres tipos máscaras: PointerMotionMask (notifica cualquier movimiento), PointerMotionHintMask (notifica los movientos de forma no continua) y ButtonMotionMask (sólo notifica movimiento cuando un botón está pulsado).
Expose
Se genera un evento por cada zona de la ventana que se ha hecho visible.
VisibilityNotify
Notifica cambios en la visibilidad de una ventana.
EnterWindow, LeaveWindow
Informa que el puntero ha entrado o salido de una ventana respectivamente.
PropertyNotify
Indica que se han producido cambios en el valor asociado a una propiedad.
ConfigureNotify
Informa del cambio de configuración (geometría u orden de apilamiento) de una ventana.
MapNotify
Notifica que una ventana ha sido proyectada.
SubstructureRedirectMask
Cuando un cliente (y sólo uno) selecciona esta máscara sobre una ventana, las peticiones de otros clientes para proyectar, cambiar la configuración o modificar el orden de apilamiento de una ventana hija de la especificada, no las lleva a cabo el servidor sino que manda un evento al cliente (redirección). Este mecanismo lo usa el gestor de ventanas.
ClientMessage
Usado para comunicación entre clientes. Está siempre seleccionado.

Volver al índice ; Próximo: Recursos ; Previo: Dibujando en X