stringtranslate.com

Selección de ventana X

Mutación y selección

Las selecciones , los buffers de corte y la función de arrastrar y soltar son los mecanismos que se utilizan en el sistema X Window para permitir que un usuario transfiera datos de una ventana a otra. Las selecciones y el buffer de corte se utilizan normalmente cuando un usuario selecciona texto u otros datos en una ventana y los pega en otra. La función de arrastrar y soltar se utiliza cuando un usuario selecciona algo en una ventana, luego hace clic en la selección y la arrastra a otra ventana.

Dado que las dos ventanas pueden ser manejadas por dos aplicaciones diferentes, estos mecanismos requieren dos clientes diferentes conectados con el mismo servidor X para intercambiar datos. El protocolo principal del sistema X Window incluye algunas solicitudes y eventos que son específicos para el intercambio de selecciones, pero la transferencia se realiza principalmente mediante el envío de eventos y propiedades de ventana, que no son específicos para la transferencia de selecciones.

Se pueden transferir distintos tipos de datos: normalmente es texto, pero también puede ser una imagen, un número, una lista de objetos, etc. A continuación, se considerará únicamente el caso del texto.

Selecciones activas y pasivas

Los métodos de transferencia de datos se pueden clasificar en activos y pasivos, dependiendo de si el cliente que maneja los datos seleccionados tiene que participar activamente en la transferencia a un cliente que los solicita:

Pasivo
Cuando se seleccionan algunos datos, el cliente que maneja la ventana donde se realiza esta selección los transfiere a algún lugar y ya no necesita preocuparse por ellos;
Activo
La transferencia de datos a un cliente requiere que el cliente que "tiene" la selección participe activamente en el intercambio.

Las selecciones y la función de arrastrar y soltar son mecanismos activos: después de seleccionar un texto en una ventana, el cliente que maneja la ventana debe respaldar activamente un protocolo para transferir los datos a la aplicación que los solicita. Por el contrario, los búferes de corte son un mecanismo pasivo: después de seleccionar un texto, se transfiere a un búfer de corte y permanece allí incluso si la aplicación que maneja la ventana finaliza y la ventana se destruye. El portapapeles X es un mecanismo pasivo tal como lo percibe el cliente que mantiene la selección, pero requiere que el xclipboardcliente respalde activamente cualquier transferencia de datos posterior.

Una ventaja de los mecanismos activos es que los datos se pueden convertir a un formato diferente antes de la transferencia. En particular, el cliente que recibe los datos puede solicitar que los datos de selección se conviertan a un formato adecuado. Si el cliente emisor se niega a hacerlo, el receptor puede solicitar un formato diferente. Por ejemplo, un fragmento de código HTML que representa un texto se puede transferir como texto a un solicitante que solo puede manejar texto, pero también se puede transferir como código HTML si el solicitante puede manejarlo. Dicha negociación de formato no se puede realizar mediante mecanismos pasivos, en los que el cliente que tiene la selección (y le proporciona semántica) transfiere la selección y no participa en la transferencia posterior a un cliente que la solicita.

Otra ventaja de los mecanismos activos es que se pueden transferir grandes cantidades de datos en una secuencia de transferencias en lugar de en una sola. En cambio, los mecanismos pasivos requieren que todos los datos se transfieran a algún lugar desde el propietario de la selección y luego se transfieran nuevamente al cliente que los solicita.

La ventaja de los mecanismos pasivos es que la transferencia puede realizarse incluso después de que el cliente que tiene los datos haya finalizado su relación. Esto no es posible en los mecanismos activos, que requieren que el cliente que tiene los datos participe activamente en la transferencia.

Trozos escogidos

El sistema X Window admite una cantidad arbitraria de selecciones; cada selección se identifica mediante una cadena (más precisamente, un atom). La selección más utilizada es la PRIMARYselección .

Las siguientes solicitudes son específicas de la transferencia de selección, aunque la transferencia también implica otras solicitudes:

  1. solicito saber qué ventana posee la selección
  2. solicitud para establecer la ventana que posee la selección
  3. solicitud para convertir la selección

El propietario de la selección suele ser la ventana en la que se encuentra el texto seleccionado, si lo hay. Cuando el usuario selecciona algún texto en una ventana, el cliente que gestiona la ventana debe indicar al servidor que la ventana es la propietaria de la selección.

Cuando el usuario intenta pegar la selección en otra ventana, el controlador de esa ventana inicia un protocolo para obtener el texto seleccionado del otro cliente. Este protocolo involucra la segunda y tercera solicitudes de la lista anterior y no está especificado por el protocolo X sino como una convención en el Manual de la Convención de Comunicación entre Clientes (ICCCM).

En particular, el cliente de destino comienza preguntando al servidor qué ventana posee la selección. Luego, los dos clientes transfieren la selección a través del servidor. Este intercambio involucra una propiedad de una ventana y un fragmento arbitrario de datos adjunto a la ventana. Si se considera que el contenido de la selección es lo suficientemente pequeño como para transferirlo de una sola vez, los pasos que se llevan a cabo son:

  1. el destinatario de la selección solicita que se convierta la selección, especificando una propiedad de una ventana (esta puede ser la ventana donde se debe pegar el texto)
  2. En respuesta, el servidor envía al propietario actual de la selección un SelectionRequestevento;
  3. El propietario coloca el texto seleccionado en la propiedad de la ventana que el solicitante ha especificado enviando una ChangePropertysolicitud ; al servidor
  4. El propietario envía una solicitud al servidor para que envíe al solicitante un mensaje SelectionNotifypara notificar que la selección ha sido transferida.
  5. El solicitante ahora puede leer la selección en la propiedad de la ventana enviando una o más GetPropertysolicitudes al servidor;
  6. El solicitante destruye la propiedad; si el propietario ha solicitado ser informado de ello, se le envía un PropertyNotifyevento.

Si el contenido es grande, se debe transferir en fragmentos. En este caso, ambos clientes expresan interés en PropertyNotifylos eventos: de esta manera, el propietario de la selección sabe cuándo se ha leído la selección y el solicitante sabe cuándo se ha colocado otro fragmento en la propiedad.

La extensión XFixes permite a los clientes escuchar los cambios de selección. [1]

Portapapeles

La selección más utilizada es la PRIMARYselección, y se utiliza cuando el usuario selecciona algunos datos. La CLIPBOARDselección se utiliza cuando el usuario selecciona algunos datos y solicita explícitamente que se "copien" al portapapeles, como por ejemplo invocando "Copiar" en el menú "Editar" de una aplicación. Una solicitud asociada de "Pegar" da como resultado que CLIPBOARDse utilicen los datos de la selección.

A nivel del protocolo central, las selecciones PRIMARYy CLIPBOARDno difieren. Pero el xclipboardcliente hace que se comporten de manera diferente. En particular, cuando otro cliente afirma la propiedad de la CLIPBOARDselección, este programa la solicita y la muestra en una ventana. Cualquier solicitud posterior de esta selección es manejada por xclipboard. De esta manera, el contenido de la selección sobrevive al cliente que la copió.

Cortar los buffers

Los buffers de corte son otro mecanismo para transferir datos, en particular texto seleccionado. Son propiedades de la ventana raíz , llamadas CUT_BUFFER1, etc. A diferencia de las selecciones, los buffers de corte no implican una interacción directa entre clientes. En cambio, cuando se selecciona texto en una ventana, el propietario de la ventana copia este texto en la propiedad de la ventana raíz llamada CUT_BUFFER1. Cuando el usuario pega el texto en otra ventana, el propietario de la ventana lee esta propiedad de la ventana raíz.

El xcutselprograma transfiere datos entre selecciones y buffers de corte, y xcbpermite varios tipos de acceso a los buffers de corte.

Los buffers de corte se consideran obsoletos. [2]

XDND

La función de arrastrar y soltar en el sistema X Window está regulada por la convención Xdnd. [3] Cuando el usuario arrastra el texto seleccionado a una ventana y suelta el botón del ratón, el intercambio de datos se realiza como en la selección principal. La función de arrastrar y soltar se complica por lo que sucede durante el arrastre. Es decir, cuando el usuario arrastra la selección a diferentes partes del escritorio o una ventana, el usuario espera poder saber si el texto se puede soltar o no. En particular, el objetivo debe mostrar una retroalimentación visual sobre si aceptará o no la acción de soltar, y el cursor debe cambiar para indicar la acción que se realizará; por ejemplo, copiar o mover.

En el protocolo Xdnd, la ventana en la que se selecciona el texto y comienza el arrastre se denomina origen ; la ventana sobre la que se desplaza el cursor se denomina destino . La comunicación entre el origen y el destino es impulsada por el origen, ya que el origen "agarra" el cursor. Por lo tanto, es necesario un intercambio entre el origen y el destino para que el destino sepa que se está produciendo el arrastrar y soltar. Dado que el origen decide la forma del cursor, el origen debe recibir una respuesta del destino para actualizar el cursor. Además, dado que el destino puede necesitar dibujar una mira de bombardeo para indicar dónde se producirá el arrastre, y dado que la aceptación del arrastre puede depender de la ubicación exacta del cursor, este intercambio debe ocurrir repetidamente a medida que el cursor se mueve. De hecho, incluso si el cursor no se mueve, se deben intercambiar mensajes para permitir que el destino se desplace cuando el cursor está cerca de un borde del área de visualización. De lo contrario, el usuario solo podrá soltar en la parte visible del objetivo.

Un programa puede indicar que una ventana puede ser el objetivo de una operación de eliminación mediante la creación de una propiedad denominada XdndAwareque contenga la versión más alta del protocolo que el programa admite. De esta manera, las aplicaciones que admiten versiones más nuevas pueden recurrir a versiones anteriores para interoperar correctamente. Además, se ignorarán todas las aplicaciones que se escriban sin compatibilidad con Xdnd.

Cuando el cursor entra en la ventana de destino, la fuente comprueba la presencia de la XdndAwarepropiedad en esa ventana. Si esta propiedad está presente, se inicia un intercambio:

Mientras el cursor esté dentro de la ventana de destino:

Si el usuario abandona, el destino solicita la selección al origen como de costumbre. Cuando finaliza la transferencia de la selección, el destino envía un XdndFinishevento para informar al origen de que la transferencia se ha realizado correctamente.

En resumen, el protocolo es controlado por la fuente, que mantiene al objetivo informado de lo que sucede con el cursor. En respuesta, el objetivo le dice a la fuente si se aceptará o no la colocación del cursor. El objetivo también debe ser informado cuando el usuario suelta el botón del mouse, ya que este evento inicia una solicitud regular de selección, que es un protocolo controlado por el objetivo.

Lo anterior es la descripción de la convención de Xdnd para arrastrar y soltar. En Motif, OffiX y Amulet se utilizan diferentes convenciones para arrastrar y soltar.

XDS

El protocolo de guardado directo , abreviado XDS ( X Window Direct Save Protocol ), es un protocolo de software que permite guardar archivos arrastrándolos a las ventanas del administrador de archivos . XDS está basado en el protocolo XDND . [4] [5]

Programas

Los siguientes programas operan específicamente sobre mecanismos de transferencia de datos:

Véase también

Referencias

  1. ^ "c - X11 Esperar y obtener texto del portapapeles". Desbordamiento de pila . Consultado el 27 de julio de 2021 .
  2. ^ Zawinski, JW (2002). Selecciones X, buffers de corte y anillos de eliminación. Recuperado el 13 de julio de 2010, de http://www.jwz.org/doc/x-cut-and-paste.html
  3. ^ Protocolo de arrastrar y soltar para el sistema X Window, desde http://johnlindal.wix.com/xdnd
  4. ^ Lindal, John. "Guardar archivos mediante arrastrar y soltar: el protocolo de guardado directo para el sistema X Window". Archivado desde el original el 5 de marzo de 2016.
  5. ^ "Guardar archivos mediante arrastrar y soltar: el protocolo de guardado directo para el sistema X Window". freedesktop.org . Archivado desde el original el 22 de marzo de 2015.

Enlaces externos