Chase wlroots: wlr_scene_surface

To update the wlroots subproject use
meson subprojects update wlroots
This commit is contained in:
Consolatis 2022-05-26 00:39:04 +02:00 committed by Johan Malm
parent 3699a2a7f6
commit 163179dda1
9 changed files with 39 additions and 22 deletions

View 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;
}

View 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 */

View file

@ -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 {

View 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;
}

View 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;

View 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;

View 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);
}