Есть много примеров о том, как обращаться с закрытием окна с помощью Xlib, который можно найти в Интернете:XLib: Windows Менеджер не Отправка сообщений клиента после вызова XSetWMProtocols
- http://cboard.cprogramming.com/linux-programming/60466-xwindows-close-window-event.html
- https://en.wikibooks.org/wiki/X_Window_Programming/XLib
- https://john.nachtimwald.com/2009/11/01/x11-intercept-window-close-event/
Есть еще несколько. Тем не менее я попытался реализовать их в коде, как показано ниже. Однако, когда я нажимаю на X в углу окна, я не получаю никакого события, отправленного в мой цикл сообщений. Это потому, что XChcekWindowEvent
игнорирует или не обрабатывает сообщения клиента? Если это не так, то какие другие вещи я должен искать, чтобы получать сообщения из набора XLib, используя SetWMProtocols
?
m_impl->m_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False);
if (!XSetWMProtocols(display, window, &m_impl->m_delete_window, 1)) {
std::cout << "Set Window Protocols Failed" << std::endl;
}
...
while (!terminate) {
while (::XCheckWindowEvent(display, window, events::mask, &x_event)) {
if (x_event.type == ClientMessage) {
std::cout << "Client Message" << std::endl;
if ((Atom)x_event.xclient.data.l[0] == m_impl->m_delete_window) {
terminate = true;
}
}
}
}