mirror of
https://github.com/labwc/labwc.git
synced 2026-03-29 07:58:10 -04:00
src/xwayland-unmanaged.c: Prevent racing configure event to reposition
Fixes #469 Reported-by: @Flrian Suggested-by: @jlindgren90
This commit is contained in:
parent
32b176e05e
commit
ac5c9dae00
1 changed files with 13 additions and 4 deletions
|
|
@ -8,9 +8,10 @@ unmanaged_handle_request_configure(struct wl_listener *listener, void *data)
|
||||||
wl_container_of(listener, unmanaged, request_configure);
|
wl_container_of(listener, unmanaged, request_configure);
|
||||||
struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
|
struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
|
||||||
struct wlr_xwayland_surface_configure_event *ev = data;
|
struct wlr_xwayland_surface_configure_event *ev = data;
|
||||||
wlr_xwayland_surface_configure(xsurface, ev->x, ev->y, ev->width,
|
wlr_xwayland_surface_configure(xsurface, ev->x, ev->y, ev->width, ev->height);
|
||||||
ev->height);
|
if (unmanaged->node) {
|
||||||
wlr_scene_node_set_position(unmanaged->node, ev->x, ev->y);
|
wlr_scene_node_set_position(unmanaged->node, ev->x, ev->y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -19,7 +20,9 @@ unmanaged_handle_set_geometry(struct wl_listener *listener, void *data)
|
||||||
struct xwayland_unmanaged *unmanaged =
|
struct xwayland_unmanaged *unmanaged =
|
||||||
wl_container_of(listener, unmanaged, set_geometry);
|
wl_container_of(listener, unmanaged, set_geometry);
|
||||||
struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
|
struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
|
||||||
wlr_scene_node_set_position(unmanaged->node, xsurface->x, xsurface->y);
|
if (unmanaged->node) {
|
||||||
|
wlr_scene_node_set_position(unmanaged->node, xsurface->x, xsurface->y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -55,6 +58,12 @@ unmanaged_handle_unmap(struct wl_listener *listener, void *data)
|
||||||
wl_list_remove(&unmanaged->link);
|
wl_list_remove(&unmanaged->link);
|
||||||
wl_list_remove(&unmanaged->set_geometry.link);
|
wl_list_remove(&unmanaged->set_geometry.link);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mark the node as gone so a racing configure event
|
||||||
|
* won't try to reposition the node while unmapped.
|
||||||
|
*/
|
||||||
|
unmanaged->node = NULL;
|
||||||
|
|
||||||
struct seat *seat = &unmanaged->server->seat;
|
struct seat *seat = &unmanaged->server->seat;
|
||||||
if (seat->seat->keyboard_state.focused_surface == xsurface->surface) {
|
if (seat->seat->keyboard_state.focused_surface == xsurface->surface) {
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue