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

Alon Levy alevy at redhat.com
Mon Jun 9 04:34:52 PDT 2014


On 06/09/2014 02:20 PM, Marc-André Lureau wrote:
> 
> 
> ----- Original Message -----
>> 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).
> 
> Yes, empty string are invalid here (of course, shouldn't crash anyway)
> 
>> And the client will need to handle window system specific changes? or
>> can it pass the mime types on without looking at them?
> 
> As long as the content is a MIME description-like, it can pass it.
> 
> (some application or window system may use invalid MIME, but I consider this
> is not Spice to take care of, applications are flexible, they take what they
> handle best)

And such behaviour will just be 'bug compatible' under spice - ACK by me.

> 
>>
>>> ---
>>>  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,
>>>  };
>>>  
>>>
>>
>> _______________________________________________
>> Spice-devel mailing list
>> Spice-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>>



More information about the Spice-devel mailing list