From 055c1137aebc1cd1fc7c8d1a653edb595734b88a Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Mon, 27 Mar 2017 16:31:25 +0300 Subject: [PATCH] libweston: make wl_output point to weston_head The user data of a wl_resource representing a wl_output protocol object used to be a pointer to weston_output. Now that weston_output is being split, wl_output more accurately refers to weston_head which is a single monitor. Change the wl_output user data to point to weston_head. weston_output_from_resource() is replaced with weston_head_from_resource(). This change is not strictly necessary, but architecturally it is the right thing to do. In the future there might appear the need to refer to a specific head of a cloned pair, for instance. Signed-off-by: Pekka Paalanen v5 Reviewed-by: Derek Foreman Reviewed-by: Ian Ray Reviewed-by: Daniel Stone Acked-by: Derek Foreman --- compositor/weston-screenshooter.c | 2 +- desktop-shell/input-panel.c | 4 +++- desktop-shell/shell.c | 4 ++-- fullscreen-shell/fullscreen-shell.c | 4 ++-- ivi-shell/input-panel-ivi.c | 4 +++- libweston-desktop/wl-shell.c | 2 +- libweston-desktop/xdg-shell-v6.c | 2 +- libweston/compositor.c | 6 +++--- libweston/compositor.h | 4 ++-- tests/weston-test.c | 2 +- 10 files changed, 19 insertions(+), 15 deletions(-) diff --git a/compositor/weston-screenshooter.c b/compositor/weston-screenshooter.c index f0bc0e1e..70afed4a 100644 --- a/compositor/weston-screenshooter.c +++ b/compositor/weston-screenshooter.c @@ -66,7 +66,7 @@ screenshooter_shoot(struct wl_client *client, struct wl_resource *buffer_resource) { struct weston_output *output = - weston_output_from_resource(output_resource); + weston_head_from_resource(output_resource)->output; struct weston_buffer *buffer = weston_buffer_from_resource(buffer_resource); diff --git a/desktop-shell/input-panel.c b/desktop-shell/input-panel.c index e6b1541a..8292f20a 100644 --- a/desktop-shell/input-panel.c +++ b/desktop-shell/input-panel.c @@ -270,11 +270,13 @@ input_panel_surface_set_toplevel(struct wl_client *client, struct input_panel_surface *input_panel_surface = wl_resource_get_user_data(resource); struct desktop_shell *shell = input_panel_surface->shell; + struct weston_head *head; wl_list_insert(&shell->input_panel.surfaces, &input_panel_surface->link); - input_panel_surface->output = weston_output_from_resource(output_resource); + head = weston_head_from_resource(output_resource); + input_panel_surface->output = head->output; input_panel_surface->panel = 0; } diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index ceb45c74..b846e305 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -2969,7 +2969,7 @@ desktop_shell_set_background(struct wl_client *client, surface->committed = background_committed; surface->committed_private = shell; weston_surface_set_label_func(surface, background_get_label); - surface->output = weston_output_from_resource(output_resource); + surface->output = weston_head_from_resource(output_resource)->output; view->output = surface->output; sh_output = find_shell_output_from_weston_output(shell, surface->output); @@ -3066,7 +3066,7 @@ desktop_shell_set_panel(struct wl_client *client, surface->committed = panel_committed; surface->committed_private = shell; weston_surface_set_label_func(surface, panel_get_label); - surface->output = weston_output_from_resource(output_resource); + surface->output = weston_head_from_resource(output_resource)->output; view->output = surface->output; sh_output = find_shell_output_from_weston_output(shell, surface->output); diff --git a/fullscreen-shell/fullscreen-shell.c b/fullscreen-shell/fullscreen-shell.c index 6f4565a7..89884794 100644 --- a/fullscreen-shell/fullscreen-shell.c +++ b/fullscreen-shell/fullscreen-shell.c @@ -769,7 +769,7 @@ fullscreen_shell_present_surface(struct wl_client *client, } if (output_res) { - output = weston_output_from_resource(output_res); + output = weston_head_from_resource(output_res)->output; fsout = fs_output_for_output(output); fs_output_set_surface(fsout, surface, method, 0, 0); } else { @@ -813,7 +813,7 @@ fullscreen_shell_present_surface_for_mode(struct wl_client *client, struct weston_seat *seat; struct fs_output *fsout; - output = weston_output_from_resource(output_res); + output = weston_head_from_resource(output_res)->output; fsout = fs_output_for_output(output); if (surface_res == NULL) { diff --git a/ivi-shell/input-panel-ivi.c b/ivi-shell/input-panel-ivi.c index 0008a52d..219494dc 100644 --- a/ivi-shell/input-panel-ivi.c +++ b/ivi-shell/input-panel-ivi.c @@ -271,11 +271,13 @@ input_panel_surface_set_toplevel(struct wl_client *client, struct input_panel_surface *input_panel_surface = wl_resource_get_user_data(resource); struct ivi_shell *shell = input_panel_surface->shell; + struct weston_head *head; wl_list_insert(&shell->input_panel.surfaces, &input_panel_surface->link); - input_panel_surface->output = weston_output_from_resource(output_resource); + head = weston_head_from_resource(output_resource); + input_panel_surface->output = head->output; input_panel_surface->panel = 0; } diff --git a/libweston-desktop/wl-shell.c b/libweston-desktop/wl-shell.c index 8467dfb8..37720acb 100644 --- a/libweston-desktop/wl-shell.c +++ b/libweston-desktop/wl-shell.c @@ -308,7 +308,7 @@ weston_desktop_wl_shell_surface_protocol_set_fullscreen(struct wl_client *wl_cli struct weston_output *output = NULL; if (output_resource != NULL) - output = weston_output_from_resource(output_resource); + output = weston_head_from_resource(output_resource)->output; weston_desktop_wl_shell_change_state(surface, FULLSCREEN, NULL, 0, 0); weston_desktop_api_fullscreen_requested(surface->desktop, dsurface, diff --git a/libweston-desktop/xdg-shell-v6.c b/libweston-desktop/xdg-shell-v6.c index 8fa01a32..ccdd1937 100644 --- a/libweston-desktop/xdg-shell-v6.c +++ b/libweston-desktop/xdg-shell-v6.c @@ -515,7 +515,7 @@ weston_desktop_xdg_toplevel_protocol_set_fullscreen(struct wl_client *wl_client, struct weston_output *output = NULL; if (output_resource != NULL) - output = weston_output_from_resource(output_resource); + output = weston_head_from_resource(output_resource)->output; weston_desktop_xdg_toplevel_ensure_added(toplevel); weston_desktop_api_fullscreen_requested(toplevel->base.desktop, dsurface, diff --git a/libweston/compositor.c b/libweston/compositor.c index 6f869327..81fb5aff 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -4330,7 +4330,7 @@ bind_output(struct wl_client *client, } wl_list_insert(&head->resource_list, wl_resource_get_link(resource)); - wl_resource_set_implementation(resource, &output_interface, output, + wl_resource_set_implementation(resource, &output_interface, head, unbind_resource); assert(output); @@ -4364,8 +4364,8 @@ bind_output(struct wl_client *client, * \return The backing object (user data) of a wl_resource representing a * wl_output protocol object. */ -WL_EXPORT struct weston_output * -weston_output_from_resource(struct wl_resource *resource) +WL_EXPORT struct weston_head * +weston_head_from_resource(struct wl_resource *resource) { assert(wl_resource_instance_of(resource, &wl_output_interface, &output_interface)); diff --git a/libweston/compositor.h b/libweston/compositor.h index 129e7541..194aa748 100644 --- a/libweston/compositor.h +++ b/libweston/compositor.h @@ -1995,8 +1995,8 @@ weston_output_disable(struct weston_output *output); void weston_pending_output_coldplug(struct weston_compositor *compositor); -struct weston_output * -weston_output_from_resource(struct wl_resource *resource); +struct weston_head * +weston_head_from_resource(struct wl_resource *resource); #ifdef __cplusplus } diff --git a/tests/weston-test.c b/tests/weston-test.c index 9a2fd286..73409cac 100644 --- a/tests/weston-test.c +++ b/tests/weston-test.c @@ -530,7 +530,7 @@ capture_screenshot(struct wl_client *client, struct wl_resource *buffer_resource) { struct weston_output *output = - weston_output_from_resource(output_resource); + weston_head_from_resource(output_resource)->output; struct weston_buffer *buffer = weston_buffer_from_resource(buffer_resource);