]> git.mdlowis.com Git - proto/labwc.git/commitdiff
Chase wlroots: wlr_scene_surface
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Wed, 25 May 2022 22:39:04 +0000 (00:39 +0200)
committerJohan Malm <johanmalm@users.noreply.github.com>
Thu, 26 May 2022 05:48:00 +0000 (06:48 +0100)
To update the wlroots subproject use
meson subprojects update wlroots

include/common/scene-helpers.h
src/common/scene-helpers.c
src/cursor.c
src/debug.c
src/desktop.c
src/ssd/ssd.c
src/touch.c
src/xwayland-unmanaged.c
subprojects/wlroots.wrap

index a3aa032b35d0368d708c4a8e736efa37d3907a71..609919754b16d8db59c5f972183f4eed18276e27 100644 (file)
@@ -3,3 +3,4 @@
 #include <wlr/types/wlr_scene.h>
 
 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);
index a973a69141b1dd52af3379b1fd95c658ec84c03f..a320b4c32e3ae6c82c9bc2584595a241424e8887 100644 (file)
@@ -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;
+}
index f9cbad7eed744065b810cb6b52a7bbe1ce22d2d6..2527be9f9a387ac6de94fc9118f108642082974a 100644 (file)
@@ -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 */
index ccf51dc4232e8908d814e166eeb22579df559869..b5983bdec6f17c4d203ae565e4268f0a5fdb97a6 100644 (file)
@@ -4,6 +4,7 @@
 #include "buffer.h"
 #include "labwc.h"
 #include "node.h"
+#include "common/scene-helpers.h"
 
 #define HEADER_CHARS "------------------------------"
 
 #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 {
index 9169c1dfdfbe36c6a2b774ddfd7f6fefb987dc36..a180c2cc0e6f8d150a0e6493d499b009807c3313 100644 (file)
@@ -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;
                }
index a9ae72fcc1db17dddc91dc6be796e12614625acd..f9ac904ea3af5a642a63f0d09fc0920d9272fbce 100644 (file)
@@ -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;
index a6296acd8028717f8f3d333d17c47ed51f981d5c..5fc165755707c9f9ad39392d06d4c58ba52e1444 100644 (file)
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 #include <wlr/types/wlr_touch.h>
 #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;
index 917b1313c1a5805e48d56aa66d3f2d8d08a851b1..2c1ac9928ef345548dd9d4e8fdcb51ee0335b183 100644 (file)
@@ -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);
 }
 
index 5ddce6910764bb1a01c5c92671f5c40bf2fe7c9c..c89870424f1109a9c0376bbca84a269e1d0baa4b 100644 (file)
@@ -1,6 +1,6 @@
 [wrap-git]
 url = https://gitlab.freedesktop.org/wlroots/wlroots.git
-revision = 8fe3aa29da56be16faa73aca947647bd60cd4a94
+revision = 1cb6b2cf673a5b580d7ad79ce2b37c14b14b0268
 
 [provide]
 dependency_names = wlroots