[Spice-devel] [PATCH spice-gtk] Send monitor config if at least one monitor has dimensions

Fabiano FidĂȘncio fabiano at fidencio.org
Fri Jul 10 05:58:51 PDT 2015


Hey,

On Fri, Jul 10, 2015 at 1:13 PM, Pavel Grunt <pgrunt at redhat.com> wrote:
> If a client (virt-manager, spicy) is not setting display dimensions
> and the "resize-guest" property is disabled, spice-gtk sends a wrong
> monitor config message where all the monitors have width = heigh = 0
> when the agent connects. This message can confuse the guest, in that
> case the guest will change the resolution of its monitor.

I would mention that it is a regression introduced by
28312b8d1e287a320851e8828825f2ca138d8b0b, as you already pointed me
out in a private discussion.


>
> Resolves:
> https://bugzilla.redhat.com/show_bug.cgi?id=1240721
> ---
>  src/channel-main.c | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
>
> diff --git a/src/channel-main.c b/src/channel-main.c
> index 84161cd..3bd5a02 100644
> --- a/src/channel-main.c
> +++ b/src/channel-main.c
> @@ -1415,6 +1415,22 @@ static void agent_clipboard_release(SpiceMainChannel *channel, guint selection)
>      agent_msg_queue(channel, VD_AGENT_CLIPBOARD_RELEASE, msgsize, msg);
>  }
>
> +static gboolean any_display_has_dimensions(SpiceMainChannel *channel)
> +{
> +    SpiceMainChannelPrivate *c;
> +    guint i;
> +
> +    g_return_if_fail(SPICE_IS_MAIN_CHANNEL(channel));
> +    c = channel->priv;
> +
> +    for (i = 0; i < MAX_DISPLAY; i++) {
> +        if (c->display[i].width > 0 && c->display[i].height > 0)
> +            return TRUE;
> +    }
> +
> +    return FALSE;
> +}
> +
>  /* main context*/
>  static gboolean timer_set_display(gpointer data)
>  {
> @@ -1427,6 +1443,11 @@ static gboolean timer_set_display(gpointer data)
>      if (!c->agent_connected)
>          return FALSE;
>
> +    if (!any_display_has_dimensions(channel)) {
> +        SPICE_DEBUG("Not sending monitors config, at least one monitor must have dimensions");
> +        return FALSE;
> +    }
> +
>      session = spice_channel_get_session(SPICE_CHANNEL(channel));
>
>      if (!spice_main_agent_test_capability(channel, VD_AGENT_CAP_SPARSE_MONITORS_CONFIG)) {
> --
> 2.4.5
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel

Looks good, ACK!

-- 
Fabiano FidĂȘncio


More information about the Spice-devel mailing list