rdp: Move peer list from output to backend

In the future we'll have multiple output support, which makes storing
the peer list on an output rather tricky.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
dev
Derek Foreman 2 years ago committed by Daniel Stone
parent 27d2a4cfab
commit 4564a40cb0
  1. 21
      libweston/backend-rdp/rdp.c
  2. 4
      libweston/backend-rdp/rdp.h

@ -253,7 +253,8 @@ rdp_output_repaint(struct weston_output *output_base, pixman_region32_t *damage)
{ {
struct rdp_output *output = container_of(output_base, struct rdp_output, base); struct rdp_output *output = container_of(output_base, struct rdp_output, base);
struct weston_compositor *ec = output->base.compositor; struct weston_compositor *ec = output->base.compositor;
struct rdp_peers_item *outputPeer; struct rdp_backend *b = to_rdp_backend(ec);
struct rdp_peers_item *peer;
struct timespec now, target; struct timespec now, target;
int refresh_nsec = millihz_to_nsec(output_base->current_mode->refresh); int refresh_nsec = millihz_to_nsec(output_base->current_mode->refresh);
int refresh_msec = refresh_nsec / 1000000; int refresh_msec = refresh_nsec / 1000000;
@ -279,11 +280,11 @@ rdp_output_repaint(struct weston_output *output_base, pixman_region32_t *damage)
ec->renderer->repaint_output(&output->base, damage); ec->renderer->repaint_output(&output->base, damage);
if (pixman_region32_not_empty(damage)) { if (pixman_region32_not_empty(damage)) {
wl_list_for_each(outputPeer, &output->peers, link) { wl_list_for_each(peer, &b->peers, link) {
if ((outputPeer->flags & RDP_PEER_ACTIVATED) && if ((peer->flags & RDP_PEER_ACTIVATED) &&
(outputPeer->flags & RDP_PEER_OUTPUT_ENABLED)) (peer->flags & RDP_PEER_OUTPUT_ENABLED))
{ {
rdp_peer_refresh_region(damage, outputPeer->peer); rdp_peer_refresh_region(damage, peer->peer);
} }
} }
} }
@ -372,7 +373,7 @@ rdp_switch_mode(struct weston_output *output, struct weston_mode *target_mode)
pixman_image_unref(rdpOutput->shadow_surface); pixman_image_unref(rdpOutput->shadow_surface);
rdpOutput->shadow_surface = new_shadow_buffer; rdpOutput->shadow_surface = new_shadow_buffer;
wl_list_for_each(rdpPeer, &rdpOutput->peers, link) { wl_list_for_each(rdpPeer, &rdpBackend->peers, link) {
settings = rdpPeer->peer->context->settings; settings = rdpPeer->peer->context->settings;
if (settings->DesktopWidth == (UINT32)target_mode->width && if (settings->DesktopWidth == (UINT32)target_mode->width &&
settings->DesktopHeight == (UINT32)target_mode->height) settings->DesktopHeight == (UINT32)target_mode->height)
@ -413,8 +414,6 @@ rdp_output_set_size(struct weston_output *base,
weston_head_set_physical_size(head, 0, 0); weston_head_set_physical_size(head, 0, 0);
} }
wl_list_init(&output->peers);
initMode.flags = WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED; initMode.flags = WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED;
initMode.width = width; initMode.width = width;
initMode.height = height; initMode.height = height;
@ -566,7 +565,7 @@ rdp_destroy(struct weston_compositor *ec)
struct rdp_peers_item *rdp_peer, *tmp; struct rdp_peers_item *rdp_peer, *tmp;
int i; int i;
wl_list_for_each_safe(rdp_peer, tmp, &b->output->peers, link) { wl_list_for_each_safe(rdp_peer, tmp, &b->peers, link) {
freerdp_peer* client = rdp_peer->peer; freerdp_peer* client = rdp_peer->peer;
client->Disconnect(client); client->Disconnect(client);
@ -1581,7 +1580,7 @@ rdp_peer_init(freerdp_peer *client, struct rdp_backend *b)
for ( ; i < (int)ARRAY_LENGTH(peerCtx->events); i++) for ( ; i < (int)ARRAY_LENGTH(peerCtx->events); i++)
peerCtx->events[i] = 0; peerCtx->events[i] = 0;
wl_list_insert(&b->output->peers, &peerCtx->item.link); wl_list_insert(&b->peers, &peerCtx->item.link);
if (!rdp_initialize_dispatch_task_event_source(peerCtx)) if (!rdp_initialize_dispatch_task_event_source(peerCtx))
goto error_dispatch_initialize; goto error_dispatch_initialize;
@ -1698,6 +1697,8 @@ rdp_backend_create(struct weston_compositor *compositor,
} }
} }
wl_list_init(&b->peers);
if (weston_compositor_set_presentation_clock_software(compositor) < 0) if (weston_compositor_set_presentation_clock_software(compositor) < 0)
goto err_compositor; goto err_compositor;

@ -82,6 +82,8 @@ struct rdp_backend {
struct weston_log_scope *clipboard_debug; struct weston_log_scope *clipboard_debug;
struct weston_log_scope *clipboard_verbose; struct weston_log_scope *clipboard_verbose;
struct wl_list peers;
char *server_cert; char *server_cert;
char *server_key; char *server_key;
char *rdp_key; char *rdp_key;
@ -120,8 +122,6 @@ struct rdp_output {
struct weston_output base; struct weston_output base;
struct wl_event_source *finish_frame_timer; struct wl_event_source *finish_frame_timer;
pixman_image_t *shadow_surface; pixman_image_t *shadow_surface;
struct wl_list peers;
}; };
struct rdp_peer_context { struct rdp_peer_context {

Loading…
Cancel
Save