diff --git a/0002-vdagent-introduce-VD_AGENT_CAP_CLIPBOARD_NO_RELEASE_.patch b/0002-vdagent-introduce-VD_AGENT_CAP_CLIPBOARD_NO_RELEASE_.patch new file mode 100644 index 0000000..3d3bd0f --- /dev/null +++ b/0002-vdagent-introduce-VD_AGENT_CAP_CLIPBOARD_NO_RELEASE_.patch @@ -0,0 +1,34 @@ +From 41973d6df464db0d128ba2d272c305143d73f57a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Fri, 22 Mar 2019 14:56:47 +0100 +Subject: [PATCH 2/3] vdagent: introduce + VD_AGENT_CAP_CLIPBOARD_NO_RELEASE_ON_REGRAB +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This capability means the peer will not send a release event between +two subsequent grabs. This helps with interaction issues with +clipboard managers which can be worked around by time-based filters at +this point. With this capability, there is no need for such filter. + +Signed-off-by: Marc-André Lureau +--- + spice/vd_agent.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/spice/vd_agent.h b/spice/vd_agent.h +index e4e00a8..ad61339 100644 +--- a/spice/vd_agent.h ++++ b/spice/vd_agent.h +@@ -309,6 +309,7 @@ enum { + VD_AGENT_CAP_FILE_XFER_DISABLED, + VD_AGENT_CAP_FILE_XFER_DETAILED_ERRORS, + VD_AGENT_CAP_GRAPHICS_DEVICE_INFO, ++ VD_AGENT_CAP_CLIPBOARD_NO_RELEASE_ON_REGRAB, + VD_AGENT_END_CAP, + }; + +-- +2.23.0 + diff --git a/0003-vdagent-introduce-VD_AGENT_CAP_CLIPBOARD_GRAB_SERIAL.patch b/0003-vdagent-introduce-VD_AGENT_CAP_CLIPBOARD_GRAB_SERIAL.patch new file mode 100644 index 0000000..e74ea92 --- /dev/null +++ b/0003-vdagent-introduce-VD_AGENT_CAP_CLIPBOARD_GRAB_SERIAL.patch @@ -0,0 +1,68 @@ +From e8a2b9ec5a0ed46a06c9e28a0099b2a2516f710e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Fri, 22 Mar 2019 14:56:48 +0100 +Subject: [PATCH 3/3] vdagent: introduce VD_AGENT_CAP_CLIPBOARD_GRAB_SERIAL +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When this capability is negoticated by both the client & the agent, +the clipboard grab messages have an associated serial counter. + +The serial is reset to 0 upon client connection. + +The counter is increment by 1 on each grab message, by both sides. + +The sender of the message with the highest serial should be the +clipboard grab owner, and the current session serial should be +updated. + +If a lower serial than the current session serial is received, the +grab should be discarded. + +Whenever two grabs share the same serial, the one coming from the +client should have a higher priority and the client should gain the +clipboard ownership. + +No special treatement is done for the unlikely case of overflowing the +counter. It may temporarily inverse the priority, until both side have +overflown and/or synchronized. + +Note: this mechanism isn't aiming at making "the most recent" (as in +time) side gaining the ownership. One side sending subsequent grab +messages earlier will likely take the ownership over a side sending a +single message simultaneously the other way. It only clears the +situation where both side believe that the other is the current +clipboard owner, by having a global ordering and priority in case of +serial conflict. + +Signed-off-by: Marc-André Lureau +--- + spice/vd_agent.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/spice/vd_agent.h b/spice/vd_agent.h +index ad61339..07673d7 100644 +--- a/spice/vd_agent.h ++++ b/spice/vd_agent.h +@@ -237,6 +237,9 @@ 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_CLIPBOARD_GRAB_SERIAL */ ++ uint32_t serial; + #endif + uint32_t types[0]; + } VDAgentClipboardGrab; +@@ -310,6 +313,7 @@ enum { + VD_AGENT_CAP_FILE_XFER_DETAILED_ERRORS, + VD_AGENT_CAP_GRAPHICS_DEVICE_INFO, + VD_AGENT_CAP_CLIPBOARD_NO_RELEASE_ON_REGRAB, ++ VD_AGENT_CAP_CLIPBOARD_GRAB_SERIAL, + VD_AGENT_END_CAP, + }; + +-- +2.23.0 + diff --git a/spice-protocol.spec b/spice-protocol.spec index 3dd93f7..caab5c5 100644 --- a/spice-protocol.spec +++ b/spice-protocol.spec @@ -1,12 +1,20 @@ Name: spice-protocol Version: 0.14.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Spice protocol header files # Main headers are BSD, controller / foreign menu are LGPL License: BSD and LGPLv2+ URL: http://www.spice-space.org/ Source0: http://www.spice-space.org/download/releases/%{name}-%{version}.tar.bz2 BuildArch: noarch +# clipboard-race patches: together with patches for vdagent +# and spice-gtk these fix problems interacting with mutter's new +# clipboard manager +# https://bugzilla.redhat.com/show_bug.cgi?id=1755038 +# https://patchwork.freedesktop.org/patch/293583/ +Patch0: 0002-vdagent-introduce-VD_AGENT_CAP_CLIPBOARD_NO_RELEASE_.patch +# https://patchwork.freedesktop.org/patch/293584/ +Patch1: 0003-vdagent-introduce-VD_AGENT_CAP_CLIPBOARD_GRAB_SERIAL.patch %description Header files describing the spice protocol @@ -14,7 +22,7 @@ and the para-virtual graphics card QXL. %prep -%setup -q +%autosetup -p1 %build %configure @@ -31,6 +39,9 @@ make DESTDIR=%{buildroot} install %changelog +* Fri Oct 04 2019 Adam Williamson - 0.14.0-3 +- Backport clipboard-race patches for #1755038 + * Fri Jul 26 2019 Fedora Release Engineering - 0.14.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild