]> git.mdlowis.com Git - proto/labwc.git/commitdiff
Add debug_dump_scene()
authorJohan Malm <jgm323@gmail.com>
Sat, 12 Feb 2022 19:43:32 +0000 (19:43 +0000)
committerJohan Malm <jgm323@gmail.com>
Wed, 23 Feb 2022 21:47:01 +0000 (21:47 +0000)
Dump view_tree and osd_tree on calling debug-action. Example bind:

<keybind key="A-F12">
  <action name="Debug"></action>
</keybind>

include/debug.h [new file with mode: 0644]
include/labwc.h
src/action.c
src/debug.c [new file with mode: 0644]
src/meson.build

diff --git a/include/debug.h b/include/debug.h
new file mode 100644 (file)
index 0000000..5b4b4e0
--- /dev/null
@@ -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 */
index 439ddff8b872deceb64db4e210ce5acccbe39ea3..c0b9d47bb0fd5786b0691fcce604f1da90df2eab 100644 (file)
@@ -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);
 
 /*
index dfb6ed59b183f758ea2f2a92a97fe27b2a8b03f0..23d3dcf391810b2cfbf08f2bf717a343175a555c 100644 (file)
@@ -3,6 +3,7 @@
 #include <wlr/util/log.h>
 #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 (file)
index 0000000..fda5d13
--- /dev/null
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0-only
+#include <wlr/types/wlr_scene.h>
+#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);
+}
index 0bce7cd5f23a7ee097469aea1b095465a2bc0690..1f9c51469ebee9937b79a967b7364f3358957ea4 100644 (file)
@@ -3,6 +3,7 @@ labwc_sources = files(
   'buffer.c',
   'cursor.c',
   'damage.c',
+  'debug.c',
   'desktop.c',
   'foreign.c',
   'interactive.c',