[Spice-devel] [PATCH spice-protocol] RFC: Add VD_AGENT_CAP_ANY_SELECTION_TYPE

Alon Levy alevy at redhat.com
Mon Jun 9 04:10:09 PDT 2014


On 06/04/2014 07:45 PM, Marc-André Lureau wrote:
> From: Marc-André Lureau <marcandre.lureau at gmail.com>
> 
> When both the client and the agent advertize
> VD_AGENT_CAP_ANY_SELECTION_TYPE capability, the existing
> VDAgentClipboard messages are modified to embed string
> representation of the selection mime type.
> 
> Handling arbitrary mime types allows to describe any selection data
> type, instead of a limited fixed list. The approach to reuse the integer
> representation to extend the type with a registry (like X's atoms) has
> been discarded (too complicated without substential benefits)
> 
> A string is a \0 terminated utf8 byte array: foo\0
> A string[] is a \0\0 terminated array of utf8 strings: foo\0bar\0\0.

So no null strings in the list? sounds fine to me (just need to verify
this in code).

And the client will need to handle window system specific changes? or
can it pass the mime types on without looking at them?

> ---
>  spice/vd_agent.h | 33 +++++++++++++++++++++++----------
>  1 file changed, 23 insertions(+), 10 deletions(-)
> 
> diff --git a/spice/vd_agent.h b/spice/vd_agent.h
> index 7464661..2e24c87 100644
> --- a/spice/vd_agent.h
> +++ b/spice/vd_agent.h
> @@ -161,15 +161,6 @@ enum {
>      VD_AGENT_ERROR,
>  };
>  
> -typedef struct SPICE_ATTR_PACKED VDAgentClipboard {
> -#if 0 /* VD_AGENT_CAP_CLIPBOARD_SELECTION */
> -    uint8_t selection;
> -    uint8_t __reserved[sizeof(uint32_t) - 1 * sizeof(uint8_t)];
> -#endif
> -    uint32_t type;
> -    uint8_t data[0];
> -} VDAgentClipboard;
> -
>  enum {
>      VD_AGENT_CLIPBOARD_NONE = 0,
>      VD_AGENT_CLIPBOARD_UTF8_TEXT,
> @@ -179,12 +170,29 @@ enum {
>      VD_AGENT_CLIPBOARD_IMAGE_JPG,  /* optional */
>  };
>  
> +typedef struct SPICE_ATTR_PACKED VDAgentClipboard {
> +#if 0 /* VD_AGENT_CAP_CLIPBOARD_SELECTION */
> +    uint8_t selection;
> +    uint8_t __reserved[sizeof(uint32_t) - 1 * sizeof(uint8_t)];
> +#endif
> +#if 0 /* VD_AGENT_CAP_ANY_SELECTION_TYPE */
> +    string type;
> +#else
> +    uint32_t type;
> +#endif
> +    uint8_t data[0];
> +} VDAgentClipboard;
> +
>  typedef struct SPICE_ATTR_PACKED VDAgentClipboardGrab {
>  #if 0 /* VD_AGENT_CAP_CLIPBOARD_SELECTION */
>      uint8_t selection;
>      uint8_t __reserved[sizeof(uint32_t) - 1 * sizeof(uint8_t)];
>  #endif
> +#if 0 /* VD_AGENT_CAP_ANY_SELECTION_TYPE */
> +    string[] types;
> +#else
>      uint32_t types[0];
> +#endif
>  } VDAgentClipboardGrab;
>  
>  typedef struct SPICE_ATTR_PACKED VDAgentClipboardRequest {
> @@ -192,7 +200,11 @@ typedef struct SPICE_ATTR_PACKED VDAgentClipboardRequest {
>      uint8_t selection;
>      uint8_t __reserved[sizeof(uint32_t) - 1 * sizeof(uint8_t)];
>  #endif
> -    uint32_t type;
> +#if 0 /* VD_AGENT_CAP_ANY_SELECTION_TYPE */
> +    string type;
> +#else
> +    uint32_t type; /* string type; */
> +#endif
>  } VDAgentClipboardRequest;
>  
>  typedef struct SPICE_ATTR_PACKED VDAgentClipboardRelease {
> @@ -218,6 +230,7 @@ enum {
>      VD_AGENT_CAP_GUEST_LINEEND_LF,
>      VD_AGENT_CAP_GUEST_LINEEND_CRLF,
>      VD_AGENT_CAP_MAX_CLIPBOARD,
> +    VD_AGENT_CAP_ANY_SELECTION_TYPE,
>      VD_AGENT_END_CAP,
>  };
>  
> 



More information about the Spice-devel mailing list