История изменений
Исправление Zubok, (текущая версия) :
Надо будет глянуть, как она реализована в зависимости от платформы. Вполне возможно, что уже никак вообще не реализована.
Нет, реализована вроде. В root/src/plugins/platforms/xcb/qxcbwindow.cpp:
void QXcbWindow::setAlertState(bool enabled)
{
if (m_alertState == enabled)
return;
m_alertState = enabled;
changeNetWmState(enabled, atom(QXcbAtom::_NET_WM_STATE_DEMANDS_ATTENTION));
}
void QXcbWindow::changeNetWmState(bool set, xcb_atom_t one, xcb_atom_t two)
{
xcb_client_message_event_t event;
event.response_type = XCB_CLIENT_MESSAGE;
event.format = 32;
event.sequence = 0;
event.window = m_window;
event.type = atom(QXcbAtom::_NET_WM_STATE);
event.data.data32[0] = set ? 1 : 0;
event.data.data32[1] = one;
event.data.data32[2] = two;
event.data.data32[3] = 0;
event.data.data32[4] = 0;
xcb_send_event(xcb_connection(), 0, xcbScreen()->root(),
XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT,
(const char *)&event);
}
Твой оконный менеджер должне поддерживать NetWM (он же EWMH), чтобы это сработало. Причем поддерживать _NET_WM_STATE_DEMANDS_ATTENTION. Какой у тебя оконный менеджер? И проверь еще случай, когда окно не имеет фокуса, но находится на рабочем столе, а не свернуто, а то, судя по описанию, в Qt как-то странно обрабатывают это все. Получается, что если окно в hide, то оно не будет мигать. Это меня смущает. Так сделано на уровне Qt, а не на уровне иксов.
Исправление Zubok, :
Надо будет глянуть, как она реализована в зависимости от платформы. Вполне возможно, что уже никак вообще не реализована.
Нет, реализована вроде. В root/src/plugins/platforms/xcb/qxcbwindow.cpp:
void QXcbWindow::setAlertState(bool enabled)
{
if (m_alertState == enabled)
return;
m_alertState = enabled;
changeNetWmState(enabled, atom(QXcbAtom::_NET_WM_STATE_DEMANDS_ATTENTION));
}
void QXcbWindow::changeNetWmState(bool set, xcb_atom_t one, xcb_atom_t two)
{
xcb_client_message_event_t event;
event.response_type = XCB_CLIENT_MESSAGE;
event.format = 32;
event.sequence = 0;
event.window = m_window;
event.type = atom(QXcbAtom::_NET_WM_STATE);
event.data.data32[0] = set ? 1 : 0;
event.data.data32[1] = one;
event.data.data32[2] = two;
event.data.data32[3] = 0;
event.data.data32[4] = 0;
xcb_send_event(xcb_connection(), 0, xcbScreen()->root(),
XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT,
(const char *)&event);
}
Твой оконный менеджер должне поддерживать NetWM (он же EWMH), чтобы это сработало. Причем поддерживать _NET_WM_STATE_DEMANDS_ATTENTION. Какой у тебя оконный менеджер? И проверь еще случай, когда окно не имеет фокуса, но находится на рабочем столе, а не свернуто.
Исходная версия Zubok, :
Надо будет глянуть, как она реализована в зависимости от платформы. Вполне возможно, что уже никак вообще не реализована.
Нет, реализована вроде. В root/src/plugins/platforms/xcb/qxcbwindow.cpp:
void QXcbWindow::setAlertState(bool enabled)
{
if (m_alertState == enabled)
return;
m_alertState = enabled;
changeNetWmState(enabled, atom(QXcbAtom::_NET_WM_STATE_DEMANDS_ATTENTION));
}
void QXcbWindow::changeNetWmState(bool set, xcb_atom_t one, xcb_atom_t two)
{
xcb_client_message_event_t event;
event.response_type = XCB_CLIENT_MESSAGE;
event.format = 32;
event.sequence = 0;
event.window = m_window;
event.type = atom(QXcbAtom::_NET_WM_STATE);
event.data.data32[0] = set ? 1 : 0;
event.data.data32[1] = one;
event.data.data32[2] = two;
event.data.data32[3] = 0;
event.data.data32[4] = 0;
xcb_send_event(xcb_connection(), 0, xcbScreen()->root(),
XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT,
(const char *)&event);
}
Твой оконный менеджер должне поддерживать NetWM (он же EWMH), чтобы это сработало. Причем поддерживать _NET_WM_STATE_DEMANDS_ATTENTION. Какой у тебя оконный менеджер?