[virt-tools-list] [PATCH virt-viewer] session-spice: Create displays when channel connects

Fabiano Fidencio ffidenci at redhat.com
Wed Jul 29 07:56:23 UTC 2015



----- Original Message -----
> From: "Pavel Grunt" <pgrunt at redhat.com>
> To: virt-tools-list at redhat.com
> Sent: Tuesday, July 28, 2015 6:31:41 PM
> Subject: [virt-tools-list] [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 at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
> 

Nice catch!
ACK!




More information about the virt-tools-list mailing list