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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 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@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]