struct xwayland_unmanaged *unmanaged =
wl_container_of(listener, unmanaged, dissociate);
+ if (!unmanaged->mappable.connected) {
+ /*
+ * In some cases wlroots fails to emit the associate event
+ * due to an early return in xwayland_surface_associate().
+ * This is arguably a wlroots bug, but nevertheless it
+ * should not bring down labwc.
+ *
+ * TODO: Potentially remove when starting to track
+ * wlroots 0.18 and it got fixed upstream.
+ */
+ wlr_log(WLR_ERROR, "dissociate received before associate");
+ return;
+ }
mappable_disconnect(&unmanaged->mappable);
}
CONNECT_SIGNAL(xsurface, unmanaged, request_configure);
CONNECT_SIGNAL(xsurface, unmanaged, set_override_redirect);
+ if (xsurface->surface) {
+ handle_associate(&unmanaged->associate, NULL);
+ }
if (mapped) {
handle_map(&unmanaged->mappable.map, NULL);
}
struct xwayland_view *xwayland_view =
wl_container_of(listener, xwayland_view, dissociate);
+ if (!xwayland_view->base.mappable.connected) {
+ /*
+ * In some cases wlroots fails to emit the associate event
+ * due to an early return in xwayland_surface_associate().
+ * This is arguably a wlroots bug, but nevertheless it
+ * should not bring down labwc.
+ *
+ * TODO: Potentially remove when starting to track
+ * wlroots 0.18 and it got fixed upstream.
+ */
+ wlr_log(WLR_ERROR, "dissociate received before associate");
+ return;
+ }
mappable_disconnect(&xwayland_view->base.mappable);
}
wl_list_insert(&view->server->views, &view->link);
+ if (xsurface->surface) {
+ handle_associate(&xwayland_view->associate, NULL);
+ }
if (mapped) {
xwayland_view_map(view);
}