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;