diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/compositor.h | 4 | ||||
-rw-r--r-- | examples/compositor/main.c | 2 | ||||
-rw-r--r-- | examples/compositor/wl_compositor.c | 11 | ||||
-rw-r--r-- | examples/rotation.c | 2 | ||||
-rw-r--r-- | examples/tablet.c | 3 | ||||
-rw-r--r-- | examples/touch.c | 2 |
6 files changed, 14 insertions, 10 deletions
diff --git a/examples/compositor.h b/examples/compositor.h index 4649a8d3..2847808f 100644 --- a/examples/compositor.h +++ b/examples/compositor.h @@ -14,6 +14,10 @@ struct wl_compositor_state { void wl_compositor_init(struct wl_display *display, struct wl_compositor_state *state, struct wlr_renderer *renderer); +struct wlr_surface; +void wl_compositor_surface_destroyed(struct wl_compositor_state *compositor, + struct wlr_surface *surface); + struct wl_shell_state { struct wl_global *wl_global; struct wl_list wl_resources; diff --git a/examples/compositor/main.c b/examples/compositor/main.c index fd592600..f115d267 100644 --- a/examples/compositor/main.c +++ b/examples/compositor/main.c @@ -68,7 +68,7 @@ int main() { }; compositor_init(&compositor); - state.renderer = wlr_gles2_renderer_init(); + state.renderer = wlr_gles2_renderer_init(compositor.backend); wl_display_init_shm(compositor.display); wl_compositor_init(compositor.display, &state.compositor, state.renderer); wl_shell_init(compositor.display, &state.shell); diff --git a/examples/compositor/wl_compositor.c b/examples/compositor/wl_compositor.c index e5b1120e..e25dddac 100644 --- a/examples/compositor/wl_compositor.c +++ b/examples/compositor/wl_compositor.c @@ -7,9 +7,8 @@ #include "compositor.h" static void destroy_surface_listener(struct wl_listener *listener, void *data) { - struct wl_compositor_state *state; - struct wlr_surface *surface = data; - state = wl_container_of(listener, state, destroy_surface_listener); + struct wlr_surface *surface = wl_resource_get_user_data(data); + struct wl_compositor_state *state = surface->compositor_data; struct wl_resource *res = NULL; wl_list_for_each(res, &state->surfaces, link) { @@ -26,8 +25,11 @@ static void wl_compositor_create_surface(struct wl_client *client, struct wl_resource *surface_resource = wl_resource_create(client, &wl_surface_interface, wl_resource_get_version(resource), id); struct wlr_surface *surface = wlr_surface_create(surface_resource, state->renderer); + surface->compositor_data = state; + surface->compositor_listener.notify = &destroy_surface_listener; + wl_resource_add_destroy_listener(surface_resource, &surface->compositor_listener); + wl_list_insert(&state->surfaces, wl_resource_get_link(surface_resource)); - wl_signal_add(&surface->signals.destroy, &state->destroy_surface_listener); } static void wl_compositor_create_region(struct wl_client *client, @@ -74,7 +76,6 @@ void wl_compositor_init(struct wl_display *display, &wl_compositor_interface, 4, state, wl_compositor_bind); state->wl_global = wl_global; state->renderer = renderer; - state->destroy_surface_listener.notify = destroy_surface_listener; wl_list_init(&state->wl_resources); wl_list_init(&state->surfaces); } diff --git a/examples/rotation.c b/examples/rotation.c index 34994e04..e4c3f87f 100644 --- a/examples/rotation.c +++ b/examples/rotation.c @@ -204,7 +204,7 @@ int main(int argc, char *argv[]) { compositor.keyboard_key_cb = handle_keyboard_key; compositor_init(&compositor); - state.renderer = wlr_gles2_renderer_init(); + state.renderer = wlr_gles2_renderer_init(compositor.backend); state.cat_texture = wlr_render_texture_init(state.renderer); wlr_texture_upload_pixels(state.cat_texture, WL_SHM_FORMAT_ABGR8888, cat_tex.width, cat_tex.width, cat_tex.height, cat_tex.pixel_data); diff --git a/examples/tablet.c b/examples/tablet.c index 0be6dcb9..0651efde 100644 --- a/examples/tablet.c +++ b/examples/tablet.c @@ -152,8 +152,7 @@ int main(int argc, char *argv[]) { }; compositor_init(&compositor); - state.renderer = wlr_gles2_renderer_init(); - + state.renderer = wlr_gles2_renderer_init(compositor.backend); compositor_run(&compositor); wlr_renderer_destroy(state.renderer); diff --git a/examples/touch.c b/examples/touch.c index 76b92ad2..9dd2fe57 100644 --- a/examples/touch.c +++ b/examples/touch.c @@ -104,7 +104,7 @@ int main(int argc, char *argv[]) { }; compositor_init(&compositor); - state.renderer = wlr_gles2_renderer_init(); + state.renderer = wlr_gles2_renderer_init(compositor.backend); state.cat_texture = wlr_render_texture_init(state.renderer); wlr_texture_upload_pixels(state.cat_texture, WL_SHM_FORMAT_ARGB8888, cat_tex.width, cat_tex.width, cat_tex.height, cat_tex.pixel_data); |