Backport clipboard-race patches for #1755038

This commit is contained in:
Adam Williamson 2019-10-04 08:01:02 -07:00
parent 81587e3295
commit 685e16c111
3 changed files with 115 additions and 2 deletions

View File

@ -0,0 +1,34 @@
From 41973d6df464db0d128ba2d272c305143d73f57a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com>
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 <marcandre.lureau@redhat.com>
---
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

View File

@ -0,0 +1,68 @@
From e8a2b9ec5a0ed46a06c9e28a0099b2a2516f710e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com>
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 <marcandre.lureau@redhat.com>
---
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

View File

@ -1,12 +1,20 @@
Name: spice-protocol Name: spice-protocol
Version: 0.14.0 Version: 0.14.0
Release: 2%{?dist} Release: 3%{?dist}
Summary: Spice protocol header files Summary: Spice protocol header files
# Main headers are BSD, controller / foreign menu are LGPL # Main headers are BSD, controller / foreign menu are LGPL
License: BSD and LGPLv2+ License: BSD and LGPLv2+
URL: http://www.spice-space.org/ URL: http://www.spice-space.org/
Source0: http://www.spice-space.org/download/releases/%{name}-%{version}.tar.bz2 Source0: http://www.spice-space.org/download/releases/%{name}-%{version}.tar.bz2
BuildArch: noarch 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 %description
Header files describing the spice protocol Header files describing the spice protocol
@ -14,7 +22,7 @@ and the para-virtual graphics card QXL.
%prep %prep
%setup -q %autosetup -p1
%build %build
%configure %configure
@ -31,6 +39,9 @@ make DESTDIR=%{buildroot} install
%changelog %changelog
* Fri Oct 04 2019 Adam Williamson <awilliam@redhat.com> - 0.14.0-3
- Backport clipboard-race patches for #1755038
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.14.0-2 * Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.14.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild