Событие не получено, когда клиент X11 устанавливает _NET_WM_STATE_DEMANDS_ATTENTION
Я создаю панель задач для рабочего стола X11, и до сих пор я успешно обнаруживал новые и удаленные окна и изменения заголовков и значков окон.
Однако, несмотря на установку каждой маски событий, которую я могу придумать в клиентских окнах, я не смог получить никаких событий, когда тестовое приложение добавляет _NET_WM_STATE_DEMANDS_ATTENTION
атом его _NET_WM_STATE
имущество.
Я использую Qt5 и фиксирую входящие события X11, используя installNativeEventFilter
, Тем не менее, я также пытался использовать xprop -spy
и я вижу ту же проблему там: хотя опрос _NET_WM_STATE
свойство показывает атом добавляется и удаляется, событие изменения свойства никогда не получено. Fluxbox также, похоже, не подхватывает его, пока что-то еще не заставит его повторно запросить окно.
Мой код фильтра событий похож на это:
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()
по таймеру, чтобы установить флаг внимания.
Есть ли какая-то особая обработка, необходимая для свойств списка атомов? Обречен ли я опросить изменения? Я пытался просмотреть исходный код других оконных менеджеров, но не смог выявить каких-либо конкретных отличий.
1 ответ
Оказывается, что собственный фильтр событий Qt5 на X11 не проходит все последовательно. Я еще не выделил эту ошибку, но я написал свой собственный минималистический цикл событий xcb для отдельного соединения, чтобы обрабатывать действия по управлению окнами, и он отлично работает.