--- gtk/channel-display.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/gtk/channel-display.c b/gtk/channel-display.c index 13aa810..e6fd388 100644 --- a/gtk/channel-display.c +++ b/gtk/channel-display.c @@ -1457,6 +1457,37 @@ static void display_handle_surface_destroy(SpiceChannel *channel, SpiceMsgIn *in free(surface); } +/* coroutine context */ +static void display_handle_monitors_config(SpiceChannel *channel, SpiceMsgIn *in) +{ + SpiceMsgDisplayMonitorsConfig *config = spice_msg_in_parsed(in); + SpiceDisplayChannelPrivate *c = SPICE_DISPLAY_CHANNEL(channel)->priv; + guint i; + + g_return_if_fail(config != NULL); + g_return_if_fail(config->count > 0); + + SPICE_DEBUG("monitors config: n: %d", config->count); + + c->monitors = g_array_set_size(c->monitors, config->count); + + for (i = 0; i < config->count; i++) { + SpiceDisplayMonitorConfig *mc = &g_array_index(c->monitors, SpiceDisplayMonitorConfig, i); + SpiceHead *head = &config->heads[i]; + SPICE_DEBUG("monitor id: %u, surface id: %u, +%u+%u-%ux%u", + head->id, head->surface_id, + head->x, head->y, head->width, head->height); + mc->id = head->id; + mc->surface_id = head->surface_id; + mc->x = head->x; + mc->y = head->y; + mc->width = head->width; + mc->height = head->height; + } + + g_object_notify_main_context(G_OBJECT(channel), "monitors"); +} + static const spice_msg_handler display_handlers[] = { [ SPICE_MSG_DISPLAY_MODE ] = display_handle_mode, [ SPICE_MSG_DISPLAY_MARK ] = display_handle_mark, @@ -1489,6 +1520,8 @@ static const spice_msg_handler display_handlers[] = { [ SPICE_MSG_DISPLAY_SURFACE_CREATE ] = display_handle_surface_create, [ SPICE_MSG_DISPLAY_SURFACE_DESTROY ] = display_handle_surface_destroy, + + [ SPICE_MSG_DISPLAY_MONITORS_CONFIG ] = display_handle_monitors_config, }; /* coroutine context */ -- 1.7.10.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel