From 3e7306489f8d259b2df7e793b4ff743ce3ecfa37 Mon Sep 17 00:00:00 2001 From: Alexander Orzechowski Date: Mon, 26 Aug 2024 15:46:04 -0400 Subject: [PATCH] container: Assign container scene descriptor to view aswell We have to do with for fullscreen surfaces: Fullscreen surfaces technically aren't part of their container anymore visually (so the scene doesn't have it) but we want acknowledge the container it belongs to for input reasons. This will allow us to simplify node_at_coords later. --- sway/input/cursor.c | 8 -------- sway/tree/container.c | 2 ++ sway/tree/view.c | 2 ++ 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/sway/input/cursor.c b/sway/input/cursor.c index bbd16717..f0ee2f92 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c @@ -82,14 +82,6 @@ struct sway_node *node_at_coords( struct sway_container *con = scene_descriptor_try_get(current, SWAY_SCENE_DESC_CONTAINER); - if (!con) { - struct sway_view *view = scene_descriptor_try_get(current, - SWAY_SCENE_DESC_VIEW); - if (view) { - con = view->container; - } - } - if (!con) { struct sway_popup_desc *popup = scene_descriptor_try_get(current, SWAY_SCENE_DESC_POPUP); diff --git a/sway/tree/container.c b/sway/tree/container.c index 46c388b3..8f160721 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -506,6 +506,8 @@ void container_destroy(struct sway_container *con) { if (con->view && con->view->container == con) { con->view->container = NULL; + scene_descriptor_destroy(&con->view->scene_tree->node, SWAY_SCENE_DESC_CONTAINER); + wlr_scene_node_destroy(&con->output_handler->node); if (con->view->destroying) { view_destroy(con->view); diff --git a/sway/tree/view.c b/sway/tree/view.c index d25a09c2..a287e81c 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -723,6 +723,8 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, view->surface = wlr_surface; view_populate_pid(view); view->container = container_create(view); + scene_descriptor_assign(&view->scene_tree->node, + SWAY_SCENE_DESC_CONTAINER, view->container); if (view->ctx == NULL) { struct launcher_ctx *ctx = launcher_ctx_find_pid(view->pid);