diff options
author | Kenny Levinsen <kl@kl.wtf> | 2021-02-19 18:33:20 +0100 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2021-02-23 00:17:32 +0100 |
commit | 1a6471be172fc2da75bbc5b7e6e3b3c99dbafc51 (patch) | |
tree | e0df8a62fe2034f6e54fba645d897d94ef04b9e4 | |
parent | 79e43b19d795d68a3916a19d9afadc4ccbb7d4db (diff) | |
download | sway-1a6471be172fc2da75bbc5b7e6e3b3c99dbafc51.tar.xz |
view: Set parent for view_child subsurfaces on init
view_child_init was calling view_init_subsurfaces, which did not set the
parent attribute for the subchildren. This lead to the subchildren
acting as standalone children. If the parent was an xdg_popup, this
would make the subchild unaware of the popup position.
Introduce view_child_init_subsurfaces for view_child_init to use
instead.
Closes: https://github.com/swaywm/sway/issues/6038
-rw-r--r-- | sway/tree/view.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c index 978271c2..8a2a8178 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -465,6 +465,9 @@ static void view_subsurface_create(struct sway_view *view, static void view_init_subsurfaces(struct sway_view *view, struct wlr_surface *surface); +static void view_child_init_subsurfaces(struct sway_view_child *view_child, + struct wlr_surface *surface); + static void view_handle_surface_new_subsurface(struct wl_listener *listener, void *data) { struct sway_view *view = @@ -1033,6 +1036,14 @@ static void view_init_subsurfaces(struct sway_view *view, } } +static void view_child_init_subsurfaces(struct sway_view_child *view_child, + struct wlr_surface *surface) { + struct wlr_subsurface *subsurface; + wl_list_for_each(subsurface, &surface->subsurfaces, parent_link) { + view_child_subsurface_create(view_child, subsurface); + } +} + static void view_child_handle_surface_map(struct wl_listener *listener, void *data) { struct sway_view_child *child = @@ -1088,7 +1099,7 @@ void view_child_init(struct sway_view_child *child, wlr_surface_send_enter(child->surface, workspace->output->wlr_output); } - view_init_subsurfaces(child->view, surface); + view_child_init_subsurfaces(child, surface); } void view_child_destroy(struct sway_view_child *child) { |