From b149526d037b2de4809319cacb08c62dd3954b34 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Thu, 3 Aug 2023 21:32:58 +0100 Subject: [PATCH] foreign: set parent Tested with wlroots/examples/foreign-toplevel.c Helped-by: @Consolatis --- src/xdg.c | 20 +++++++++++++++++++- src/xwayland.c | 18 +++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/xdg.c b/src/xdg.c index 93c5112f..20b87b6a 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -449,6 +449,22 @@ xdg_toplevel_view_get_string_prop(struct view *view, const char *prop) return ""; } +static void +init_foreign_toplevel(struct view *view) +{ + foreign_toplevel_handle_create(view); + struct wlr_xdg_toplevel *toplevel = xdg_toplevel_from_view(view); + if (!toplevel->parent) { + return; + } + struct wlr_xdg_surface *surface = toplevel->parent->base; + struct view *parent = surface->data; + if (!parent->toplevel.handle) { + return; + } + wlr_foreign_toplevel_handle_v1_set_parent(view->toplevel.handle, parent->toplevel.handle); +} + static void xdg_toplevel_view_map(struct view *view) { @@ -465,7 +481,9 @@ xdg_toplevel_view_map(struct view *view) if (!view->been_mapped) { struct wlr_xdg_toplevel_requested *requested = &xdg_toplevel_from_view(view)->requested; - foreign_toplevel_handle_create(view); + + init_foreign_toplevel(view); + view_set_decorations(view, has_ssd(view)); /* diff --git a/src/xwayland.c b/src/xwayland.c index 456ae659..acbbbc07 100644 --- a/src/xwayland.c +++ b/src/xwayland.c @@ -407,6 +407,22 @@ top_left_edge_boundary_check(struct view *view) view->impl->configure(view, view->current); } +static void +init_foreign_toplevel(struct view *view) +{ + foreign_toplevel_handle_create(view); + + struct wlr_xwayland_surface *surface = xwayland_surface_from_view(view); + if (!surface->parent) { + return; + } + struct view *parent = (struct view *)surface->parent->data; + if (!parent->toplevel.handle) { + return; + } + wlr_foreign_toplevel_handle_v1_set_parent(view->toplevel.handle, parent->toplevel.handle); +} + static void xwayland_view_map(struct view *view) { @@ -453,7 +469,7 @@ xwayland_view_map(struct view *view) } if (!view->toplevel.handle) { - foreign_toplevel_handle_create(view); + init_foreign_toplevel(view); } if (!view->been_mapped) {