aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/wlr/types/wlr_compositor.h7
-rw-r--r--types/wlr_subcompositor.c4
2 files changed, 8 insertions, 3 deletions
diff --git a/include/wlr/types/wlr_compositor.h b/include/wlr/types/wlr_compositor.h
index 322e9ed2..26530951 100644
--- a/include/wlr/types/wlr_compositor.h
+++ b/include/wlr/types/wlr_compositor.h
@@ -190,7 +190,12 @@ struct wlr_surface {
*/
struct wl_signal unmap;
- struct wl_signal new_subsurface;
+ /**
+ * Note: unlike other new_* signals, new_subsurface is emitted when
+ * the subsurface is added to the parent surface's current state,
+ * not when the object is created.
+ */
+ struct wl_signal new_subsurface; // struct wlr_subsurface
struct wl_signal destroy;
} events;
diff --git a/types/wlr_subcompositor.c b/types/wlr_subcompositor.c
index f20d8042..c66d6f1d 100644
--- a/types/wlr_subcompositor.c
+++ b/types/wlr_subcompositor.c
@@ -289,6 +289,8 @@ void subsurface_handle_parent_commit(struct wlr_subsurface *subsurface) {
if (!subsurface->added) {
subsurface->added = true;
+ wl_signal_emit_mutable(&subsurface->parent->events.new_subsurface,
+ subsurface);
subsurface_consider_map(subsurface);
}
}
@@ -362,8 +364,6 @@ static void subcompositor_handle_get_subsurface(struct wl_client *client,
wl_list_init(&subsurface->current.link);
wl_list_insert(parent->pending.subsurfaces_above.prev,
&subsurface->pending.link);
-
- wl_signal_emit_mutable(&subsurface->parent->events.new_subsurface, subsurface);
}
static const struct wl_subcompositor_interface subcompositor_impl = {