From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Wed, 25 May 2022 22:39:04 +0000 (+0200) Subject: Chase wlroots: wlr_scene_surface X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=163179dda17de81e1db0eb6b88a784bb4d4ee368;p=proto%2Flabwc.git Chase wlroots: wlr_scene_surface To update the wlroots subproject use meson subprojects update wlroots --- diff --git a/include/common/scene-helpers.h b/include/common/scene-helpers.h index a3aa032b..60991975 100644 --- a/include/common/scene-helpers.h +++ b/include/common/scene-helpers.h @@ -3,3 +3,4 @@ #include struct wlr_scene_rect *lab_wlr_scene_get_rect(struct wlr_scene_node *node); +struct wlr_surface *lab_wlr_surface_from_node(struct wlr_scene_node *node); diff --git a/src/common/scene-helpers.c b/src/common/scene-helpers.c index a973a691..a320b4c3 100644 --- a/src/common/scene-helpers.c +++ b/src/common/scene-helpers.c @@ -9,3 +9,19 @@ lab_wlr_scene_get_rect(struct wlr_scene_node *node) assert(node->type == WLR_SCENE_NODE_RECT); return (struct wlr_scene_rect *)node; } + +struct wlr_surface * +lab_wlr_surface_from_node(struct wlr_scene_node *node) +{ + struct wlr_scene_buffer *buffer; + struct wlr_scene_surface *scene_surface; + + if (node && node->type == WLR_SCENE_NODE_BUFFER) { + buffer = wlr_scene_buffer_from_node(node); + scene_surface = wlr_scene_surface_from_buffer(buffer); + if (scene_surface) { + return scene_surface->surface; + } + } + return NULL; +} diff --git a/src/cursor.c b/src/cursor.c index f9cbad7e..2527be9f 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -11,6 +11,7 @@ #include "resistance.h" #include "ssd.h" #include "config/mousebind.h" +#include "common/scene-helpers.h" static bool is_surface(enum ssd_part_type view_area) @@ -34,7 +35,7 @@ cursor_rebase(struct seat *seat, uint32_t time_msec, bool force) desktop_node_and_view_at(seat->server, seat->cursor->x, seat->cursor->y, &node, &sx, &sy, &view_area); if (is_surface(view_area)) { - surface = wlr_scene_surface_from_node(node)->surface; + surface = lab_wlr_surface_from_node(node); } if (surface) { @@ -218,7 +219,7 @@ process_cursor_motion(struct server *server, uint32_t time) struct wlr_surface *surface = NULL; if (is_surface(view_area)) { - surface = wlr_scene_surface_from_node(node)->surface; + surface = lab_wlr_surface_from_node(node); } /* resize handles */ @@ -711,7 +712,7 @@ cursor_button(struct wl_listener *listener, void *data) struct wlr_surface *surface = NULL; if (is_surface(view_area)) { - surface = wlr_scene_surface_from_node(node)->surface; + surface = lab_wlr_surface_from_node(node); } /* get modifiers */ diff --git a/src/debug.c b/src/debug.c index ccf51dc4..b5983bde 100644 --- a/src/debug.c +++ b/src/debug.c @@ -4,6 +4,7 @@ #include "buffer.h" #include "labwc.h" #include "node.h" +#include "common/scene-helpers.h" #define HEADER_CHARS "------------------------------" @@ -13,18 +14,19 @@ #define LEFT_COL_SPACE 35 static const char * -get_node_type(enum wlr_scene_node_type type) +get_node_type(struct wlr_scene_node *node) { - switch (type) { + switch (node->type) { case WLR_SCENE_NODE_ROOT: return "root"; case WLR_SCENE_NODE_TREE: return "tree"; - case WLR_SCENE_NODE_SURFACE: - return "surface"; case WLR_SCENE_NODE_RECT: return "rect"; case WLR_SCENE_NODE_BUFFER: + if (lab_wlr_surface_from_node(node)) { + return "surface"; + } return "buffer"; } return "error"; @@ -123,7 +125,7 @@ get_special(struct server *server, struct wlr_scene_node *node, if (view_part) { return view_part; } - return get_node_type(node->type); + return get_node_type(node); } struct pad { diff --git a/src/desktop.c b/src/desktop.c index 9169c1df..a180c2cc 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -5,6 +5,7 @@ #include "layers.h" #include "node.h" #include "ssd.h" +#include "common/scene-helpers.h" static void move_to_front(struct view *view) @@ -270,10 +271,9 @@ desktop_node_and_view_at(struct server *server, double lx, double ly, *view_area = LAB_SSD_ROOT; return NULL; } - if (node->type == WLR_SCENE_NODE_SURFACE) { - struct wlr_surface *surface = - wlr_scene_surface_from_node(node)->surface; - if (wlr_surface_is_layer_surface(surface)) { + if (node->type == WLR_SCENE_NODE_BUFFER) { + struct wlr_surface *surface = lab_wlr_surface_from_node(node); + if (surface && wlr_surface_is_layer_surface(surface)) { *view_area = LAB_SSD_LAYER_SURFACE; return NULL; } diff --git a/src/ssd/ssd.c b/src/ssd/ssd.c index a9ae72fc..f9ac904e 100644 --- a/src/ssd/ssd.c +++ b/src/ssd/ssd.c @@ -12,6 +12,7 @@ #include "labwc.h" #include "theme.h" #include "ssd.h" +#include "common/scene-helpers.h" struct border ssd_thickness(struct view *view) @@ -53,7 +54,8 @@ ssd_get_part_type(struct view *view, struct wlr_scene_node *node) { if (!node) { return LAB_SSD_NONE; - } else if (node->type == WLR_SCENE_NODE_SURFACE) { + } else if (node->type == WLR_SCENE_NODE_BUFFER + && lab_wlr_surface_from_node(node)) { return LAB_SSD_CLIENT; } else if (!view->ssd.tree) { return LAB_SSD_NONE; diff --git a/src/touch.c b/src/touch.c index a6296acd..5fc16575 100644 --- a/src/touch.c +++ b/src/touch.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only #include #include "labwc.h" +#include "common/scene-helpers.h" static struct wlr_surface* touch_get_coords(struct seat *seat, struct wlr_touch *touch, double x, double y, @@ -15,13 +16,7 @@ touch_get_coords(struct seat *seat, struct wlr_touch *touch, double x, double y, wlr_scene_node_at(&seat->server->scene->node, lx, ly, sx, sy); /* Find the surface and return it if it accepts touch events. */ - struct wlr_surface *surface = NULL; - - if (node && node->type == WLR_SCENE_NODE_SURFACE) { - struct wlr_scene_surface *scene_surface = - wlr_scene_surface_from_node(node); - surface = scene_surface->surface; - } + struct wlr_surface *surface = lab_wlr_surface_from_node(node); if (surface && !wlr_surface_accepts_touch(seat->seat, surface)) { surface = NULL; diff --git a/src/xwayland-unmanaged.c b/src/xwayland-unmanaged.c index 917b1313..2c1ac992 100644 --- a/src/xwayland-unmanaged.c +++ b/src/xwayland-unmanaged.c @@ -69,7 +69,7 @@ unmanaged_handle_map(struct wl_listener *listener, void *data) parent = &view->scene_tree->node; } /* node will be destroyed automatically once surface is destroyed */ - node = &wlr_scene_surface_create(parent, xsurface->surface)->node; + node = &wlr_scene_surface_create(parent, xsurface->surface)->buffer->node; wlr_scene_node_set_position(node, lx, ly); } diff --git a/subprojects/wlroots.wrap b/subprojects/wlroots.wrap index 5ddce691..c8987042 100644 --- a/subprojects/wlroots.wrap +++ b/subprojects/wlroots.wrap @@ -1,6 +1,6 @@ [wrap-git] url = https://gitlab.freedesktop.org/wlroots/wlroots.git -revision = 8fe3aa29da56be16faa73aca947647bd60cd4a94 +revision = 1cb6b2cf673a5b580d7ad79ce2b37c14b14b0268 [provide] dependency_names = wlroots