----- Original Message ----- > 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). 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) > > > --- > > 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 > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel