screenshooter: stop using frame_signal void *data parameter to get weston_output
authorLeandro Ribeiro <leandrohr@riseup.net>
Wed, 27 Nov 2019 15:43:01 +0000 (12:43 -0300)
committerLeandro Ribeiro <leandrohr@riseup.net>
Wed, 27 Nov 2019 16:46:51 +0000 (13:46 -0300)
Instead of getting weston_output from the frame_signal argument 'void *data',
add weston_output in the private data struct of the users that are listening
to frame_signal. With this change we are able to pass previous_damage as the
data argument.

Signed-off-by: Leandro Ribeiro <leandrohr@riseup.net>
libweston/screenshooter.c

index e741d48f594a4af789fc4fda21f22a5916783540..3b161c615d7320f54a7995bd99fa27af9933d426 100644 (file)
@@ -46,6 +46,7 @@
 struct screenshooter_frame_listener {
        struct wl_listener listener;
        struct weston_buffer *buffer;
+       struct weston_output *output;
        weston_screenshooter_done_func_t done;
        void *data;
 };
@@ -119,7 +120,7 @@ screenshooter_frame_notify(struct wl_listener *listener, void *data)
        struct screenshooter_frame_listener *l =
                container_of(listener,
                             struct screenshooter_frame_listener, listener);
-       struct weston_output *output = data;
+       struct weston_output *output = l->output;
        struct weston_compositor *compositor = output->compositor;
        int32_t stride;
        uint8_t *pixels, *d, *s;
@@ -202,6 +203,7 @@ weston_screenshooter_shoot(struct weston_output *output,
        }
 
        l->buffer = buffer;
+       l->output = output;
        l->done = done;
        l->data = data;
        l->listener.notify = screenshooter_frame_notify;
@@ -261,7 +263,7 @@ weston_recorder_frame_notify(struct wl_listener *listener, void *data)
 {
        struct weston_recorder *recorder =
                container_of(listener, struct weston_recorder, frame_listener);
-       struct weston_output *output = data;
+       struct weston_output *output = recorder->output;
        struct weston_compositor *compositor = output->compositor;
        uint32_t msecs = timespec_to_msec(&output->frame_time);
        pixman_box32_t *r;