[Spice-devel] [PATCH spice-gtk] Send monitor config when enough display channels are connected
Pavel Grunt
pgrunt at redhat.com
Thu Jun 11 02:49:43 PDT 2015
Fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=90914
---
src/channel-main.c | 2 +-
src/spice-session-priv.h | 1 +
src/spice-session.c | 25 +++++++++++++++++++++++++
3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/src/channel-main.c b/src/channel-main.c
index fbc41da..6344d0c 100644
--- a/src/channel-main.c
+++ b/src/channel-main.c
@@ -1425,7 +1425,7 @@ static gboolean timer_set_display(gpointer data)
/* ensure we have an explicit monitor configuration at least for
number of display channels */
- for (i = 0; i < spice_session_get_n_display_channels(session); i++)
+ for (i = 0; i < spice_session_get_n_connected_display_channels(session); i++)
if (!c->display[i].enabled_set) {
SPICE_DEBUG("Not sending monitors config, missing monitors");
return FALSE;
diff --git a/src/spice-session-priv.h b/src/spice-session-priv.h
index 049973a..203bbc0 100644
--- a/src/spice-session-priv.h
+++ b/src/spice-session-priv.h
@@ -96,6 +96,7 @@ const guint8* spice_session_get_webdav_magic(SpiceSession *session);
PhodavServer *spice_session_get_webdav_server(SpiceSession *session);
PhodavServer* channel_webdav_server_new(SpiceSession *session);
guint spice_session_get_n_display_channels(SpiceSession *session);
+guint spice_session_get_n_connected_display_channels(SpiceSession *session);
void spice_session_set_main_channel(SpiceSession *session, SpiceChannel *channel);
gboolean spice_session_set_migration_session(SpiceSession *session, SpiceSession *mig_session);
SpiceAudio *spice_audio_get(SpiceSession *session, GMainContext *context);
diff --git a/src/spice-session.c b/src/spice-session.c
index 778d82a..5154bcc 100644
--- a/src/spice-session.c
+++ b/src/spice-session.c
@@ -2452,6 +2452,31 @@ guint spice_session_get_n_display_channels(SpiceSession *session)
}
G_GNUC_INTERNAL
+guint spice_session_get_n_connected_display_channels(SpiceSession *session)
+{
+ SpiceSessionPrivate *s;
+ struct channel *item;
+ RingItem *ring;
+ guint channels = 0;
+
+ g_return_val_if_fail(SPICE_IS_SESSION(session), 0);
+ g_return_val_if_fail(session->priv != NULL, 0);
+
+ s = session->priv;
+
+ for (ring = ring_get_head(&s->channels);
+ ring != NULL;
+ ring = ring_next(&s->channels, ring)) {
+ item = SPICE_CONTAINEROF(ring, struct channel, link);
+ if (SPICE_IS_DISPLAY_CHANNEL(item->channel) &&
+ spice_channel_get_state(item->channel) != SPICE_CHANNEL_STATE_UNCONNECTED) {
+ channels++;
+ }
+ }
+ return channels;
+}
+
+G_GNUC_INTERNAL
void spice_session_set_uuid(SpiceSession *session, guint8 uuid[16])
{
g_return_if_fail(SPICE_IS_SESSION(session));
--
2.4.3
More information about the Spice-devel
mailing list