mirror of
https://github.com/labwc/labwc.git
synced 2026-04-10 08:21:07 -04:00
...based on https://github.com/johanmalm/checkpatch.pl ``` src/server.c:161: ERROR: space required before the open parenthesis '(' src/server.c:473: CHECK: Blank lines aren't necessary after an open brace '{' src/desktop.c:228: WARNING: function definition argument 'struct wl_list *' should also have an identifier name src/output.c:289: CHECK: Blank lines aren't necessary before a close brace '}' src/interactive.c:20: WARNING: suspect code indent for conditional statements (8, 17) src/interactive.c:27: WARNING: Statements should start on a tabstop src/config/rcxml.c:607: CHECK: Blank lines aren't necessary after an open brace '{' src/config/rcxml.c:638: CHECK: line length of 91 exceeds 90 columns src/config/rcxml.c:639: CHECK: Blank lines aren't necessary after an open brace '{' src/debug.c:126: WARNING: suspect code indent for conditional statements (8, 24) src/debug.c:129: WARNING: suspect code indent for conditional statements (8, 24) src/view.c:307: CHECK: Please use a blank line after function/struct/union/enum declarations src/workspaces.c:52: CHECK: Blank lines aren't necessary after an open brace '{' src/workspaces.c:147: ERROR: space prohibited before that close parenthesis ')' src/workspaces.c:226: CHECK: line length of 91 exceeds 90 columns src/workspaces.c:290: CHECK: Please don't use multiple blank lines src/workspaces.c:328: WARNING: else is not generally useful after a break or return src/cursor.c:18: ERROR: do not initialise statics to NULL src/cursor.c:20: CHECK: Please don't use multiple blank lines src/common/scaled_font_buffer.c:55: CHECK: Assignment operator '=' should be on the previous line src/common/graphic-helpers.c:44: CHECK: Blank lines aren't necessary after an open brace '{' src/common/graphic-helpers.c:71: CHECK: multiple assignments should be avoided src/common/scaled_scene_buffer.c:115: CHECK: Assignment operator '=' should be on the previous line src/common/scaled_scene_buffer.c:135: CHECK: Assignment operator '=' should be on the previous line src/common/fd_util.c:15: CHECK: line length of 106 exceeds 90 columns src/common/fd_util.c:22: CHECK: line length of 106 exceeds 90 columns src/common/fd_util.c:25: ERROR: code indent should use tabs where possible src/common/fd_util.c:25: WARNING: please, no spaces at the start of a line include/workspaces.h:13: ERROR: code indent should use tabs where possible include/workspaces.h:13: WARNING: Block comments use * on subsequent lines include/workspaces.h:13: WARNING: Block comments use a trailing */ on a separate line include/workspaces.h:20: CHECK: Please don't use multiple blank lines include/workspaces.h:26: ERROR: "foo * bar" should be "foo *bar" include/action.h:11: ERROR: code indent should use tabs where possible include/action.h:12: ERROR: code indent should use tabs where possible include/action.h:12: WARNING: Block comments use a trailing */ on a separate line include/common/scaled_scene_buffer.h:62: CHECK: Please don't use multiple blank lines ```
200 lines
4.7 KiB
C
200 lines
4.7 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
#include <wlr/types/wlr_layer_shell_v1.h>
|
|
#include <wlr/types/wlr_scene.h>
|
|
#include "buffer.h"
|
|
#include "labwc.h"
|
|
#include "node.h"
|
|
#include "common/scene-helpers.h"
|
|
|
|
#define HEADER_CHARS "------------------------------"
|
|
|
|
#define INDENT_SIZE 3
|
|
#define IGNORE_SSD true
|
|
#define IGNORE_MENU true
|
|
#define LEFT_COL_SPACE 35
|
|
|
|
static const char *
|
|
get_node_type(struct wlr_scene_node *node)
|
|
{
|
|
switch (node->type) {
|
|
case WLR_SCENE_NODE_TREE:
|
|
if (!node->parent) {
|
|
return "root";
|
|
}
|
|
return "tree";
|
|
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";
|
|
}
|
|
|
|
static const char *
|
|
get_layer_name(uint32_t layer)
|
|
{
|
|
switch (layer) {
|
|
case ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND:
|
|
return "layer-background";
|
|
case ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM:
|
|
return "layer-bottom";
|
|
case ZWLR_LAYER_SHELL_V1_LAYER_TOP:
|
|
return "layer-top";
|
|
case ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY:
|
|
return "layer-overlay";
|
|
default:
|
|
abort();
|
|
}
|
|
}
|
|
|
|
static const char *
|
|
get_view_part(struct view *view, struct wlr_scene_node *node)
|
|
{
|
|
if (view && node == &view->scene_tree->node) {
|
|
return "view";
|
|
}
|
|
if (view && node == view->scene_node) {
|
|
return "view->scene_node";
|
|
}
|
|
if (!view || !view->ssd.tree) {
|
|
return NULL;
|
|
}
|
|
if (node == &view->ssd.tree->node) {
|
|
return "view->ssd";
|
|
}
|
|
if (node == &view->ssd.titlebar.active.tree->node) {
|
|
return "titlebar.active";
|
|
}
|
|
if (node == &view->ssd.titlebar.inactive.tree->node) {
|
|
return "titlebar.inactive";
|
|
}
|
|
if (node == &view->ssd.border.active.tree->node) {
|
|
return "border.active";
|
|
}
|
|
if (node == &view->ssd.border.inactive.tree->node) {
|
|
return "border.inactive";
|
|
}
|
|
if (node == &view->ssd.extents.tree->node) {
|
|
return "extents";
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
static const char *
|
|
get_special(struct server *server, struct wlr_scene_node *node,
|
|
struct view **last_view)
|
|
{
|
|
if (node == &server->scene->tree.node) {
|
|
return "server->scene";
|
|
}
|
|
if (node == &server->menu_tree->node) {
|
|
return "server->menu_tree";
|
|
}
|
|
if (node == &server->view_tree->node) {
|
|
return "server->view_tree";
|
|
}
|
|
if (node == &server->view_tree_always_on_top->node) {
|
|
return "server->view_tree_always_on_top";
|
|
}
|
|
if (node->parent == server->view_tree) {
|
|
/* Add node_descriptor just to get the name here? */
|
|
return "workspace";
|
|
}
|
|
if (node->parent == &server->scene->tree) {
|
|
struct output *output;
|
|
wl_list_for_each(output, &server->outputs, link) {
|
|
if (node == &output->osd_tree->node) {
|
|
return "output->osd_tree";
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
if (node == &output->layer_tree[i]->node) {
|
|
return get_layer_name(i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#if HAVE_XWAYLAND
|
|
if (node == &server->unmanaged_tree->node) {
|
|
return "server->unmanaged_tree";
|
|
}
|
|
#endif
|
|
struct wlr_scene_tree *grand_parent =
|
|
node->parent ? node->parent->node.parent : NULL;
|
|
if (grand_parent == server->view_tree) {
|
|
*last_view = node_view_from_node(node);
|
|
}
|
|
if (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);
|
|
if (view_part) {
|
|
return view_part;
|
|
}
|
|
return get_node_type(node);
|
|
}
|
|
|
|
struct pad {
|
|
uint8_t left;
|
|
uint8_t right;
|
|
};
|
|
|
|
static struct pad
|
|
get_center_padding(const char *text, uint8_t max_width)
|
|
{
|
|
struct pad pad;
|
|
size_t text_len = strlen(text);
|
|
pad.left = (double)(max_width - text_len) / 2 + 0.5f;
|
|
pad.right = max_width - pad.left - text_len;
|
|
return pad;
|
|
}
|
|
|
|
static void
|
|
dump_tree(struct server *server, struct wlr_scene_node *node,
|
|
int pos, int x, int y)
|
|
{
|
|
static struct view *view;
|
|
const char *type = get_special(server, node, &view);
|
|
|
|
if (pos) {
|
|
printf("%*c+-- ", pos, ' ');
|
|
} else {
|
|
struct pad node_pad = get_center_padding("Node", 16);
|
|
printf(" %*c %4s %4s %*c%s\n", LEFT_COL_SPACE + 4, ' ',
|
|
"X", "Y", node_pad.left, ' ', "Node");
|
|
printf(" %*c %.4s %.4s %.16s\n", LEFT_COL_SPACE + 4, ' ',
|
|
HEADER_CHARS, HEADER_CHARS, HEADER_CHARS);
|
|
printf(" ");
|
|
}
|
|
int padding = LEFT_COL_SPACE - pos - strlen(type);
|
|
if (!pos) {
|
|
padding += 3;
|
|
}
|
|
printf("%s %*c %4d %4d [%p]\n", type, padding, ' ', x, y, node);
|
|
|
|
if ((IGNORE_MENU && node == &server->menu_tree->node)
|
|
|| (IGNORE_SSD && view && view->ssd.tree
|
|
&& node == &view->ssd.tree->node)) {
|
|
printf("%*c%s\n", pos + 4 + INDENT_SIZE, ' ', "<skipping children>");
|
|
return;
|
|
}
|
|
|
|
if (node->type == WLR_SCENE_NODE_TREE) {
|
|
struct wlr_scene_node *child;
|
|
struct wlr_scene_tree *tree = lab_scene_tree_from_node(node);
|
|
wl_list_for_each(child, &tree->children, link) {
|
|
dump_tree(server, child, pos + INDENT_SIZE,
|
|
x + child->x, y + child->y);
|
|
}
|
|
}
|
|
}
|
|
|
|
void
|
|
debug_dump_scene(struct server *server)
|
|
{
|
|
printf("\n");
|
|
dump_tree(server, &server->scene->tree.node, 0, 0, 0);
|
|
printf("\n");
|
|
}
|