[Spice-devel] [PATCH spice-gtk 1/2] spice-widget: Search monitor info by display monitor-id

Marc-André Lureau mlureau at redhat.com
Fri Jan 18 18:37:05 PST 2013


ack

----- Mensaje original -----
> As discussed indexing the display-channel's monitors property by
> monitor-id
> causes problems with the vdagent's new sparse monitor config support.
> 
> Searching the monitors property by monitor-id avoids these problems.
> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  gtk/spice-widget.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
> index 9cfb683..f1628d9 100644
> --- a/gtk/spice-widget.c
> +++ b/gtk/spice-widget.c
> @@ -265,15 +265,23 @@ static void set_monitor_ready(SpiceDisplay
> *self, gboolean ready)
>  static void update_monitor_area(SpiceDisplay *display)
>  {
>      SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> -    SpiceDisplayMonitorConfig *c;
> +    SpiceDisplayMonitorConfig *cfg, *c = NULL;
>      GArray *monitors = NULL;
> +    int i;
>  
>      SPICE_DEBUG("update monitor area %d:%d", d->channel_id,
>      d->monitor_id);
>      if (d->monitor_id < 0)
>          goto whole;
>  
>      g_object_get(d->display, "monitors", &monitors, NULL);
> -    if (monitors == NULL || d->monitor_id >= monitors->len) {
> +    for (i = 0; monitors != NULL && i < monitors->len; i++) {
> +        cfg = &g_array_index(monitors, SpiceDisplayMonitorConfig,
> i);
> +        if (cfg->id == d->monitor_id) {
> +           c = cfg;
> +           break;
> +        }
> +    }
> +    if (c == NULL) {
>          SPICE_DEBUG("update monitor: no monitor %d", d->monitor_id);
>          set_monitor_ready(display, false);
>          if (spice_channel_test_capability(d->display,
>          SPICE_DISPLAY_CAP_MONITORS_CONFIG)) {
> @@ -283,8 +291,6 @@ static void update_monitor_area(SpiceDisplay
> *display)
>          goto whole;
>      }
>  
> -    c = &g_array_index(monitors, SpiceDisplayMonitorConfig,
> d->monitor_id);
> -    g_return_if_fail(c != NULL);
>      if (c->surface_id != 0) {
>          g_warning("FIXME: only support monitor config with primary
>          surface 0, "
>                    "but given config surface %d", c->surface_id);
> --
> 1.8.0.2
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
> 


More information about the Spice-devel mailing list