diff options
author | Pavel Grunt <pgrunt@redhat.com> | 2015-07-10 10:37:27 +0200 |
---|---|---|
committer | Pavel Grunt <pgrunt@redhat.com> | 2015-07-13 13:16:48 +0200 |
commit | 4b5e6ec2114e1250c81027ebeac9cfe8d059153f (patch) | |
tree | f474597a6dea72303d6e4f676cacf31539891ac5 | |
parent | c9d4773a666e00f347969981d2176708471ec0c7 (diff) |
Send monitor config if at least one monitor has dimensions
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.
Regression since 28312b8d1e287a320851e8828825f2ca138d8b0b
Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1240721
-rw-r--r-- | src/channel-main.c | 21 |
1 files changed, 21 insertions, 0 deletions
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)) { |