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

Marc-André Lureau marcandre.lureau at gmail.com
Wed Jun 4 09:45:48 PDT 2014


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.
---
 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,
 };
 
-- 
1.9.3



More information about the Spice-devel mailing list