我正在尝试设置一个托管窗口,使其始终位于顶部。但是,此代码不起作用:
我的代码是js-ctype,但这是一个XCB API问题:
var rez_focus = xcb_get_input_focus_reply(c, xcb_get_input_focus(c), null);
var change_list = xcb_atom_t.array()([cachedXCBAtom('_NET_WM_STATE_ABOVE')]);
var req_change = xcb_change_property(c, XCB_PROP_MODE_REPLACE, rez_focus.focus, cachedXCBAtom('_NET_WM_STATE'), XCB_ATOM_ATOM, 32, change_list.length, change_list);
xcb_flush(c);通过获得窗口标题,我测试了我是否有正确的窗口。然而,上面的代码并没有使窗口总是在顶部。你能告诉我。
我有一种感觉,也许我得到的窗口不是“所有者窗口”,这意味着它不负责总是在顶部,所以我确实查询树,并尝试在顶部的每个窗口(除了根),但没有工作。
发布于 2016-08-21 09:58:07
首先,您应该说明使用哪个窗口管理器进行测试,并通过根窗口上的_NET_SUPPORTED验证窗口管理器是否支持这个原子。
其次,您违反了规范。仅当窗口被撤回并映射时,窗口管理器才会直接设置原子。如果要对已映射的窗口执行此操作,则需要将客户端消息改为根窗口。
请参阅文献资料
每当撤回的窗口请求被映射时,窗口管理器都应该遵守_NET_WM_STATE的要求。希望更改窗口状态的客户端必须向根窗口发送_NET_WM_STATE客户端消息(请参见下面)。窗口管理器必须更新此属性以反映窗口的当前状态。
https://stackoverflow.com/questions/38995480
复制相似问题