From c2d2525aaa3abada0cef9ab0b7bb3df4fc964ada Mon Sep 17 00:00:00 2001
From: Philipp Zabel
Date: Thu, 11 Mar 2021 16:24:50 +0100
Subject: [PATCH] backend-vnc: store backend on struct vnc_output
To avoid retrieving the backend from the compositor all the time, store
a pointer to the vnc backend on its vnc_output structures.
This will be useful once the compositor contains more than one backend.
Signed-off-by: Philipp Zabel
---
libweston/backend-vnc/vnc.c | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/libweston/backend-vnc/vnc.c b/libweston/backend-vnc/vnc.c
index 3778e3514..3dfd8ec57 100644
--- a/libweston/backend-vnc/vnc.c
+++ b/libweston/backend-vnc/vnc.c
@@ -75,6 +75,7 @@ struct vnc_backend {
struct vnc_output {
struct weston_output base;
+ struct vnc_backend *backend;
struct wl_event_source *finish_frame_timer;
struct nvnc_display *display;
@@ -612,7 +613,7 @@ vnc_output_enable(struct weston_output *base)
assert(output);
- backend = to_vnc_backend(base->compositor);
+ backend = output->backend;
backend->output = output;
if (pixman_renderer_output_create(&output->base, &options) < 0)
@@ -651,7 +652,7 @@ vnc_output_disable(struct weston_output *base)
assert(output);
- backend = to_vnc_backend(base->compositor);
+ backend = output->backend;
if (!output->base.enabled)
return 0;
@@ -698,6 +699,8 @@ vnc_create_output(struct weston_backend *backend, const char *name)
output->base.enable = vnc_output_enable;
output->base.attach_head = NULL;
+ output->backend = b;
+
weston_compositor_add_pending_output(&output->base, b->compositor);
return &output->base;
@@ -774,7 +777,7 @@ vnc_output_repaint(struct weston_output *base, pixman_region32_t *damage)
{
struct vnc_output *output = to_vnc_output(base);
struct weston_compositor *ec = output->base.compositor;
- struct vnc_backend *backend = to_vnc_backend(ec);
+ struct vnc_backend *backend = output->backend;
struct timespec now, target;
int refresh_nsec = millihz_to_nsec(output->base.current_mode->refresh);
int refresh_msec = refresh_nsec / 1000000;
@@ -837,19 +840,19 @@ vnc_insert_new_mode(struct weston_output *output, int width, int height,
}
static struct weston_mode *
-vnc_ensure_matching_mode(struct weston_output *output,
+vnc_ensure_matching_mode(struct vnc_output *output,
struct weston_mode *target)
{
- struct vnc_backend *backend = to_vnc_backend(output->compositor);
+ struct vnc_backend *backend = output->backend;
struct weston_mode *local;
- wl_list_for_each(local, &output->mode_list, link) {
+ wl_list_for_each(local, &output->base.mode_list, link) {
if ((local->width == target->width) &&
(local->height == target->height))
return local;
}
- return vnc_insert_new_mode(output, target->width, target->height,
+ return vnc_insert_new_mode(&output->base, target->width, target->height,
backend->vnc_monitor_refresh_rate);
}
@@ -862,7 +865,7 @@ vnc_switch_mode(struct weston_output *base, struct weston_mode *target_mode)
assert(output);
- local_mode = vnc_ensure_matching_mode(base, target_mode);
+ local_mode = vnc_ensure_matching_mode(output, target_mode);
if (local_mode == base->current_mode)
return 0;
@@ -888,7 +891,7 @@ static int
vnc_output_set_size(struct weston_output *base, int width, int height)
{
struct vnc_output *output = to_vnc_output(base);
- struct vnc_backend *backend = to_vnc_backend(base->compositor);
+ struct vnc_backend *backend = output->backend;
struct weston_mode *current_mode;
struct weston_mode init_mode;
@@ -901,7 +904,7 @@ vnc_output_set_size(struct weston_output *base, int width, int height)
init_mode.height = height;
init_mode.refresh = backend->vnc_monitor_refresh_rate;
- current_mode = vnc_ensure_matching_mode(&output->base, &init_mode);
+ current_mode = vnc_ensure_matching_mode(output, &init_mode);
current_mode->flags = WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED;
output->base.current_mode = output->base.native_mode = current_mode;