On 06/04/2014 07:45 PM, Marc-André Lureau wrote: > From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> > > 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, > }; > > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel