aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/compositor.h4
-rw-r--r--examples/compositor/main.c2
-rw-r--r--examples/compositor/wl_compositor.c11
-rw-r--r--examples/rotation.c2
-rw-r--r--examples/tablet.c3
-rw-r--r--examples/touch.c2
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);