From 971089b3d92803e29472b36fc6039b625546755a Mon Sep 17 00:00:00 2001 From: lkn Date: Sun, 7 Jun 2026 13:45:50 +0200 Subject: [PATCH] wl_view_scene_node_set_enabled: also handle WINGs client toplevels (popups) The function only searched for wl_frame_buf entries to enable/disable their scene nodes. WINGs client popup menus have their own xdg_toplevel surface with a scene_node but no wl_frame_buf. On unmap, the scene node was never disabled, so the popup content remained rendered underneath other windows. Fix: fall through to wl_find_view_by_id when no frame_buf is found, and operate on the wl_toplevel_view->scene_node instead. --- src/backend/wayland/wl_client.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/backend/wayland/wl_client.c b/src/backend/wayland/wl_client.c index fa9eaca..0a75a2b 100644 --- a/src/backend/wayland/wl_client.c +++ b/src/backend/wayland/wl_client.c @@ -320,8 +320,15 @@ void wl_view_scene_node_set_enabled(unsigned long id, int enabled) { struct wl_frame_buf *fb = frame_buf_find((WNativeWindow)id); - if (fb && fb->scene_buf) + if (fb && fb->scene_buf) { wlr_scene_node_set_enabled(&fb->scene_buf->node, !!enabled); + return; + } + /* Also handle WINGs client toplevels (popup menus) that have + * their own xdg_surface with a scene_node but no wl_frame_buf. */ + struct wl_toplevel_view *v = wl_find_view_by_id((WNativeWindow)id); + if (v && v->scene_node) + wlr_scene_node_set_enabled(&v->scene_node->node, !!enabled); }