mirror of
https://github.com/swaywm/sway.git
synced 2024-11-14 14:34:07 +01:00
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
(cherry picked from commit 1a6471be17
)
This commit is contained in:
parent
ec1c8143b0
commit
0a70675d9c
@ -464,6 +464,9 @@ static void view_subsurface_create(struct sway_view *view,
|
|||||||
static void view_init_subsurfaces(struct sway_view *view,
|
static void view_init_subsurfaces(struct sway_view *view,
|
||||||
struct wlr_surface *surface);
|
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,
|
static void view_handle_surface_new_subsurface(struct wl_listener *listener,
|
||||||
void *data) {
|
void *data) {
|
||||||
struct sway_view *view =
|
struct sway_view *view =
|
||||||
@ -957,6 +960,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,
|
static void view_child_handle_surface_map(struct wl_listener *listener,
|
||||||
void *data) {
|
void *data) {
|
||||||
struct sway_view_child *child =
|
struct sway_view_child *child =
|
||||||
@ -1012,7 +1023,7 @@ void view_child_init(struct sway_view_child *child,
|
|||||||
wlr_surface_send_enter(child->surface, workspace->output->wlr_output);
|
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) {
|
void view_child_destroy(struct sway_view_child *child) {
|
||||||
|
Loading…
Reference in New Issue
Block a user