[Spice-devel] [spice-gtk v1] gtk-session: reply agent's clipboard request on failure
Victor Toso
victortoso at redhat.com
Fri Feb 24 09:07:00 UTC 2017
Hi,
On Wed, Feb 22, 2017 at 01:29:20PM +0100, Victor Toso wrote:
> From: Victor Toso <me at victortoso.com>
>
> We need to reply back to the agent all clipboard requests even in case
> of failure otherwise it will have a pending request. The following
> error message can be seen in afterwards, when client sends down some
> clipboard data:
It is worth to mention in the commit log that this is a regression from
7b0de6217670e0f668aff2949f, as we were notifying the agent even on
failure, see:
https://gitlab.com/spice/spice-gtk/commit/7b0de6217670e0f668aff2949fba174ed3cc0b50#7d95131068c82b7224989c1c61cc3c85a9743df3_956_990
I've included in the commit log:
"This fixes a regression from 7b0de6217670e0f668aff2949f"
Cheers,
>
> > clipboard: selection requests pending on clipboard ownership
> > change, clearing
>
> An easy way to reproduce this is:
> 1-) In client, copy image from lo-draw (selection or ctrl+c)
> 2-) In guest, paste it to GEdit (mouse3 our ctrl+v)
> 3-) Move to the client
> 4-) Move back to the guest
> 5-) see error on vdagent logs
>
> The reason for failure is that client's clipboard contains different
> data type (image) then what was requested from guest's editor (text)
>
> While at it, include extra debug message as it might be hard to
> identify why clipboard did not work.
>
> Resolves: rhbz#1409854
> Signed-off-by: Victor Toso <victortoso at redhat.com>
> ---
> src/spice-gtk-session.c | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c
> index 0426d8f..315bc26 100644
> --- a/src/spice-gtk-session.c
> +++ b/src/spice-gtk-session.c
> @@ -940,28 +940,33 @@ static void clipboard_received_text_cb(GtkClipboard *clipboard,
> if (self == NULL)
> return;
>
> + selection = get_selection_from_clipboard(self->priv, clipboard);
> + g_return_if_fail(selection != -1);
> +
> if (text == NULL) {
> SPICE_DEBUG("Failed to retrieve clipboard text");
> - return;
> + goto notify_agent;
> }
>
> g_return_if_fail(SPICE_IS_GTK_SESSION(self));
>
> - selection = get_selection_from_clipboard(self->priv, clipboard);
> - g_return_if_fail(selection != -1);
> -
> len = strlen(text);
> if (!check_clipboard_size_limits(self, len)) {
> - return;
> + SPICE_DEBUG("Failed sized limits of clipboard text (%d bytes)", len);
> + len = 0;
> + goto notify_agent;
> }
>
> /* gtk+ internal utf8 newline is always LF, even on windows */
> conv = fixup_clipboard_text(self, text, &len);
> if (!check_clipboard_size_limits(self, len)) {
> - g_free(conv);
> - return;
> + SPICE_DEBUG("Failed sized limits of clipboard text (%d bytes)", len);
> + g_clear_pointer(&conv, g_free);
> + len = 0;
> + goto notify_agent;
> }
>
> +notify_agent:
> spice_main_clipboard_selection_notify(self->priv->main, selection,
> VD_AGENT_CLIPBOARD_UTF8_TEXT,
> (guchar *)(conv ?: text), len);
> --
> 2.9.3
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20170224/b531bd03/attachment.sig>
More information about the Spice-devel
mailing list