diff --git a/include/wlr/types/wlr_compositor.h b/include/wlr/types/wlr_compositor.h index 1b2f890f..d8a2506f 100644 --- a/include/wlr/types/wlr_compositor.h +++ b/include/wlr/types/wlr_compositor.h @@ -9,6 +9,8 @@ struct wlr_compositor { struct wlr_renderer *renderer; struct wl_list surfaces; struct wl_listener destroy_surface_listener; + + struct wl_signal create_surface_signal; }; void wlr_compositor_destroy(struct wlr_compositor *wlr_compositor); diff --git a/types/wlr_compositor.c b/types/wlr_compositor.c index c153f525..6b6312d1 100644 --- a/types/wlr_compositor.c +++ b/types/wlr_compositor.c @@ -22,6 +22,7 @@ static void wl_compositor_create_surface(struct wl_client *client, wl_resource_add_destroy_listener(surface_resource, &surface->compositor_listener); wl_list_insert(&compositor->surfaces, wl_resource_get_link(surface_resource)); + wl_signal_emit(&compositor->create_surface_signal, surface); } static void wl_compositor_create_region(struct wl_client *client, @@ -80,5 +81,6 @@ struct wlr_compositor *wlr_compositor_create(struct wl_display *display, compositor->renderer = renderer; wl_list_init(&compositor->wl_resources); wl_list_init(&compositor->surfaces); + wl_signal_init(&compositor->create_surface_signal); return compositor; } diff --git a/xwayland/xwm.c b/xwayland/xwm.c index d39527c5..3b1d3b7b 100644 --- a/xwayland/xwm.c +++ b/xwayland/xwm.c @@ -62,8 +62,8 @@ struct wlr_xwm *xwm_create(struct wlr_xwayland *wlr_xwayland) { xwm->surface_listener.notify = create_surface_handler; - //wl_signal_add(&wlr_xwayland->compositor->create_surface_signal, - // &xwm->surface_listener); + wl_signal_add(&wlr_xwayland->compositor->create_surface_signal, + &xwm->surface_listener); return xwm; }