[Spice-devel] [PATCH spice-gtk 1/2] spice-widget: Search monitor info by display monitor-id
Hans de Goede
hdegoede at redhat.com
Fri Jan 18 05:33:03 PST 2013
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
More information about the Spice-devel
mailing list