Add hacky way to die when WindowServer dies
We keep a dummy window around which will receive a close event that exits once WindowServer dies :^)
This commit is contained in:
@@ -18,18 +18,19 @@
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
static const xRectangle s_screen_bounds =
|
||||
static BAN::UniqPtr<LibGUI::Window> s_dummy_window =
|
||||
[]() {
|
||||
auto attributes = LibGUI::Window::default_attributes;
|
||||
attributes.shown = false;
|
||||
auto window = MUST(LibGUI::Window::create(0, 0, ""_sv, attributes));
|
||||
return xRectangle {
|
||||
return MUST(LibGUI::Window::create(0, 0, ""_sv, attributes));
|
||||
}();
|
||||
|
||||
static const xRectangle s_screen_bounds = {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.width = static_cast<CARD16>(window->width()),
|
||||
.height = static_cast<CARD16>(window->height()),
|
||||
};
|
||||
}();
|
||||
.width = static_cast<CARD16>(s_dummy_window->width()),
|
||||
.height = static_cast<CARD16>(s_dummy_window->height()),
|
||||
};
|
||||
|
||||
const xPixmapFormat g_formats[6] {
|
||||
{
|
||||
@@ -172,12 +173,25 @@ int main()
|
||||
return 1;
|
||||
}
|
||||
|
||||
{
|
||||
epoll_event event { .events = EPOLLIN, .data = { .ptr = nullptr } };
|
||||
if (epoll_ctl(g_epoll_fd, EPOLL_CTL_ADD, server_sock, &event) == -1)
|
||||
{
|
||||
perror("xbanan: epoll_ctl");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
epoll_event event { .events = EPOLLIN, .data = { .ptr = (void*)1 } };
|
||||
if (epoll_ctl(g_epoll_fd, EPOLL_CTL_ADD, s_dummy_window->server_fd(), &event) == -1)
|
||||
{
|
||||
perror("xbanan: epoll_ctl");
|
||||
return 1;
|
||||
}
|
||||
|
||||
s_dummy_window->request_resize(1, 1);
|
||||
}
|
||||
|
||||
#define APPEND_ATOM(name) do { \
|
||||
MUST(g_atoms_id_to_name.insert(name, #name##_sv.substring(3))); \
|
||||
@@ -397,6 +411,12 @@ int main()
|
||||
continue;
|
||||
}
|
||||
|
||||
if (events[i].data.ptr == (void*)1)
|
||||
{
|
||||
s_dummy_window->poll_events();
|
||||
continue;
|
||||
}
|
||||
|
||||
auto it = g_epoll_thingies.find(events[i].data.fd);
|
||||
if (it == g_epoll_thingies.end())
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user