[Spice-devel] [spice-gtk v2 6/7] channel-main: clipboard grab: don't fail silently

Frediano Ziglio fziglio at redhat.com
Mon Dec 10 12:42:35 UTC 2018


> 
> From: Victor Toso <me at victortoso.com>
> 
> Spice client should listen to SpiceMainChannel::agent-connected
> notification and avoid calling any clipboard related functions such as
> spice_gtk_session_paste_from_guest() from client-gtk library.
> 
> This patch removes the silent return of agent_clipboard_grab() in
> order to properly catch bugs with critical messages.
> 
> Signed-off-by: Victor Toso <victortoso at redhat.com>

Documentation for agent-connected: "Whether the agent is connected"

Documentation for main-agent-update signal:

/**
 * SpiceMainChannel::main-agent-update:
 * @main: the #SpiceMainChannel that emitted the signal
 *
 * Notify when the %SpiceMainChannel:agent-connected or
 * %SpiceMainChannel:agent-caps-0 property change.
 **/

Documentation for spice_main_channel_clipboard_selection_grab

/**
 * spice_main_channel_clipboard_selection_grab:
 * @channel: a #SpiceMainChannel
 * @selection: one of the clipboard #VD_AGENT_CLIPBOARD_SELECTION_*
 * @types: an array of #VD_AGENT_CLIPBOARD types available in the clipboard
 * @ntypes: the number of @types
 *
 * Grab the guest clipboard, with #VD_AGENT_CLIPBOARD @types.
 *
 * Since: 0.35
 **/

Documentation for spice_gtk_session_paste_from_guest

/**
 * spice_gtk_session_paste_from_guest:
 * @self: #SpiceGtkSession
 *                                               
 * Copy guest clipboard to client-side clipboard.
 *  
 * Since 0.8
 **/

I don't see any requirement for the client to check agent status.

> ---
>  src/channel-main.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/src/channel-main.c b/src/channel-main.c
> index 223043a..aa563d2 100644
> --- a/src/channel-main.c
> +++ b/src/channel-main.c
> @@ -1352,9 +1352,7 @@ static bool agent_clipboard_grab(SpiceMainChannel
> *channel, guint selection,
>      size_t size;
>      int i;
>  
> -    if (!c->agent_connected)
> -        return false;
> -
> +    g_return_val_if_fail(c->agent_connected, false);
>      g_return_val_if_fail(test_agent_cap(channel,
>      VD_AGENT_CAP_CLIPBOARD_BY_DEMAND), false);
>  
>      size = sizeof(VDAgentClipboardGrab) + sizeof(uint32_t) * ntypes;

Frediano


More information about the Spice-devel mailing list