----- Original Message ----- > From: "Pavel Grunt" <pgrunt@xxxxxxxxxx> > To: virt-tools-list@xxxxxxxxxx > Sent: Tuesday, July 28, 2015 6:31:41 PM > Subject: [PATCH virt-viewer] session-spice: Create displays when channel connects > > The display channel emits "notify::monitor" only when its display is > enabled. If the display is not enabled then it is not listed in the > "View -> Displays" menu, because display widgets are created as a > reaction to the "notify::monitor". > Creating display widgets at the moment the channel connects makes sure > that displays are listed the "View -> Displays" menu and can be enabled. > > Resolves: > https://bugs.freedesktop.org/show_bug.cgi?id=91489 > --- > src/virt-viewer-session-spice.c | 29 ++++++++++++++++++++++++++--- > 1 file changed, 26 insertions(+), 3 deletions(-) > > diff --git a/src/virt-viewer-session-spice.c > b/src/virt-viewer-session-spice.c > index 9976291..67d5a3f 100644 > --- a/src/virt-viewer-session-spice.c > +++ b/src/virt-viewer-session-spice.c > @@ -766,9 +766,8 @@ destroy_display(gpointer data) > } > > static void > -virt_viewer_session_spice_display_monitors(SpiceChannel *channel, > - GParamSpec *pspec G_GNUC_UNUSED, > - VirtViewerSessionSpice *self) > +virt_viewer_session_spice_create_displays_for_channel(VirtViewerSessionSpice > *self, > + SpiceChannel *channel) > { > GArray *monitors = NULL; > GPtrArray *displays = NULL; > @@ -803,6 +802,29 @@ virt_viewer_session_spice_display_monitors(SpiceChannel > *channel, > } > } > > + g_clear_pointer(&monitors, g_array_unref); > +} > + > +static void > +virt_viewer_session_spice_display_monitors(SpiceChannel *channel, > + GParamSpec *pspec G_GNUC_UNUSED, > + VirtViewerSessionSpice *self) > +{ > + GArray *monitors = NULL; > + GPtrArray *displays = NULL; > + GtkWidget *display; > + guint i, monitors_max; > + > + g_object_get(channel, > + "monitors", &monitors, > + "monitors-max", &monitors_max, > + NULL); > + g_return_if_fail(monitors != NULL); > + g_return_if_fail(monitors->len <= monitors_max); > + > + virt_viewer_session_spice_create_displays_for_channel(self, channel); > + displays = g_object_get_data(G_OBJECT(channel), "virt-viewer-displays"); > + > for (i = 0; i < monitors->len; i++) { > SpiceDisplayMonitorConfig *monitor = &g_array_index(monitors, > SpiceDisplayMonitorConfig, i); > display = g_ptr_array_index(displays, monitor->id); > @@ -856,6 +878,7 @@ virt_viewer_session_spice_channel_new(SpiceSession *s, > } > > if (SPICE_IS_DISPLAY_CHANNEL(channel)) { > + virt_viewer_session_spice_create_displays_for_channel(self, > channel); > g_signal_emit_by_name(session, "session-initialized"); > > virt_viewer_signal_connect_object(channel, "notify::monitors", > -- > 2.4.6 > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list > Nice catch! ACK! _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list