[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