From: Johan Malm Date: Sat, 12 Feb 2022 19:43:32 +0000 (+0000) Subject: Add debug_dump_scene() X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=5934ed6682b4921bdb8cd7a0689ca3a59b74417f;p=proto%2Flabwc.git Add debug_dump_scene() Dump view_tree and osd_tree on calling debug-action. Example bind: --- diff --git a/include/debug.h b/include/debug.h new file mode 100644 index 00000000..5b4b4e0c --- /dev/null +++ b/include/debug.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __DEBUG_H +#define __DEBUG_H + +struct server; + +void debug_dump_scene(struct server *server); + +#endif /* __DEBUG_H */ diff --git a/include/labwc.h b/include/labwc.h index 439ddff8..c0b9d47b 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -173,6 +173,7 @@ struct server { struct view *cycle_view; struct theme *theme; + struct menu *rootmenu; struct menu *windowmenu; }; @@ -476,6 +477,7 @@ void server_start(struct server *server); void server_finish(struct server *server); /* update onscreen display 'alt-tab' buffer */ +void osd_finish(struct server *server); void osd_update(struct server *server); /* diff --git a/src/action.c b/src/action.c index dfb6ed59..23d3dcf3 100644 --- a/src/action.c +++ b/src/action.c @@ -3,6 +3,7 @@ #include #include "common/spawn.h" #include "common/zfree.h" +#include "debug.h" #include "labwc.h" #include "menu/menu.h" #include "ssd.h" @@ -161,7 +162,7 @@ action(struct view *activator, struct server *server, struct wl_list *actions, u } break; case ACTION_TYPE_DEBUG: - /* nothing */ + debug_dump_scene(server); break; case ACTION_TYPE_EXECUTE: { diff --git a/src/debug.c b/src/debug.c new file mode 100644 index 00000000..fda5d131 --- /dev/null +++ b/src/debug.c @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include +#include "buffer.h" +#include "labwc.h" + +#define INDENT_SIZE (3) + +static char * +get_node_type(enum wlr_scene_node_type type) +{ + switch (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: + return "buffer"; + } + return "error"; +} + +static void +dump_tree(struct wlr_scene_node *node, int pos, int x, int y) +{ + char *type = get_node_type(node->type); + + if (pos) { + printf("%*c+-- ", pos, ' '); + } + printf("%s (%d,%d) [%p]\n", type, x, y, node); + + struct wlr_scene_node *child; + wl_list_for_each(child, &node->state.children, state.link) { + dump_tree(child, pos + INDENT_SIZE, x + child->state.x, + y + child->state.y); + } +} + +void +debug_dump_scene(struct server *server) +{ + struct wlr_scene_node *node; + + printf(":: view_tree ::\n"); + node = &server->view_tree->node; + dump_tree(node, 0, node->state.x, node->state.y); + + printf(":: osd_tree ::\n"); + node = &server->osd_tree->node; + dump_tree(node, 0, node->state.x, node->state.y); +} diff --git a/src/meson.build b/src/meson.build index 0bce7cd5..1f9c5146 100644 --- a/src/meson.build +++ b/src/meson.build @@ -3,6 +3,7 @@ labwc_sources = files( 'buffer.c', 'cursor.c', 'damage.c', + 'debug.c', 'desktop.c', 'foreign.c', 'interactive.c',