struct ds_xdg_surface_v6 *base;
struct ds_xdg_toplevel_v6 *parent;
- struct wl_listener parent_unmap;
struct ds_xdg_toplevel_v6_state current, pending;
struct ds_xdg_toplevel_v6_configure scheduled;
reset_xdg_toplevel_v6(struct ds_xdg_toplevel_v6 *toplevel)
{
if (toplevel->parent) {
- wl_list_remove(&toplevel->parent_unmap.link);
toplevel->parent = NULL;
}
}
static void
-xdg_toplevel_v6_handle_parent_unmap(struct wl_listener *listener, void *data)
-{
- struct ds_xdg_toplevel_v6 *toplevel;
-
- toplevel = wl_container_of(listener, toplevel, parent_unmap);
- xdg_toplevel_v6_set_parent(toplevel, toplevel->parent->parent);
-}
-
-static void
xdg_toplevel_v6_set_parent(struct ds_xdg_toplevel_v6 *toplevel,
struct ds_xdg_toplevel_v6 *parent)
{
iter = iter->parent;
}
- if (toplevel->parent)
- wl_list_remove(&toplevel->parent_unmap.link);
-
- if (parent && parent->base->mapped) {
- toplevel->parent = parent;
- toplevel->parent_unmap.notify = xdg_toplevel_v6_handle_parent_unmap;
- wl_signal_add(&toplevel->parent->base->events.unmap,
- &toplevel->parent_unmap);
- }
- else {
- toplevel->parent = NULL;
- }
-
+ toplevel->parent = parent;
wl_signal_emit_mutable(&toplevel->events.set_parent, NULL);
}