Volver al índice ; Próximo: Usuario de X ; Previo: Recursos

Comunicación entre clientes. Gestor de Ventanas

Comunicación mediante eventos

Un cliente puede mandar cualquier evento a una ventana usando XSendEvent. Específicamente, el evento ClientMessage sólo puede mandarse usando esta función. Este evento es recibido siempre por el propietario de la ventana y contiene un mensaje. Uso:

Propiedades y átomos

Una propiedad permite asociar información con una ventana. Sirven como mecanismo de comunicación entre clientes. Los clientes pueden almacenar un valor (XChangeProperty) y leerlo (XGetWindowProperty). Los datos almacenados en una propiedad permanecen hasta que se destruye la ventana asociada o se borran explicitamente.

Cada propiedad queda identificada de forma unívoca por un nombre y una ventana. Sin embargo, para acceder a una propiedad no se usa el nombre sino un identificador entero llamado átomo. Mediante XInternAtom el cliente pide al servidor que asigne un átomo a un nombre. Si el nombre ya tiene asociado un átomo por una llamada anterior, XInternAtom devuelve dicho valor. La asociación entre nombres y átomos es permanente.

Existen propiedades predefinidas destinadas a la comunicación con el gestor de ventanas. Los valores de los átomos para estas propiedades son conocidos (definidos en <X11/Xatom.h>) por lo que se usan directamente. Cada propiedad tiene un tipo que es a su vez un átomo. Hay algunos tipos predefinidos como XA_INTEGER.

Cuando una propiedad cambia de valor o se destruye, el servidor manda el evento PropertyNotify a todos los clientes que lo hayan seleccionado.

Selecciones

Método de comunicación basado en propiedades y eventos. Orientado principalmente a la implementación de mecanismos de copy-and-paste de texto o gráficos entre aplicaciones. Permite que en la transferencia el remitente transforme los datos según ha especificado el destinatario. Hay dos papeles en esta comunicación:

Los pasos típicos de una comunicación usando selecciones son:

  1. Una determinada acción del usuario causa que un cliente se haga propietario de la selección usando XSetSelectionOwner que especifica el átomo de la propiedad que se usará para la selección. Si dicha selección tenía ya un propietario, el servidor le notificará el cambio de propietario mediante el evento SelectionClear.
  2. Otra acción del usuario predeterminada causa que un cliente solicite la selección usando XConvertSelection donde especifica tres átomos que identifican:
  3. El propietario recibe un evento SelectionRequest con la petición del solicitante. Transforma los datos, los almacena en la propiedad especificada y manda un evento SelectionNotify al solicitante usando XSendEvent.
  4. Al recibir el evento el solicitante puede obtener los datos de esta propiedad.

Existen dos selecciones predefinidas: XA_PRIMARY (la que se usa normalmente) y XA_SECONDARY.

Cut Buffers

Modo sencillo de comunicación basado en propiedades orientado también al mecanismo de copy-and-paste. Es más limitado que las selecciones, aunque bastante adecuado para editores ya que permite manejar una pila de buffers para mantener una "historia" de los datos seleccionados.

Los cut buffers son 8 propiedades de la ventana raíz (desde XA_CUT_BUFFER0 a XA_CUT_BUFFER7). Un cliente puede leer de un buffer (XFetchBuffer), escribir en un buffer (XStoreBuffer) y rotar los buffers (XRotateWindowProperties). Para usar adecuadamente este mecanismo los clientes tienen que estar de acuerdo en el formato de los datos.

Gestor de ventanas

Redirección de peticiones

El gestor de ventanas selecciona la máscara SubstructureRedirectMask sobre la ventana raíz. De esta forma todas las peticiones sobre las ventanas hijas de la raíz (excepto aquéllas con override_redirect) que sean de interés para el gestor son interpretadas por éste.

Comunicación con el gestor de ventanas

Existe un conjunto de propiedades predefinidas que permiten a un cliente expresar sus preferencias al gestor de ventanas. Algunas de las más usadas son:

Existen funciones de conveniencia (por ejemplo, XSetWMName) para cargar valores en estas propiedades.


Volver al índice ; Próximo: Usuario de X ; Previo: Recursos