mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-01-05 07:31:27 +00:00
display-channel: push monitor configuration
RedWorker should not handle directly to client but defer the job to DisplayChannel. Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
parent
1026a89b78
commit
c91fbc155b
@ -2426,6 +2426,15 @@ gboolean display_channel_validate_surface(DisplayChannel *display, uint32_t surf
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void display_channel_push_monitors_config(DisplayChannel *display)
|
||||
{
|
||||
DisplayChannelClient *dcc;
|
||||
|
||||
FOREACH_DCC(display, dcc) {
|
||||
dcc_push_monitors_config(dcc);
|
||||
}
|
||||
}
|
||||
|
||||
void display_channel_update_monitors_config(DisplayChannel *display,
|
||||
QXLMonitorsConfig *config,
|
||||
uint16_t count, uint16_t max_allowed)
|
||||
@ -2436,6 +2445,8 @@ void display_channel_update_monitors_config(DisplayChannel *display,
|
||||
|
||||
display->priv->monitors_config =
|
||||
monitors_config_new(config->heads, count, max_allowed);
|
||||
|
||||
display_channel_push_monitors_config(display);
|
||||
}
|
||||
|
||||
void display_channel_set_monitors_config_to_primary(DisplayChannel *display)
|
||||
|
||||
@ -260,6 +260,7 @@ void display_channel_gl_draw_done (DisplayCha
|
||||
void display_channel_update_monitors_config(DisplayChannel *display, QXLMonitorsConfig *config,
|
||||
uint16_t count, uint16_t max_allowed);
|
||||
void display_channel_set_monitors_config_to_primary(DisplayChannel *display);
|
||||
void display_channel_push_monitors_config(DisplayChannel *display);
|
||||
|
||||
gboolean display_channel_validate_surface(DisplayChannel *display, uint32_t surface_id);
|
||||
gboolean display_channel_surface_has_canvas(DisplayChannel *display, uint32_t surface_id);
|
||||
|
||||
@ -485,15 +485,6 @@ static void handle_dev_destroy_surfaces(void *opaque, void *payload)
|
||||
cursor_channel_reset(worker->cursor_channel);
|
||||
}
|
||||
|
||||
static void red_worker_push_monitors_config(RedWorker *worker)
|
||||
{
|
||||
DisplayChannelClient *dcc;
|
||||
|
||||
FOREACH_DCC(worker->display_channel, dcc) {
|
||||
dcc_push_monitors_config(dcc);
|
||||
}
|
||||
}
|
||||
|
||||
static void dev_create_primary_surface(RedWorker *worker, uint32_t surface_id,
|
||||
QXLDevSurfaceCreate surface)
|
||||
{
|
||||
@ -539,7 +530,7 @@ static void dev_create_primary_surface(RedWorker *worker, uint32_t surface_id,
|
||||
/* guest created primary, so it will (hopefully) send a monitors_config
|
||||
* now, don't send our own temporary one */
|
||||
if (!worker->driver_cap_monitors_config) {
|
||||
red_worker_push_monitors_config(worker);
|
||||
display_channel_push_monitors_config(display);
|
||||
}
|
||||
red_channel_pipes_add_empty_msg(RED_CHANNEL(worker->display_channel),
|
||||
SPICE_MSG_DISPLAY_MARK);
|
||||
@ -814,7 +805,6 @@ static void handle_dev_monitors_config_async(void *opaque, void *payload)
|
||||
display_channel_update_monitors_config(worker->display_channel, dev_monitors_config,
|
||||
MIN(count, msg->max_monitors),
|
||||
MIN(max_allowed, msg->max_monitors));
|
||||
red_worker_push_monitors_config(worker);
|
||||
}
|
||||
|
||||
/* TODO: special, perhaps use another dispatcher? */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user