libweston: introduce weston_output_from_resource()
authorPekka Paalanen <pekka.paalanen@collabora.co.uk>
Mon, 27 Mar 2017 12:14:32 +0000 (15:14 +0300)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Tue, 25 Jul 2017 13:08:48 +0000 (16:08 +0300)
This is a simple wrapper for casting the user data of a wl_resource into
a struct weston_output pointer. Using the wrapper clearly marks all the
places where a wl_output protocol object is used.

Replace ALL wl_output related calls to wl_resource_get_user_data() with
a call to weston_output_from_resource().

v2: add type assert in weston_output_from_resource().

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Armin Krezović <krezovic.armin@gmail.com>
compositor/weston-screenshooter.c
desktop-shell/input-panel.c
desktop-shell/shell.c
fullscreen-shell/fullscreen-shell.c
ivi-shell/input-panel-ivi.c
libweston-desktop/wl-shell.c
libweston-desktop/xdg-shell-v5.c
libweston-desktop/xdg-shell-v6.c
libweston/compositor.c
libweston/compositor.h
tests/weston-test.c

index 9999909..f874c3e 100644 (file)
@@ -66,7 +66,7 @@ screenshooter_shoot(struct wl_client *client,
                    struct wl_resource *buffer_resource)
 {
        struct weston_output *output =
-               wl_resource_get_user_data(output_resource);
+               weston_output_from_resource(output_resource);
        struct weston_buffer *buffer =
                weston_buffer_from_resource(buffer_resource);
 
index 40a4092..e6b1541 100644 (file)
@@ -274,7 +274,7 @@ input_panel_surface_set_toplevel(struct wl_client *client,
        wl_list_insert(&shell->input_panel.surfaces,
                       &input_panel_surface->link);
 
-       input_panel_surface->output = wl_resource_get_user_data(output_resource);
+       input_panel_surface->output = weston_output_from_resource(output_resource);
        input_panel_surface->panel = 0;
 }
 
index f1577c1..832a7b7 100644 (file)
@@ -2941,7 +2941,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 = wl_resource_get_user_data(output_resource);
+       surface->output = weston_output_from_resource(output_resource);
        view->output = surface->output;
        weston_desktop_shell_send_configure(resource, 0,
                                            surface_resource,
@@ -3026,7 +3026,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 = wl_resource_get_user_data(output_resource);
+       surface->output = weston_output_from_resource(output_resource);
        view->output = surface->output;
        weston_desktop_shell_send_configure(resource, 0,
                                            surface_resource,
index 7368cb4..6f4565a 100644 (file)
@@ -769,7 +769,7 @@ fullscreen_shell_present_surface(struct wl_client *client,
        }
 
        if (output_res) {
-               output = wl_resource_get_user_data(output_res);
+               output = weston_output_from_resource(output_res);
                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 = wl_resource_get_user_data(output_res);
+       output = weston_output_from_resource(output_res);
        fsout = fs_output_for_output(output);
 
        if (surface_res == NULL) {
index 57d1cb2..0008a52 100644 (file)
@@ -275,7 +275,7 @@ input_panel_surface_set_toplevel(struct wl_client *client,
        wl_list_insert(&shell->input_panel.surfaces,
                       &input_panel_surface->link);
 
-       input_panel_surface->output = wl_resource_get_user_data(output_resource);
+       input_panel_surface->output = weston_output_from_resource(output_resource);
        input_panel_surface->panel = 0;
 }
 
index 399139c..66553f4 100644 (file)
@@ -302,7 +302,7 @@ weston_desktop_wl_shell_surface_protocol_set_fullscreen(struct wl_client *wl_cli
        struct weston_output *output = NULL;
 
        if (output_resource != NULL)
-               output = wl_resource_get_user_data(output_resource);
+               output = weston_output_from_resource(output_resource);
 
        weston_desktop_wl_shell_change_state(surface, FULLSCREEN, NULL, 0, 0);
        weston_desktop_api_fullscreen_requested(surface->desktop, dsurface,
index c91c259..d7c49b1 100644 (file)
@@ -553,7 +553,7 @@ weston_desktop_xdg_surface_protocol_set_fullscreen(struct wl_client *wl_client,
        struct weston_output *output = NULL;
 
        if (output_resource != NULL)
-               output = wl_resource_get_user_data(output_resource);
+               output = weston_output_from_resource(output_resource);
 
        weston_desktop_xdg_surface_ensure_added(surface);
        weston_desktop_api_fullscreen_requested(surface->desktop, dsurface,
index de5d3e0..dda0bf9 100644 (file)
@@ -507,7 +507,7 @@ weston_desktop_xdg_toplevel_protocol_set_fullscreen(struct wl_client *wl_client,
        struct weston_output *output = NULL;
 
        if (output_resource != NULL)
-               output = wl_resource_get_user_data(output_resource);
+               output = weston_output_from_resource(output_resource);
 
        weston_desktop_xdg_toplevel_ensure_added(toplevel);
        weston_desktop_api_fullscreen_requested(toplevel->base.desktop, dsurface,
index 296b02e..813b663 100644 (file)
@@ -4323,6 +4323,22 @@ bind_output(struct wl_client *client,
                wl_output_send_done(resource);
 }
 
+/** Get the backing object of wl_output
+ *
+ * \param resource A wl_output protocol object.
+ * \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)
+{
+       assert(wl_resource_instance_of(resource, &wl_output_interface,
+                                      &output_interface));
+
+       return wl_resource_get_user_data(resource);
+}
+
+
 /* Move other outputs when one is resized so the space remains contiguous. */
 static void
 weston_compositor_reflow_outputs(struct weston_compositor *compositor,
index 442d046..769203a 100644 (file)
@@ -1941,6 +1941,9 @@ 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);
+
 #ifdef  __cplusplus
 }
 #endif
index 0123e99..189fcc1 100644 (file)
@@ -473,7 +473,7 @@ capture_screenshot(struct wl_client *client,
                   struct wl_resource *buffer_resource)
 {
        struct weston_output *output =
-               wl_resource_get_user_data(output_resource);
+               weston_output_from_resource(output_resource);
        struct weston_buffer *buffer =
                weston_buffer_from_resource(buffer_resource);