aboutsummaryrefslogtreecommitdiff
path: root/xwayland/xwm.c
diff options
context:
space:
mode:
Diffstat (limited to 'xwayland/xwm.c')
-rw-r--r--xwayland/xwm.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/xwayland/xwm.c b/xwayland/xwm.c
index 53aac6a4..dc349ab2 100644
--- a/xwayland/xwm.c
+++ b/xwayland/xwm.c
@@ -96,6 +96,8 @@ static struct wlr_xwayland_surface *wlr_xwayland_surface_create(
surface->height = height;
surface->override_redirect = override_redirect;
wl_list_insert(&xwm->surfaces, &surface->link);
+ wl_list_init(&surface->children);
+ wl_list_init(&surface->parent_link);
wl_signal_init(&surface->events.destroy);
wl_signal_init(&surface->events.request_configure);
wl_signal_init(&surface->events.request_move);
@@ -215,6 +217,7 @@ static void wlr_xwayland_surface_destroy(
}
wl_list_remove(&xsurface->link);
+ wl_list_remove(&xsurface->parent_link);
if (xsurface->surface_id) {
wl_list_remove(&xsurface->unpaired_link);
@@ -305,6 +308,13 @@ static void read_surface_parent(struct wlr_xwm *xwm,
xsurface->parent = NULL;
}
+ wl_list_remove(&xsurface->parent_link);
+ if (xsurface->parent != NULL) {
+ wl_list_insert(&xsurface->parent->children, &xsurface->parent_link);
+ } else {
+ wl_list_init(&xsurface->parent_link);
+ }
+
wlr_log(L_DEBUG, "XCB_ATOM_WM_TRANSIENT_FOR: %p", xid);
wl_signal_emit(&xsurface->events.set_parent, xsurface);
}