aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/wlr/types/wlr_compositor.h2
-rw-r--r--include/wlr/types/wlr_surface.h5
-rw-r--r--types/wlr_compositor.c4
-rw-r--r--types/wlr_surface.c13
-rw-r--r--xwayland/xwm.c2
5 files changed, 16 insertions, 10 deletions
diff --git a/include/wlr/types/wlr_compositor.h b/include/wlr/types/wlr_compositor.h
index ceeb64ca..8481c590 100644
--- a/include/wlr/types/wlr_compositor.h
+++ b/include/wlr/types/wlr_compositor.h
@@ -13,7 +13,7 @@ struct wlr_compositor {
struct wl_listener display_destroy;
struct {
- struct wl_signal create_surface;
+ struct wl_signal new_surface;
} events;
};
diff --git a/include/wlr/types/wlr_surface.h b/include/wlr/types/wlr_surface.h
index 9f88d044..50316abc 100644
--- a/include/wlr/types/wlr_surface.h
+++ b/include/wlr/types/wlr_surface.h
@@ -56,6 +56,10 @@ struct wlr_subsurface {
struct wl_list parent_pending_link;
struct wl_listener parent_destroy_listener;
+
+ struct {
+ struct wl_signal destroy;
+ } events;
};
struct wlr_surface {
@@ -70,6 +74,7 @@ struct wlr_surface {
struct {
struct wl_signal commit;
+ struct wl_signal new_subsurface;
struct wl_signal destroy;
} events;
diff --git a/types/wlr_compositor.c b/types/wlr_compositor.c
index cf8c3f8f..a4bd7a16 100644
--- a/types/wlr_compositor.c
+++ b/types/wlr_compositor.c
@@ -35,7 +35,7 @@ static void wl_compositor_create_surface(struct wl_client *client,
wl_list_insert(&compositor->surfaces,
wl_resource_get_link(surface_resource));
- wl_signal_emit(&compositor->events.create_surface, surface);
+ wl_signal_emit(&compositor->events.new_surface, surface);
}
static void wl_compositor_create_region(struct wl_client *client,
@@ -185,7 +185,7 @@ struct wlr_compositor *wlr_compositor_create(struct wl_display *display,
wl_list_init(&compositor->wl_resources);
wl_list_init(&compositor->surfaces);
- wl_signal_init(&compositor->events.create_surface);
+ wl_signal_init(&compositor->events.new_surface);
compositor->display_destroy.notify = handle_display_destroy;
wl_display_add_destroy_listener(display, &compositor->display_destroy);
diff --git a/types/wlr_surface.c b/types/wlr_surface.c
index 58413818..29cdd1a0 100644
--- a/types/wlr_surface.c
+++ b/types/wlr_surface.c
@@ -424,7 +424,7 @@ static void wlr_surface_commit_pending(struct wlr_surface *surface) {
// commit subsurface order
struct wlr_subsurface *subsurface;
wl_list_for_each_reverse(subsurface, &surface->subsurface_pending_list,
- parent_pending_link) {
+ parent_pending_link) {
wl_list_remove(&subsurface->parent_link);
wl_list_insert(&surface->subsurface_list, &subsurface->parent_link);
@@ -468,7 +468,6 @@ static void wlr_subsurface_parent_commit(struct wlr_subsurface *subsurface,
bool synchronized) {
struct wlr_surface *surface = subsurface->surface;
if (synchronized || subsurface->synchronized) {
-
if (subsurface->has_cache) {
wlr_surface_move_state(surface, subsurface->cached, surface->pending);
wlr_surface_commit_pending(surface);
@@ -604,6 +603,8 @@ static void wlr_surface_state_destroy(struct wlr_surface_state *state) {
}
void wlr_subsurface_destroy(struct wlr_subsurface *subsurface) {
+ wl_signal_emit(&subsurface->events.destroy, subsurface);
+
wlr_surface_state_destroy(subsurface->cached);
if (subsurface->parent) {
@@ -651,6 +652,7 @@ struct wlr_surface *wlr_surface_create(struct wl_resource *res,
wl_signal_init(&surface->events.commit);
wl_signal_init(&surface->events.destroy);
+ wl_signal_init(&surface->events.new_subsurface);
wl_list_init(&surface->subsurface_list);
wl_list_init(&surface->subsurface_pending_list);
wl_resource_set_implementation(res, &surface_interface,
@@ -740,10 +742,6 @@ static void subsurface_place_above(struct wl_client *client,
struct wl_resource *resource, struct wl_resource *sibling_resource) {
struct wlr_subsurface *subsurface = wl_resource_get_user_data(resource);
- if (!subsurface) {
- return;
- }
-
struct wlr_surface *sibling_surface =
wl_resource_get_user_data(sibling_resource);
struct wlr_subsurface *sibling =
@@ -849,6 +847,7 @@ void wlr_surface_make_subsurface(struct wlr_surface *surface,
}
subsurface->synchronized = true;
subsurface->surface = surface;
+ wl_signal_init(&subsurface->events.destroy);
// link parent
subsurface->parent = parent;
@@ -874,6 +873,8 @@ void wlr_surface_make_subsurface(struct wlr_surface *surface,
subsurface_resource_destroy);
surface->subsurface = subsurface;
+
+ wl_signal_emit(&parent->events.new_subsurface, subsurface);
}
diff --git a/xwayland/xwm.c b/xwayland/xwm.c
index dc349ab2..3bbaecfb 100644
--- a/xwayland/xwm.c
+++ b/xwayland/xwm.c
@@ -1406,7 +1406,7 @@ struct wlr_xwm *xwm_create(struct wlr_xwayland *wlr_xwayland) {
xwm_selection_init(xwm);
xwm->compositor_surface_create.notify = handle_compositor_surface_create;
- wl_signal_add(&wlr_xwayland->compositor->events.create_surface,
+ wl_signal_add(&wlr_xwayland->compositor->events.new_surface,
&xwm->compositor_surface_create);
xwm_create_wm_window(xwm);