From 1ec92ec3e2993668ced654b60e1eaf74b73a2164 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 11 Mar 2026 06:45:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20=5FNET=5FWM=5FSTAT?= =?UTF-8?q?E=5FSKIP=5FTASKBAR=20=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 skip_taskbar 字段到 client_t - 在 client_update_window_type 中检测并设置 skip_taskbar 状态 - 状态栏绘制时过滤 skip_taskbar 窗口 --- src/atoms-list.txt | 1 + src/client.c | 1 + src/monitor.c | 7 ++++++- src/types.h | 1 + 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/atoms-list.txt b/src/atoms-list.txt index 757f5a7..d7a5ea1 100644 --- a/src/atoms-list.txt +++ b/src/atoms-list.txt @@ -27,6 +27,7 @@ _NET_WM_STATE _NET_WM_STATE_FULLSCREEN _NET_WM_STATE_MAXIMIZED_HORZ _NET_WM_STATE_MAXIMIZED_VERT +_NET_WM_STATE_SKIP_TASKBAR _NET_WM_WINDOW_TYPE _NET_WM_WINDOW_TYPE_DIALOG _NET_SUPPORTED diff --git a/src/client.c b/src/client.c index 88e565f..ff637cb 100644 --- a/src/client.c +++ b/src/client.c @@ -366,6 +366,7 @@ void client_update_window_type(client_t *client) { if (state_reply) { xcb_atom_t state = *(xcb_atom_t *)xcb_get_property_value(state_reply); + client->skip_taskbar = state == _NET_WM_STATE_SKIP_TASKBAR; if (state == _NET_WM_STATE_FULLSCREEN) { client_set_fullscreen(client, true); } diff --git a/src/monitor.c b/src/monitor.c index 2fc2c30..27dd5be 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -350,7 +350,10 @@ static void monitor_draw_tasks(monitor_t *monitor, int16_t right_edge) { if (!task_list) return; uint16_t task_count = 0; - for (task_in_tag_t *task = task_list; task; task = task->next) ++task_count; + for (task_in_tag_t *task = task_list; task; task = task->next) { + if (task->client->skip_taskbar) continue; + ++task_count; + }; if (task_count == 0) return; int16_t x = monitor->layout_symbol_extent.end; @@ -361,6 +364,8 @@ static void monitor_draw_tasks(monitor_t *monitor, int16_t right_edge) { if (task_width < wm.font_size) return; for (task_in_tag_t *task = task_list; task; task = task->next) { + if (task->client->skip_taskbar) continue; + task->bar_extent.start = x; task->bar_extent.end = x + task_width; x += task_width; diff --git a/src/types.h b/src/types.h index 9694d12..6c2aff1 100644 --- a/src/types.h +++ b/src/types.h @@ -38,6 +38,7 @@ struct client_t { bool minimize; bool sticky; bool urgent; + bool skip_taskbar; bool size_freeze; /* 尺寸冻结窗口一定是浮动窗口 */ char *class, *instance;