这个问题不是关于设置桌面环境,它严格是关于用于处理下面的事件/情况的Xorg或X11协议。
我遇到了 X11 原子更改的问题。情况是这样的:
_NET_WM_STATE_SKIP_TASKBAR
原子。xprop
验证这一点)。我的问题是:
我使用 XMonad 作为我的窗口管理器,并且我直接通过 XMonad 的 X11 绑定修改原子。 Tint2 被用作我的面板/任务栏。
任何有关原子更改应如何正确传播或tint2如何处理此类更改的见解将不胜感激。
据我所知,当我修改窗口原子时,似乎
PropertyNotify
事件会自动从 XMonad 发送。看来tint2确实不会重绘面板,因为
else if (at == server.atom [_NET_WM_STATE])
{
if (debug) {
int count;
Atom *atom_state = get_property(win, server.atom [_NET_WM_STATE], XA_ATOM, &count);
for (int j = 0; j < count; j++)
{
char *atom_state_name = XGetAtomName(server.display, atom_state[j]);
fprintf(stderr, "tint2: %s %d: _NET_WM_STATE = %s\n", __func__, __LINE__, atom_state_name);
XFree(atom_state_name);
}
XFree(atom_state);
}
if (window_is_urgent(win))
add_urgent(task);
if (window_is_skip_taskbar(win)) {
remove_task(task);
schedule_panel_redraw();
}
}
这似乎没有正确安排面板重绘 - 没有为我正在查看的操作执行 if 条件(删除
_NET_WM_STATE_SKIP_TASKBAR
)。
PropertyNotify
事件似乎是这里的正确程序。 Tint2 没有正确处理这些事件。
可以使用
xev
程序调试/查看这些事件。