mirror of
https://github.com/labwc/labwc.git
synced 2026-04-07 08:21:20 -04:00
xwayland: shuffle map_request/commit events a bit
Only register map_request event when surface is associated, and only register commit event when surface is mapped. Unregister both in their matched disassociate and unmap functions. Fixes a crash launching Steam when combined with the chase/0.20 branch that does not occur on wlroots 0.19 for some reason.
This commit is contained in:
parent
fee38bceca
commit
c46f2b1f88
1 changed files with 9 additions and 4 deletions
|
|
@ -407,7 +407,6 @@ handle_destroy(struct wl_listener *listener, void *data)
|
||||||
wl_list_remove(&xwayland_view->set_strut_partial.link);
|
wl_list_remove(&xwayland_view->set_strut_partial.link);
|
||||||
wl_list_remove(&xwayland_view->set_window_type.link);
|
wl_list_remove(&xwayland_view->set_window_type.link);
|
||||||
wl_list_remove(&xwayland_view->focus_in.link);
|
wl_list_remove(&xwayland_view->focus_in.link);
|
||||||
wl_list_remove(&xwayland_view->map_request.link);
|
|
||||||
|
|
||||||
wl_list_remove(&xwayland_view->on_view.always_on_top.link);
|
wl_list_remove(&xwayland_view->on_view.always_on_top.link);
|
||||||
|
|
||||||
|
|
@ -790,17 +789,20 @@ check_natural_geometry(struct view *view)
|
||||||
static void
|
static void
|
||||||
set_surface(struct view *view, struct wlr_surface *surface)
|
set_surface(struct view *view, struct wlr_surface *surface)
|
||||||
{
|
{
|
||||||
|
struct xwayland_view *xwayland_view = xwayland_view_from_view(view);
|
||||||
if (view->surface) {
|
if (view->surface) {
|
||||||
/* Disconnect wlr_surface event listeners */
|
/* Disconnect wlr_surface event listeners */
|
||||||
mappable_disconnect(&view->mappable);
|
mappable_disconnect(&view->mappable);
|
||||||
wl_list_remove(&view->commit.link);
|
wl_list_remove(&xwayland_view->map_request.link);
|
||||||
}
|
}
|
||||||
view->surface = surface;
|
view->surface = surface;
|
||||||
if (surface) {
|
if (surface) {
|
||||||
/* Connect wlr_surface event listeners */
|
/* Connect wlr_surface event listeners */
|
||||||
|
struct wlr_xwayland_surface *xsurface =
|
||||||
|
xwayland_surface_from_view(view);
|
||||||
mappable_connect(&view->mappable, surface,
|
mappable_connect(&view->mappable, surface,
|
||||||
handle_map, handle_unmap);
|
handle_map, handle_unmap);
|
||||||
CONNECT_SIGNAL(surface, view, commit);
|
CONNECT_SIGNAL(xsurface, xwayland_view, map_request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -815,6 +817,8 @@ handle_map(struct wl_listener *listener, void *data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CONNECT_SIGNAL(view->surface, view, commit);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The map_request event may not be received when an unmanaged
|
* The map_request event may not be received when an unmanaged
|
||||||
* (override-redirect) surface becomes managed. To make sure we
|
* (override-redirect) surface becomes managed. To make sure we
|
||||||
|
|
@ -892,6 +896,8 @@ handle_unmap(struct wl_listener *listener, void *data)
|
||||||
wlr_scene_node_destroy(&view->content_tree->node);
|
wlr_scene_node_destroy(&view->content_tree->node);
|
||||||
view->content_tree = NULL;
|
view->content_tree = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wl_list_remove(&view->commit.link);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -1075,7 +1081,6 @@ xwayland_view_create(struct wlr_xwayland_surface *xsurface, bool mapped)
|
||||||
CONNECT_SIGNAL(xsurface, xwayland_view, set_strut_partial);
|
CONNECT_SIGNAL(xsurface, xwayland_view, set_strut_partial);
|
||||||
CONNECT_SIGNAL(xsurface, xwayland_view, set_window_type);
|
CONNECT_SIGNAL(xsurface, xwayland_view, set_window_type);
|
||||||
CONNECT_SIGNAL(xsurface, xwayland_view, focus_in);
|
CONNECT_SIGNAL(xsurface, xwayland_view, focus_in);
|
||||||
CONNECT_SIGNAL(xsurface, xwayland_view, map_request);
|
|
||||||
|
|
||||||
/* Events from the view itself */
|
/* Events from the view itself */
|
||||||
CONNECT_SIGNAL(view, &xwayland_view->on_view, always_on_top);
|
CONNECT_SIGNAL(view, &xwayland_view->on_view, always_on_top);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue