[virt-tools-list] [PATCH virt-viewer 2/2] fullscreen-auto-conf: Use display id according to monitor-mapping

Jonathon Jongsma jjongsma at redhat.com
Wed Jun 3 14:29:40 UTC 2015


On Wed, 2015-06-03 at 14:44 +0200, Pavel Grunt wrote:
> ---
>  src/virt-viewer-session-spice.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c
> index 9c72245..2a036b7 100644
> --- a/src/virt-viewer-session-spice.c
> +++ b/src/virt-viewer-session-spice.c
> @@ -836,6 +836,7 @@ virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self)
>      gint i;
>      GList *initial_displays, *l;
>      guint ndisplays;
> +    gint *display_ids;
>  
>      /* only do auto-conf once at startup. Avoid repeating auto-conf later due to
>       * agent disconnection/re-connection, etc */
> @@ -869,10 +870,12 @@ virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self)
>      ndisplays = g_list_length(initial_displays);
>      g_debug("Performing full screen auto-conf, %u host monitors", ndisplays);
>      displays = g_new0(GdkRectangle, ndisplays);
> +    display_ids = g_new0(gint, ndisplays);
>  
>      for (ndisplays = 0, l = initial_displays; l != NULL; l = l->next) {
>          GdkRectangle* rect = &displays[ndisplays];
> -        gint j = virt_viewer_app_get_initial_monitor_for_display(app, GPOINTER_TO_INT(l->data));
> +        display_ids[ndisplays] = GPOINTER_TO_INT(l->data);
> +        gint j = virt_viewer_app_get_initial_monitor_for_display(app, display_ids[ndisplays]);
>          if (j == -1)
>              continue;
>  
> @@ -886,12 +889,13 @@ virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self)
>      for (i = 0; i < ndisplays; i++) {
>          GdkRectangle *rect = &displays[i];
>  
> -        spice_main_set_display(cmain, i, rect->x, rect->y, rect->width, rect->height);
> -        spice_main_set_display_enabled(cmain, i, TRUE);
> +        spice_main_set_display(cmain, display_ids[i], rect->x, rect->y, rect->width, rect->height);
> +        spice_main_set_display_enabled(cmain, display_ids[i], TRUE);
>          g_debug("Set SPICE display %d to (%d,%d)-(%dx%d)",
> -                  i, rect->x, rect->y, rect->width, rect->height);
> +                display_ids[i], rect->x, rect->y, rect->width, rect->height);
>      }
>      g_free(displays);
> +    g_free(display_ids);
>  
>      spice_main_send_monitor_config(cmain);
>      self->priv->did_auto_conf = TRUE;


This looks like it will work fine, but I'm starting to wonder whether it
wouldn't be simpler and easier to understand if we used a e.g.
GHashTable<int, GdkRectangle*> instead of using an array of ints and a
separate array of GdkRectangles...




More information about the virt-tools-list mailing list