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. 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@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel