作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
XCB允许我们...
WM_NAME
和_NET_WM_NAME
属性XCB_EVENT_MASK_PROPERTY_CHANGE
_NET_WM_NAME
属性中的更改的方式(通过订阅根窗口中的事件):
/* ... */
const uint32_t list[] = { XCB_EVENT_MASK_PROPERTY_CHANGE };
xcb_change_window_attributes(conn, root_window, XCB_CW_EVENT_MASK, &list);
xcb_flush(conn);
xcb_generic_event_t *evt;
while ((evt = xcb_wait_for_event(conn)))
{
if (evt->response_type == XCB_PROPERTY_NOTIFY)
{
xcb_property_notify_event_t *e = (void *) evt;
/* ... print the window name ... */
}
free(evt);
}
/* ... */
这似乎在大多数情况下都可以正常工作,但是我注意到,即使更改了浏览器窗口的标题,我在浏览器中更改选项卡时也没有收到事件。
最佳答案
Specifically, here is how I monitor for changes in the _NET_WM_NAME property of all windows (by subscribing to events on the root window):
SubstructureNotify
。每当创建新的子窗口时,这都应该为您提供
CreateNotify
事件。对于该窗口,您将再次选择
SubstructureNotify
等以递归方式获取所有窗口。
QueryTree
请求以获取其子级。您还必须为程序启动之前已经存在的子窗口选择事件。
PropertyNotifyMask
时,还应该选择
SubstructureNotify
。这样,只要任何窗口更改了任何属性(*),您都应该得到通知。
PropertyNotify
之前设置此属性。因此,如果您真的想查看所有属性,则在要求更改属性后,还需要在窗口上发送
ListProperties
请求...
关于c - XCB : detect change of a window's name/title,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64246090/
我是一名优秀的程序员,十分优秀!