mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
Chase wlroots: every scene_node parent is now a tree
Chases wlroots ccd0f85c2a36308e35b153c7f9653abac7659af3 wlr_scene: Only allow parenting on a wlr_scene_tree
This commit is contained in:
parent
b7c9d0e055
commit
2ed7a10779
20 changed files with 97 additions and 93 deletions
|
|
@ -26,7 +26,7 @@ struct lab_layer_surface {
|
|||
|
||||
struct lab_layer_popup {
|
||||
struct wlr_xdg_popup *wlr_popup;
|
||||
struct wlr_scene_node *scene_node;
|
||||
struct wlr_scene_tree *scene_tree;
|
||||
|
||||
/* To simplify moving popup nodes from the bottom to the top layer */
|
||||
struct wlr_box output_toplevel_sx_box;
|
||||
|
|
|
|||
|
|
@ -150,18 +150,18 @@ struct ssd_part *add_scene_part(
|
|||
struct wl_list *part_list, enum ssd_part_type type);
|
||||
struct ssd_part *add_scene_rect(
|
||||
struct wl_list *list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, int width, int height, int x, int y,
|
||||
struct wlr_scene_tree *parent, int width, int height, int x, int y,
|
||||
float color[4]);
|
||||
struct ssd_part *add_scene_buffer(
|
||||
struct wl_list *list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, struct wlr_buffer *buffer, int x, int y);
|
||||
struct wlr_scene_tree *parent, struct wlr_buffer *buffer, int x, int y);
|
||||
struct ssd_part *add_scene_button(
|
||||
struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, float *bg_color,
|
||||
struct wlr_scene_tree *parent, float *bg_color,
|
||||
struct wlr_buffer *icon_buffer, int x);
|
||||
struct ssd_part *add_scene_button_corner(
|
||||
struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, struct wlr_buffer *corner_buffer,
|
||||
struct wlr_scene_tree *parent, struct wlr_buffer *corner_buffer,
|
||||
struct wlr_buffer *icon_buffer, int x);
|
||||
|
||||
/* SSD internal helpers */
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ get_special(struct server *server, struct wlr_scene_node *node,
|
|||
if (node == &server->menu_tree->node) {
|
||||
return "server->menu_tree";
|
||||
}
|
||||
if (node->parent == &server->scene->tree.node) {
|
||||
if (node->parent == &server->scene->tree) {
|
||||
struct output *output;
|
||||
wl_list_for_each(output, &server->outputs, link) {
|
||||
if (node == &output->osd_tree->node) {
|
||||
|
|
@ -117,9 +117,8 @@ get_special(struct server *server, struct wlr_scene_node *node,
|
|||
if (node == &server->view_tree_always_on_top->node) {
|
||||
return "server->view_tree_always_on_top";
|
||||
}
|
||||
if (node->parent == &server->view_tree->node ||
|
||||
node->parent == &server->view_tree_always_on_top->node) {
|
||||
*last_view = node_view_from_node(node);
|
||||
if (node->parent == server->view_tree ||
|
||||
node->parent == server->view_tree_always_on_top) {
|
||||
*last_view = node_view_from_node(node);
|
||||
}
|
||||
const char *view_part = get_view_part(*last_view, node);
|
||||
|
|
|
|||
|
|
@ -278,7 +278,7 @@ desktop_node_and_view_at(struct server *server, double lx, double ly,
|
|||
return NULL;
|
||||
}
|
||||
#if HAVE_XWAYLAND
|
||||
if (node->parent == &server->unmanaged_tree->node) {
|
||||
if (node->parent == server->unmanaged_tree) {
|
||||
*view_area = LAB_SSD_UNMANAGED;
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -311,7 +311,8 @@ desktop_node_and_view_at(struct server *server, double lx, double ly,
|
|||
return NULL;
|
||||
}
|
||||
}
|
||||
node = node->parent;
|
||||
/* node->parent is always a *wlr_scene_tree */
|
||||
node = node->parent ? &node->parent->node : NULL;
|
||||
}
|
||||
if (!node) {
|
||||
wlr_log(WLR_ERROR, "Unknown node detected");
|
||||
|
|
|
|||
27
src/layers.c
27
src/layers.c
|
|
@ -174,7 +174,7 @@ popup_handle_destroy(struct wl_listener *listener, void *data)
|
|||
static void popup_handle_new_popup(struct wl_listener *listener, void *data);
|
||||
|
||||
static struct lab_layer_popup *
|
||||
create_popup(struct wlr_xdg_popup *wlr_popup, struct wlr_scene_node *parent,
|
||||
create_popup(struct wlr_xdg_popup *wlr_popup, struct wlr_scene_tree *parent,
|
||||
struct wlr_box *output_toplevel_sx_box)
|
||||
{
|
||||
struct lab_layer_popup *popup =
|
||||
|
|
@ -184,13 +184,13 @@ create_popup(struct wlr_xdg_popup *wlr_popup, struct wlr_scene_node *parent,
|
|||
}
|
||||
|
||||
popup->wlr_popup = wlr_popup;
|
||||
popup->scene_node =
|
||||
popup->scene_tree =
|
||||
wlr_scene_xdg_surface_create(parent, wlr_popup->base);
|
||||
if (!popup->scene_node) {
|
||||
if (!popup->scene_tree) {
|
||||
free(popup);
|
||||
return NULL;
|
||||
}
|
||||
node_descriptor_create(popup->scene_node,
|
||||
node_descriptor_create(&popup->scene_tree->node,
|
||||
LAB_NODE_DESC_LAYER_POPUP, popup);
|
||||
|
||||
popup->destroy.notify = popup_handle_destroy;
|
||||
|
|
@ -210,7 +210,7 @@ popup_handle_new_popup(struct wl_listener *listener, void *data)
|
|||
wl_container_of(listener, lab_layer_popup, new_popup);
|
||||
struct wlr_xdg_popup *wlr_popup = data;
|
||||
struct lab_layer_popup *new_popup = create_popup(wlr_popup,
|
||||
lab_layer_popup->scene_node,
|
||||
lab_layer_popup->scene_tree,
|
||||
&lab_layer_popup->output_toplevel_sx_box);
|
||||
new_popup->output_toplevel_sx_box =
|
||||
lab_layer_popup->output_toplevel_sx_box;
|
||||
|
|
@ -230,11 +230,12 @@ move_popup_to_top_layer(struct lab_layer_surface *toplevel,
|
|||
struct output *output = output_from_wlr_output(server, wlr_output);
|
||||
struct wlr_box box = { 0 };
|
||||
wlr_output_layout_get_box(server->output_layout, wlr_output, &box);
|
||||
int lx = toplevel->scene_layer_surface->node->state.x + box.x;
|
||||
int ly = toplevel->scene_layer_surface->node->state.y + box.y;
|
||||
int lx = toplevel->scene_layer_surface->tree->node.state.x + box.x;
|
||||
int ly = toplevel->scene_layer_surface->tree->node.state.y + box.y;
|
||||
|
||||
struct wlr_scene_node *node = popup->scene_node;
|
||||
wlr_scene_node_reparent(node, &output->layer_popup_tree->node);
|
||||
struct wlr_scene_node *node = &popup->scene_tree->node;
|
||||
wlr_scene_node_reparent(node, output->layer_popup_tree);
|
||||
/* FIXME: verify the whole tree should be repositioned */
|
||||
wlr_scene_node_set_position(&output->layer_popup_tree->node, lx, ly);
|
||||
}
|
||||
|
||||
|
|
@ -253,7 +254,7 @@ new_popup_notify(struct wl_listener *listener, void *data)
|
|||
output->wlr_output, &output_box);
|
||||
|
||||
int lx, ly;
|
||||
wlr_scene_node_coords(toplevel->scene_layer_surface->node, &lx, &ly);
|
||||
wlr_scene_node_coords(&toplevel->scene_layer_surface->tree->node, &lx, &ly);
|
||||
|
||||
/*
|
||||
* Output geometry expressed in the coordinate system of the toplevel
|
||||
|
|
@ -268,7 +269,7 @@ new_popup_notify(struct wl_listener *listener, void *data)
|
|||
.height = output_box.height,
|
||||
};
|
||||
struct lab_layer_popup *popup = create_popup(wlr_popup,
|
||||
toplevel->scene_layer_surface->node,
|
||||
toplevel->scene_layer_surface->tree,
|
||||
&output_toplevel_sx_box);
|
||||
popup->output_toplevel_sx_box = output_toplevel_sx_box;
|
||||
|
||||
|
|
@ -320,14 +321,14 @@ new_layer_surface_notify(struct wl_listener *listener, void *data)
|
|||
output->layer_tree[layer_surface->current.layer];
|
||||
|
||||
surface->scene_layer_surface = wlr_scene_layer_surface_v1_create(
|
||||
&selected_layer->node, layer_surface);
|
||||
selected_layer, layer_surface);
|
||||
if (!surface->scene_layer_surface) {
|
||||
wlr_layer_surface_v1_destroy(layer_surface);
|
||||
wlr_log(WLR_ERROR, "could not create layer surface");
|
||||
return;
|
||||
}
|
||||
|
||||
node_descriptor_create(surface->scene_layer_surface->node,
|
||||
node_descriptor_create(&surface->scene_layer_surface->tree->node,
|
||||
LAB_NODE_DESC_LAYER_SURFACE, surface);
|
||||
|
||||
surface->server = server;
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ menu_create(struct server *server, const char *id, const char *label)
|
|||
menu->server = server;
|
||||
menu->size.width = MENUWIDTH;
|
||||
/* menu->size.height will be kept up to date by adding items */
|
||||
menu->scene_tree = wlr_scene_tree_create(&server->menu_tree->node);
|
||||
menu->scene_tree = wlr_scene_tree_create(server->menu_tree);
|
||||
wlr_scene_node_set_enabled(&menu->scene_tree->node, false);
|
||||
return menu;
|
||||
}
|
||||
|
|
@ -117,29 +117,29 @@ item_create(struct menu *menu, const char *text)
|
|||
}
|
||||
|
||||
/* Menu item root node */
|
||||
menuitem->tree = wlr_scene_tree_create(&menu->scene_tree->node);
|
||||
menuitem->tree = wlr_scene_tree_create(menu->scene_tree);
|
||||
node_descriptor_create(&menuitem->tree->node,
|
||||
LAB_NODE_DESC_MENUITEM, menuitem);
|
||||
|
||||
/* Tree for each state to hold background and text buffer */
|
||||
menuitem->normal.tree = wlr_scene_tree_create(&menuitem->tree->node);
|
||||
menuitem->selected.tree = wlr_scene_tree_create(&menuitem->tree->node);
|
||||
menuitem->normal.tree = wlr_scene_tree_create(menuitem->tree);
|
||||
menuitem->selected.tree = wlr_scene_tree_create(menuitem->tree);
|
||||
|
||||
/* Item background nodes */
|
||||
menuitem->normal.background = &wlr_scene_rect_create(
|
||||
&menuitem->normal.tree->node,
|
||||
menuitem->normal.tree,
|
||||
MENUWIDTH, menu->item_height,
|
||||
theme->menu_items_bg_color)->node;
|
||||
menuitem->selected.background = &wlr_scene_rect_create(
|
||||
&menuitem->selected.tree->node,
|
||||
menuitem->selected.tree,
|
||||
MENUWIDTH, menu->item_height,
|
||||
theme->menu_items_active_bg_color)->node;
|
||||
|
||||
/* Font nodes */
|
||||
menuitem->normal.text = &wlr_scene_buffer_create(
|
||||
&menuitem->normal.tree->node, &menuitem->normal.buffer->base)->node;
|
||||
menuitem->normal.tree, &menuitem->normal.buffer->base)->node;
|
||||
menuitem->selected.text = &wlr_scene_buffer_create(
|
||||
&menuitem->selected.tree->node, &menuitem->selected.buffer->base)->node;
|
||||
menuitem->selected.tree, &menuitem->selected.buffer->base)->node;
|
||||
|
||||
/* Center font nodes */
|
||||
y = (menu->item_height - menuitem->normal.buffer->base.height) / 2;
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ osd_update(struct server *server)
|
|||
cairo_surface_flush(surf);
|
||||
|
||||
struct wlr_scene_buffer *scene_buffer = wlr_scene_buffer_create(
|
||||
&output->osd_tree->node, &output->osd_buffer->base);
|
||||
output->osd_tree, &output->osd_buffer->base);
|
||||
|
||||
/* Center OSD */
|
||||
struct wlr_box output_box;
|
||||
|
|
|
|||
|
|
@ -135,14 +135,14 @@ new_output_notify(struct wl_listener *listener, void *data)
|
|||
for (int i = 0; i < nr_layers; i++) {
|
||||
wl_list_init(&output->layers[i]);
|
||||
output->layer_tree[i] =
|
||||
wlr_scene_tree_create(&server->scene->tree.node);
|
||||
wlr_scene_tree_create(&server->scene->tree);
|
||||
node_descriptor_create(&output->layer_tree[i]->node,
|
||||
LAB_NODE_DESC_TREE, NULL);
|
||||
}
|
||||
output->layer_popup_tree = wlr_scene_tree_create(&server->scene->tree.node);
|
||||
output->layer_popup_tree = wlr_scene_tree_create(&server->scene->tree);
|
||||
node_descriptor_create(&output->layer_popup_tree->node,
|
||||
LAB_NODE_DESC_TREE, NULL);
|
||||
output->osd_tree = wlr_scene_tree_create(&server->scene->tree.node);
|
||||
output->osd_tree = wlr_scene_tree_create(&server->scene->tree);
|
||||
node_descriptor_create(&output->osd_tree->node,
|
||||
LAB_NODE_DESC_TREE, NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -238,12 +238,12 @@ server_init(struct server *server)
|
|||
wlr_log(WLR_ERROR, "unable to create scene");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
server->view_tree = wlr_scene_tree_create(&server->scene->tree.node);
|
||||
server->view_tree_always_on_top = wlr_scene_tree_create(&server->scene->tree.node);
|
||||
server->view_tree = wlr_scene_tree_create(&server->scene->tree);
|
||||
server->view_tree_always_on_top = wlr_scene_tree_create(&server->scene->tree);
|
||||
#if HAVE_XWAYLAND
|
||||
server->unmanaged_tree = wlr_scene_tree_create(&server->scene->tree.node);
|
||||
server->unmanaged_tree = wlr_scene_tree_create(&server->scene->tree);
|
||||
#endif
|
||||
server->menu_tree = wlr_scene_tree_create(&server->scene->tree.node);
|
||||
server->menu_tree = wlr_scene_tree_create(&server->scene->tree);
|
||||
|
||||
output_init(server);
|
||||
|
||||
|
|
|
|||
|
|
@ -62,31 +62,31 @@ ssd_get_part_type(struct view *view, struct wlr_scene_node *node)
|
|||
}
|
||||
|
||||
struct wl_list *part_list = NULL;
|
||||
struct wlr_scene_node *grandparent =
|
||||
node->parent ? node->parent->parent : NULL;
|
||||
struct wlr_scene_tree *grandparent =
|
||||
node->parent ? node->parent->node.parent : NULL;
|
||||
|
||||
/* active titlebar */
|
||||
if (node->parent == &view->ssd.titlebar.active.tree->node) {
|
||||
if (node->parent == view->ssd.titlebar.active.tree) {
|
||||
part_list = &view->ssd.titlebar.active.parts;
|
||||
} else if (grandparent == &view->ssd.titlebar.active.tree->node) {
|
||||
} else if (grandparent == view->ssd.titlebar.active.tree) {
|
||||
part_list = &view->ssd.titlebar.active.parts;
|
||||
|
||||
/* extents */
|
||||
} else if (node->parent == &view->ssd.extents.tree->node) {
|
||||
} else if (node->parent == view->ssd.extents.tree) {
|
||||
part_list = &view->ssd.extents.parts;
|
||||
|
||||
/* active border */
|
||||
} else if (node->parent == &view->ssd.border.active.tree->node) {
|
||||
} else if (node->parent == view->ssd.border.active.tree) {
|
||||
part_list = &view->ssd.border.active.parts;
|
||||
|
||||
/* inactive titlebar */
|
||||
} else if (node->parent == &view->ssd.titlebar.inactive.tree->node) {
|
||||
} else if (node->parent == view->ssd.titlebar.inactive.tree) {
|
||||
part_list = &view->ssd.titlebar.inactive.parts;
|
||||
} else if (grandparent == &view->ssd.titlebar.inactive.tree->node) {
|
||||
} else if (grandparent == view->ssd.titlebar.inactive.tree) {
|
||||
part_list = &view->ssd.titlebar.inactive.parts;
|
||||
|
||||
/* inactive border */
|
||||
} else if (node->parent == &view->ssd.border.inactive.tree->node) {
|
||||
} else if (node->parent == view->ssd.border.inactive.tree) {
|
||||
part_list = &view->ssd.border.inactive.parts;
|
||||
}
|
||||
|
||||
|
|
@ -154,7 +154,7 @@ ssd_create(struct view *view)
|
|||
return;
|
||||
}
|
||||
|
||||
view->ssd.tree = wlr_scene_tree_create(&view->scene_tree->node);
|
||||
view->ssd.tree = wlr_scene_tree_create(view->scene_tree);
|
||||
wlr_scene_node_lower_to_bottom(&view->ssd.tree->node);
|
||||
ssd_extents_create(view);
|
||||
ssd_border_create(view);
|
||||
|
|
|
|||
|
|
@ -18,18 +18,18 @@ ssd_border_create(struct view *view)
|
|||
int full_width = width + 2 * theme->border_width;
|
||||
|
||||
float *color;
|
||||
struct wlr_scene_node *parent;
|
||||
struct wlr_scene_tree *parent;
|
||||
struct ssd_sub_tree *subtree;
|
||||
|
||||
FOR_EACH_STATE(view, subtree) {
|
||||
subtree->tree = wlr_scene_tree_create(&view->ssd.tree->node);
|
||||
parent = &subtree->tree->node;
|
||||
wlr_scene_node_set_position(parent, -theme->border_width, 0);
|
||||
subtree->tree = wlr_scene_tree_create(view->ssd.tree);
|
||||
parent = subtree->tree;
|
||||
wlr_scene_node_set_position(&parent->node, -theme->border_width, 0);
|
||||
if (subtree == &view->ssd.border.active) {
|
||||
color = theme->window_active_border_color;
|
||||
} else {
|
||||
color = theme->window_inactive_border_color;
|
||||
wlr_scene_node_set_enabled(parent, false);
|
||||
wlr_scene_node_set_enabled(&parent->node, false);
|
||||
}
|
||||
wl_list_init(&subtree->parts);
|
||||
add_scene_rect(&subtree->parts, LAB_SSD_PART_LEFT, parent,
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
static struct ssd_part *
|
||||
add_extent(struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent)
|
||||
struct wlr_scene_tree *parent)
|
||||
{
|
||||
float invisible[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||
struct ssd_part *part = add_scene_part(part_list, type);
|
||||
|
|
@ -40,13 +40,14 @@ ssd_extents_create(struct view *view)
|
|||
int extended_area = EXTENDED_AREA;
|
||||
int corner_size = extended_area + theme->border_width + BUTTON_WIDTH / 2;
|
||||
|
||||
view->ssd.extents.tree = wlr_scene_tree_create(&view->ssd.tree->node);
|
||||
struct wlr_scene_node *parent = &view->ssd.extents.tree->node;
|
||||
view->ssd.extents.tree = wlr_scene_tree_create(view->ssd.tree);
|
||||
struct wlr_scene_tree *parent = view->ssd.extents.tree;
|
||||
if (view->maximized || view->fullscreen) {
|
||||
wlr_scene_node_set_enabled(parent, false);
|
||||
wlr_scene_node_set_enabled(&parent->node, false);
|
||||
}
|
||||
wl_list_init(&view->ssd.extents.parts);
|
||||
wlr_scene_node_set_position(parent, -(theme->border_width + extended_area),
|
||||
wlr_scene_node_set_position(&parent->node,
|
||||
-(theme->border_width + extended_area),
|
||||
-(theme->title_height + theme->border_width + extended_area));
|
||||
|
||||
/* Initialize parts and set constant values for targeted geometry */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ add_scene_part(struct wl_list *part_list, enum ssd_part_type type)
|
|||
|
||||
struct ssd_part *
|
||||
add_scene_rect(struct wl_list *list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, int width, int height,
|
||||
struct wlr_scene_tree *parent, int width, int height,
|
||||
int x, int y, float color[4])
|
||||
{
|
||||
/*
|
||||
|
|
@ -36,7 +36,7 @@ add_scene_rect(struct wl_list *list, enum ssd_part_type type,
|
|||
|
||||
struct ssd_part *
|
||||
add_scene_buffer(struct wl_list *list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, struct wlr_buffer *buffer,
|
||||
struct wlr_scene_tree *parent, struct wlr_buffer *buffer,
|
||||
int x, int y)
|
||||
{
|
||||
struct ssd_part *part = add_scene_part(list, type);
|
||||
|
|
@ -47,7 +47,7 @@ add_scene_buffer(struct wl_list *list, enum ssd_part_type type,
|
|||
|
||||
static void
|
||||
finish_scene_button(struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, struct wlr_buffer *icon_buffer)
|
||||
struct wlr_scene_tree *parent, struct wlr_buffer *icon_buffer)
|
||||
{
|
||||
float hover_bg[4] = {0.15f, 0.15f, 0.15f, 0.3f};
|
||||
|
||||
|
|
@ -65,12 +65,12 @@ finish_scene_button(struct wl_list *part_list, enum ssd_part_type type,
|
|||
|
||||
struct ssd_part *
|
||||
add_scene_button_corner(struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, struct wlr_buffer *corner_buffer,
|
||||
struct wlr_scene_tree *parent, struct wlr_buffer *corner_buffer,
|
||||
struct wlr_buffer *icon_buffer, int x)
|
||||
{
|
||||
struct ssd_part *button_root = add_scene_part(part_list, type);
|
||||
parent = &wlr_scene_tree_create(parent)->node;
|
||||
button_root->node = parent;
|
||||
parent = wlr_scene_tree_create(parent);
|
||||
button_root->node = &parent->node;
|
||||
wlr_scene_node_set_position(button_root->node, x, 0);
|
||||
|
||||
int offset_x;
|
||||
|
|
@ -95,12 +95,12 @@ add_scene_button_corner(struct wl_list *part_list, enum ssd_part_type type,
|
|||
|
||||
struct ssd_part *
|
||||
add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_node *parent, float *bg_color,
|
||||
struct wlr_scene_tree *parent, float *bg_color,
|
||||
struct wlr_buffer *icon_buffer, int x)
|
||||
{
|
||||
struct ssd_part *button_root = add_scene_part(part_list, type);
|
||||
parent = &wlr_scene_tree_create(parent)->node;
|
||||
button_root->node = parent;
|
||||
parent = wlr_scene_tree_create(parent);
|
||||
button_root->node = &parent->node;
|
||||
wlr_scene_node_set_position(button_root->node, x, 0);
|
||||
|
||||
struct ssd_part *part;
|
||||
|
|
|
|||
|
|
@ -20,15 +20,15 @@ ssd_titlebar_create(struct view *view)
|
|||
int width = view->w;
|
||||
|
||||
float *color;
|
||||
struct wlr_scene_node *parent;
|
||||
struct wlr_scene_tree *parent;
|
||||
struct wlr_buffer *corner_top_left;
|
||||
struct wlr_buffer *corner_top_right;
|
||||
|
||||
struct ssd_sub_tree *subtree;
|
||||
FOR_EACH_STATE(view, subtree) {
|
||||
subtree->tree = wlr_scene_tree_create(&view->ssd.tree->node);
|
||||
parent = &subtree->tree->node;
|
||||
wlr_scene_node_set_position(parent, 0, -theme->title_height);
|
||||
subtree->tree = wlr_scene_tree_create(view->ssd.tree);
|
||||
parent = subtree->tree;
|
||||
wlr_scene_node_set_position(&parent->node, 0, -theme->title_height);
|
||||
if (subtree == &view->ssd.titlebar.active) {
|
||||
color = theme->window_active_title_bg_color;
|
||||
corner_top_left = &theme->corner_top_left_active_normal->base;
|
||||
|
|
@ -37,7 +37,7 @@ ssd_titlebar_create(struct view *view)
|
|||
color = theme->window_inactive_title_bg_color;
|
||||
corner_top_left = &theme->corner_top_left_inactive_normal->base;
|
||||
corner_top_right = &theme->corner_top_right_inactive_normal->base;
|
||||
wlr_scene_node_set_enabled(parent, false);
|
||||
wlr_scene_node_set_enabled(&parent->node, false);
|
||||
}
|
||||
wl_list_init(&subtree->parts);
|
||||
|
||||
|
|
@ -65,7 +65,7 @@ ssd_titlebar_create(struct view *view)
|
|||
static bool
|
||||
is_direct_child(struct wlr_scene_node *node, struct ssd_sub_tree *subtree)
|
||||
{
|
||||
return node->parent == &subtree->tree->node;
|
||||
return node->parent == subtree->tree;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -241,7 +241,7 @@ ssd_update_title(struct view *view)
|
|||
if (!part) {
|
||||
/* Initialize part and wlr_scene_buffer without attaching a buffer */
|
||||
part = add_scene_part(&subtree->parts, LAB_SSD_PART_TITLE);
|
||||
part->node = &wlr_scene_buffer_create(&subtree->tree->node, NULL)->node;
|
||||
part->node = &wlr_scene_buffer_create(subtree->tree, NULL)->node;
|
||||
}
|
||||
|
||||
/* Generate and update the lab_data_buffer, drops the old buffer */
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@ static bool
|
|||
is_always_on_top(struct view *view)
|
||||
{
|
||||
return view->scene_tree->node.parent ==
|
||||
&view->server->view_tree_always_on_top->node;
|
||||
view->server->view_tree_always_on_top;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -336,10 +336,10 @@ view_toggle_always_on_top(struct view *view)
|
|||
{
|
||||
if (is_always_on_top(view)) {
|
||||
wlr_scene_node_reparent(&view->scene_tree->node,
|
||||
&view->server->view_tree->node);
|
||||
view->server->view_tree);
|
||||
} else {
|
||||
wlr_scene_node_reparent(&view->scene_tree->node,
|
||||
&view->server->view_tree_always_on_top->node);
|
||||
view->server->view_tree_always_on_top);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -91,9 +91,9 @@ xdg_popup_create(struct view *view, struct wlr_xdg_popup *wlr_popup)
|
|||
}
|
||||
struct wlr_xdg_surface *parent =
|
||||
wlr_xdg_surface_from_wlr_surface(wlr_popup->parent);
|
||||
struct wlr_scene_node *parent_node = parent->surface->data;
|
||||
struct wlr_scene_tree *parent_tree = parent->surface->data;
|
||||
wlr_popup->base->surface->data =
|
||||
wlr_scene_xdg_surface_create(parent_node, wlr_popup->base);
|
||||
wlr_scene_xdg_surface_create(parent_tree, wlr_popup->base);
|
||||
node_descriptor_create(wlr_popup->base->surface->data,
|
||||
LAB_NODE_DESC_XDG_POPUP, view);
|
||||
|
||||
|
|
|
|||
13
src/xdg.c
13
src/xdg.c
|
|
@ -348,7 +348,7 @@ static const struct view_impl xdg_toplevel_view_impl = {
|
|||
* We use the following struct user_data pointers:
|
||||
* - wlr_xdg_surface->data = view
|
||||
* for the wlr_xdg_toplevel_decoration_v1 implementation
|
||||
* - wlr_surface->data = scene_node
|
||||
* - wlr_surface->data = scene_tree
|
||||
* to help the popups find their parent nodes
|
||||
*/
|
||||
void
|
||||
|
|
@ -374,16 +374,17 @@ xdg_surface_new(struct wl_listener *listener, void *data)
|
|||
view->impl = &xdg_toplevel_view_impl;
|
||||
view->xdg_surface = xdg_surface;
|
||||
|
||||
view->scene_tree = wlr_scene_tree_create(&view->server->view_tree->node);
|
||||
view->scene_tree = wlr_scene_tree_create(view->server->view_tree);
|
||||
wlr_scene_node_set_enabled(&view->scene_tree->node, false);
|
||||
|
||||
view->scene_node = wlr_scene_xdg_surface_create(
|
||||
&view->scene_tree->node, view->xdg_surface);
|
||||
if (!view->scene_node) {
|
||||
struct wlr_scene_tree *tree = wlr_scene_xdg_surface_create(
|
||||
view->scene_tree, view->xdg_surface);
|
||||
if (!tree) {
|
||||
/* TODO: might need further clean up */
|
||||
wl_resource_post_no_memory(view->surface->resource);
|
||||
return;
|
||||
}
|
||||
view->scene_node = &tree->node;
|
||||
node_descriptor_create(&view->scene_tree->node,
|
||||
LAB_NODE_DESC_VIEW, view);
|
||||
|
||||
|
|
@ -391,7 +392,7 @@ xdg_surface_new(struct wl_listener *listener, void *data)
|
|||
xdg_surface->data = view;
|
||||
|
||||
/* In support of xdg popups */
|
||||
xdg_surface->surface->data = view->scene_node;
|
||||
xdg_surface->surface->data = tree;
|
||||
|
||||
view->map.notify = handle_map;
|
||||
wl_signal_add(&xdg_surface->events.map, &view->map);
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ unmanaged_handle_map(struct wl_listener *listener, void *data)
|
|||
|
||||
/* node will be destroyed automatically once surface is destroyed */
|
||||
struct wlr_scene_node *node = &wlr_scene_surface_create(
|
||||
&unmanaged->server->unmanaged_tree->node,
|
||||
unmanaged->server->unmanaged_tree,
|
||||
xsurface->surface)->buffer->node;
|
||||
wlr_scene_node_set_position(node, unmanaged->lx, unmanaged->ly);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -311,13 +311,14 @@ map(struct view *view)
|
|||
|
||||
if (view->surface != view->xwayland_surface->surface) {
|
||||
view->surface = view->xwayland_surface->surface;
|
||||
view->scene_node = wlr_scene_subsurface_tree_create(
|
||||
&view->scene_tree->node, view->surface);
|
||||
if (!view->scene_node) {
|
||||
struct wlr_scene_tree *tree = wlr_scene_subsurface_tree_create(
|
||||
view->scene_tree, view->surface);
|
||||
if (!tree) {
|
||||
/* TODO: might need further clean up */
|
||||
wl_resource_post_no_memory(view->surface->resource);
|
||||
return;
|
||||
}
|
||||
view->scene_node = &tree->node;
|
||||
}
|
||||
|
||||
if (!view->toplevel_handle) {
|
||||
|
|
@ -433,7 +434,7 @@ xwayland_surface_new(struct wl_listener *listener, void *data)
|
|||
view->impl = &xwl_view_impl;
|
||||
view->xwayland_surface = xsurface;
|
||||
|
||||
view->scene_tree = wlr_scene_tree_create(&view->server->view_tree->node);
|
||||
view->scene_tree = wlr_scene_tree_create(view->server->view_tree);
|
||||
node_descriptor_create(&view->scene_tree->node,
|
||||
LAB_NODE_DESC_VIEW, view);
|
||||
xsurface->data = view;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[wrap-git]
|
||||
url = https://gitlab.freedesktop.org/wlroots/wlroots.git
|
||||
revision = 9eb71146ae56c509ee33c7e8a662549592aad870
|
||||
revision = ccd0f85c2a36308e35b153c7f9653abac7659af3
|
||||
|
||||
[provide]
|
||||
dependency_names = wlroots
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue