Use the new output_id field in the message from the client, store it in the monitor_configs array in the session and pass it to the server and subsequently vd_agent in the VDAgentMonitorsConfigV2 message. Signed-off-by: Lukáš Hrázký <lhrazky@xxxxxxxxxx> --- src/channel-display.c | 14 ++++++++------ src/channel-main.c | 8 +++++--- src/spice-session.c | 16 +++++++++------- src/spice-session.h | 5 +++-- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/channel-display.c b/src/channel-display.c index 9e83e43..942b0fd 100644 --- a/src/channel-display.c +++ b/src/channel-display.c @@ -1900,8 +1900,8 @@ static void display_handle_monitors_config(SpiceChannel *channel, SpiceMsgIn *in for (i = 0; i < config->count; i++) { SpiceDisplayMonitorConfig *mc = &g_array_index(c->monitors, SpiceDisplayMonitorConfig, i); SpiceHead *head = &config->heads[i]; - CHANNEL_DEBUG(channel, "monitor id: %u, surface id: %u, +%u+%u-%ux%u", - head->id, head->surface_id, + CHANNEL_DEBUG(channel, "monitor id: %u, surface id: %u, output id: %u, +%u+%u-%ux%u", + head->id, head->surface_id, head->output_id, head->x, head->y, head->width, head->height); mc->id = head->id; mc->surface_id = head->surface_id; @@ -1912,18 +1912,20 @@ static void display_handle_monitors_config(SpiceChannel *channel, SpiceMsgIn *in if (spice_session_find_monitor_config(session, channel->priv->channel_id, i)) { spice_session_update_monitor_config(session, channel->priv->channel_id, i, - head->x, head->y, head->width, head->height); + head->x, head->y, head->width, head->height, + head->output_id); } else { spice_session_add_monitor_config(session, channel->priv->channel_id, i, - head->x, head->y, head->width, head->height); + head->x, head->y, head->width, head->height, + head->output_id); } } // On top of the above, create disabled configs for all monitors up to max_allowed - // if they don't exist. + // if they don't exist. The output_id for those is 0 (we have no other information). for (i = config->count; i < config->max_allowed; i++) { if (!spice_session_find_monitor_config(session, channel->priv->channel_id, i)) { - spice_session_add_monitor_config(session, channel->priv->channel_id, i, 0, 0, 0, 0); + spice_session_add_monitor_config(session, channel->priv->channel_id, i, 0, 0, 0, 0, 0); } } diff --git a/src/channel-main.c b/src/channel-main.c index 8b2c031..77870a0 100644 --- a/src/channel-main.c +++ b/src/channel-main.c @@ -1132,12 +1132,14 @@ gboolean spice_main_channel_send_monitor_config(SpiceMainChannel *channel) j++; continue; } + mon->monitors[j].output_id = mc->output_id; mon->monitors[j].depth = c->display_color_depth ? c->display_color_depth : 32; mon->monitors[j].width = mc->width; mon->monitors[j].height = mc->height; mon->monitors[j].x = mc->x; mon->monitors[j].y = mc->y; - CHANNEL_DEBUG(channel, "monitor #%d: %ux%u+%d+%d @ %u bpp", j, + CHANNEL_DEBUG(channel, "monitor #%d output id %u: %ux%u+%d+%d @ %u bpp", j, + mon->monitors[j].output_id, mon->monitors[j].width, mon->monitors[j].height, mon->monitors[j].x, mon->monitors[j].y, mon->monitors[j].depth); @@ -2681,8 +2683,8 @@ void spice_main_channel_update_display(SpiceMainChannel *channel, int id, int x, } CHANNEL_DEBUG(channel, - "Update display (monitor config) id: %d (channel_id: %u, monitor_id: %u), +%d+%d-%dx%d", - id, mc->channel_id, mc->monitor_id, x, y, width, height); + "Update display (monitor config) id: %d (channel_id: %u, monitor_id: %u), output_id: %u, +%d+%d-%dx%d", + id, mc->channel_id, mc->monitor_id, mc->output_id, x, y, width, height); mc->x = x; mc->y = y; diff --git a/src/spice-session.c b/src/spice-session.c index 73da32b..b6c4300 100644 --- a/src/spice-session.c +++ b/src/spice-session.c @@ -2860,7 +2860,7 @@ SpiceMonitorConfig *spice_session_find_monitor_config(SpiceSession *session, * Since: 0.36 **/ void spice_session_add_monitor_config(SpiceSession *session, uint32_t channel_id, uint32_t monitor_id, - int x, int y, int width, int height) + int x, int y, int width, int height, uint32_t output_id) { GArray *monitor_configs = spice_session_get_monitor_configs(session); g_assert(monitor_configs != NULL); @@ -2877,11 +2877,12 @@ void spice_session_add_monitor_config(SpiceSession *session, uint32_t channel_id .y = y, .width = width, .height = height, - .enabled = 0 + .enabled = 0, + .output_id = output_id }; - SPICE_DEBUG("Adding new monitor_config idx=%u +%d+%d:%dx%d", - monitor_configs->len, x, y, width, height); + SPICE_DEBUG("Adding new monitor_config idx=%u +%d+%d:%dx%d output_id: %u", + monitor_configs->len, x, y, width, height, output_id); g_array_append_val(monitor_configs, mc); } @@ -2903,19 +2904,20 @@ void spice_session_add_monitor_config(SpiceSession *session, uint32_t channel_id * Since: 0.36 **/ void spice_session_update_monitor_config(SpiceSession *session, uint32_t channel_id, uint32_t monitor_id, - int x, int y, int width, int height) + int x, int y, int width, int height, uint32_t output_id) { SpiceMonitorConfig *mc = spice_session_find_monitor_config(session, channel_id, monitor_id); g_return_if_fail(mc != NULL); - SPICE_DEBUG("Updating monitor config channel_id: %u, monitor_id: %u, +%d+%d-%dx%d", - channel_id, monitor_id, x, y, width, height); + SPICE_DEBUG("Updating monitor config channel_id: %u, monitor_id: %u, output_id: %u (-> %u), +%d+%d-%dx%d", + channel_id, monitor_id, mc->output_id, output_id, x, y, width, height); mc->x = x; mc->y = y; mc->width = width; mc->height = height; + mc->output_id = output_id; } G_GNUC_INTERNAL diff --git a/src/spice-session.h b/src/spice-session.h index ed997d3..8aa2794 100644 --- a/src/spice-session.h +++ b/src/spice-session.h @@ -113,6 +113,7 @@ typedef struct { int width; int height; int enabled; + uint32_t output_id; } SpiceMonitorConfig; GType spice_session_get_type(void); @@ -134,10 +135,10 @@ SpiceMonitorConfig *spice_session_find_monitor_config(SpiceSession *session, uint32_t monitor_id); void spice_session_add_monitor_config(SpiceSession *session, uint32_t channel_id, uint32_t display_id, - int x, int y, int width, int height); + int x, int y, int width, int height, uint32_t output_id); void spice_session_update_monitor_config(SpiceSession *session, uint32_t channel_id, uint32_t monitor_id, - int x, int y, int width, int height); + int x, int y, int width, int height, uint32_t output_id); G_END_DECLS -- 2.17.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel