X11 客户端设置 _NET_WM_STATE_DEMANDS_ATTENTION 时未收到事件
No event received when X11 client sets _NET_WM_STATE_DEMANDS_ATTENTION
我正在为 X11 桌面构建任务栏,到目前为止,我已成功检测到新的和已删除的 windows 以及对 window 标题和图标的更改。
然而,尽管在客户端 windows 上设置了我能想到的每个事件掩码,但当测试应用程序将 _NET_WM_STATE_DEMANDS_ATTENTION
原子添加到其 _NET_WM_STATE
属性.
我正在使用 Qt5 并使用 installNativeEventFilter
捕获传入的 X11 事件。但是,我也尝试过使用 xprop -spy
,我在那里看到了同样的问题:即使轮询 _NET_WM_STATE
属性 显示正在添加和删除原子,但 属性 没有变化曾经收到过事件。 Fluxbox 似乎也没有注意到它,直到其他原因导致它 re-query window.
我的事件过滤器代码类似于:
xcb_generic_event_t* ev = static_cast<xcb_generic_event_t*>(message);
uint32_t type = ev->response_type;
switch (type) {
case XCB_PROPERTY_NOTIFY: {
xcb_property_notify_event_t* pev =
reinterpret_cast<xcb_property_notify_event_t*>(ev);
qDebug() << "property" << pev->window << pev->atom << (int)pev->state;
break;
/* snip */
default:
qDebug() << "unrecognized event" << type;
};
我的测试应用程序在计时器上使用 QApplication::alert()
来声明注意力标志。
是否需要对原子列表属性进行一些特殊处理?我注定要轮询更改吗?我已经尝试查看其他 window 管理器的源代码,但我无法确定任何具体差异。
事实证明,Qt5 在 X11 上的本机事件过滤器并没有始终如一地传递所有内容。我还没有隔离 那个 错误,但我在单独的连接上编写了我自己的极简主义 xcb 事件循环来处理 window-management 活动并且它工作正常。
我正在为 X11 桌面构建任务栏,到目前为止,我已成功检测到新的和已删除的 windows 以及对 window 标题和图标的更改。
然而,尽管在客户端 windows 上设置了我能想到的每个事件掩码,但当测试应用程序将 _NET_WM_STATE_DEMANDS_ATTENTION
原子添加到其 _NET_WM_STATE
属性.
我正在使用 Qt5 并使用 installNativeEventFilter
捕获传入的 X11 事件。但是,我也尝试过使用 xprop -spy
,我在那里看到了同样的问题:即使轮询 _NET_WM_STATE
属性 显示正在添加和删除原子,但 属性 没有变化曾经收到过事件。 Fluxbox 似乎也没有注意到它,直到其他原因导致它 re-query window.
我的事件过滤器代码类似于:
xcb_generic_event_t* ev = static_cast<xcb_generic_event_t*>(message);
uint32_t type = ev->response_type;
switch (type) {
case XCB_PROPERTY_NOTIFY: {
xcb_property_notify_event_t* pev =
reinterpret_cast<xcb_property_notify_event_t*>(ev);
qDebug() << "property" << pev->window << pev->atom << (int)pev->state;
break;
/* snip */
default:
qDebug() << "unrecognized event" << type;
};
我的测试应用程序在计时器上使用 QApplication::alert()
来声明注意力标志。
是否需要对原子列表属性进行一些特殊处理?我注定要轮询更改吗?我已经尝试查看其他 window 管理器的源代码,但我无法确定任何具体差异。
事实证明,Qt5 在 X11 上的本机事件过滤器并没有始终如一地传递所有内容。我还没有隔离 那个 错误,但我在单独的连接上编写了我自己的极简主义 xcb 事件循环来处理 window-management 活动并且它工作正常。