stringtranslate.com

X Selección de ventana

Mutación y Selección

Selecciones , búferes de corte y arrastrar y soltar son los mecanismos utilizados en el sistema X Window para permitir a un usuario transferir datos de una ventana a otra. Las selecciones y el búfer de corte se utilizan normalmente cuando un usuario selecciona texto u otros datos en una ventana y lo pega en otra. 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 central del sistema X Window incluye algunas solicitudes y eventos que son específicos del intercambio de selección, pero la transferencia se realiza principalmente mediante el envío de eventos y propiedades de ventana, que no son específicas de la transferencia de selección.

Se pueden transferir diferentes tipos de datos: normalmente es texto, pero también puede ser una imagen, un número, una lista de objetos, etc. A continuación sólo se considera 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 "posea" la selección para participar activamente en el intercambio.

Las selecciones y arrastrar y soltar son mecanismos activos: después de seleccionar un texto en una ventana, el cliente que maneja la ventana debe admitir activamente un protocolo para transferir los datos a la aplicación que los solicita. Por el contrario, los buffers de corte son un mecanismo pasivo: después de seleccionar algo de texto, se transfiere a un buffer 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 según lo percibe el cliente que tiene la selección, pero requiere que el xclipboardcliente admita 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 en un formato adecuado. Si el cliente emisor se niega a hacerlo, el receptor puede solicitar un formato diferente. Por ejemplo, un fragmento de texto que representa código HTML 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. Tal negociación de formato no puede realizarse mediante mecanismos pasivos, en los que el cliente que posee la selección (y le da semántica) transfiere la selección y no participa en la transferencia posterior al 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 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 se puede realizar incluso después de que el cliente que posee los datos finalice. Esto no es posible en los mecanismos activos, que requieren que el cliente titular de los datos participe activamente en la transferencia.

Trozos escogidos

El sistema X Window admite un número arbitrario de selecciones; cada selección se identifica mediante una cadena (más precisamente, una 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 involucra otras solicitudes:

  1. Solicitar saber a qué ventana pertenece la selección.
  2. Solicitud para establecer la ventana propietaria de 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 maneja la ventana debe decirle 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 solicitud de la lista anterior, y no está especificado por el protocolo X sino como una convención en el Manual de convenciones de comunicación entre clientes (ICCCM).

En particular, el cliente de destino comienza preguntando al servidor a qué ventana pertenece la selección. Luego los dos clientes transfieren la selección a través del servidor. Este intercambio implica una propiedad de una ventana y un dato arbitrario adjunto a la ventana. Si el contenido de la selección se considera lo suficientemente pequeño como para transferirlo todo de una vez, los pasos que se siguen 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. SelectionRequesten respuesta, el servidor envía un evento al propietario actual de la selección ;
  3. el propietario coloca el texto seleccionado en la propiedad de la ventana que el solicitante ha especificado enviando un ChangeProperty; solicitud al servidor
  4. el propietario envía una solicitud al servidor para enviar 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 esto, se envía un PropertyNotifyevento.

Si el contenido es grande, se debe transferir en trozos. 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" en el portapapeles, por ejemplo, invocando "Copiar" en el menú "Editar" de una aplicación. Una solicitud asociada de "Pegar" da como resultado los datos de la CLIPBOARDselección que se están utilizando.

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

Cortar buffers

Los buffers de corte son otro mecanismo para transferir datos, en particular texto seleccionado. Son propiedades de ventana de la ventana raíz , nombradas CUT_BUFFER1, etc. A diferencia de las selecciones, los búferes de corte no implican una interacción directa entre clientes. Más bien, 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 el xcbprograma permite varios tipos de acceso a los buffers de corte.

Los topes de corte se consideran obsoletos. [2]

XDND

Arrastrar y soltar en el sistema X Window está regulado por la convención Xdnd. [3] Cuando el usuario arrastra el texto seleccionado a una ventana y suelta el botón del mouse, el intercambio de datos se realiza como para la selección primaria. 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 de una ventana, espera poder saber si el texto se puede soltar o no. En particular, el objetivo debe mostrar información visual sobre si aceptará o no la caída, y el cursor debe cambiar para indicar la acción que se tomará; por ejemplo, copiar o mover.

En el protocolo Xdnd, la ventana donde se selecciona el texto y comienza el arrastre se llama fuente ; la ventana sobre la que pasa el cursor se llama objetivo . La comunicación entre la fuente y el destino es impulsada por la fuente porque la fuente "agarra" el cursor. Por lo tanto, es necesario un intercambio entre el origen y el destino para que el destino sepa siquiera que se está arrastrando y soltando. Dado que la fuente decide la forma del cursor, la fuente debe recibir una respuesta del destino para poder actualizar el cursor. Además, dado que el objetivo puede necesitar dibujar una mira para indicar dónde se producirá la caída, y dado que la aceptación de la caída puede depender de la ubicación exacta del cursor, este intercambio debe ocurrir repetidamente a medida que se mueve el cursor. De hecho, incluso si el cursor no se mueve, se deben intercambiar mensajes para permitir que el objetivo se desplace cuando el cursor esté cerca de un borde del área de visualización. De lo contrario, el usuario sólo podrá dejar caer sobre la parte visible del objetivo.

Un programa puede indicar que una ventana puede ser el objetivo de una caída creando una propiedad denominada XdndAwareque contenga la versión más alta del protocolo que admite el programa. 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 escritas sin soporte para Xdnd.

Cuando el cursor ingresa a la ventana de destino, la fuente verifica la presencia de la XdndAwarepropiedad en esa ventana. Si esta propiedad está presente, comienza un intercambio:

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

Si el usuario cae, el objetivo solicita la selección a la fuente como de costumbre. Cuando finaliza la transferencia de la selección, el objetivo envía un XdndFinishevento para informar a la fuente que la transferencia ha sido exitosa.

En resumen, el protocolo está 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 una entrega. 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 impulsado por el objetivo.

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

xds

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

Programas

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

Ver 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, corte de buffers y eliminación de anillos. Obtenido 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, de 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