diff options
author | dec05eba <dec05eba@protonmail.com> | 2024-11-26 18:27:56 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2024-11-26 18:27:56 +0100 |
commit | 5cfca3e55a49e8656c987c1e8b15da3c4380d6ff (patch) | |
tree | bb890f096d7f6eba3d27cb9f1069fb2c9a860128 | |
parent | 99acbdb59617460e29acd708b96de2f1f1fb4f88 (diff) |
Properly close program when disconnected from the X server
m--------- | depends/mglpp | 0 | ||||
-rw-r--r-- | src/Overlay.cpp | 24 | ||||
-rw-r--r-- | src/main.cpp | 21 |
3 files changed, 17 insertions, 28 deletions
diff --git a/depends/mglpp b/depends/mglpp -Subproject 9800cff631f1a82ee87005aabdefb3f5da7fadb +Subproject 7f0a03d90e2d13632d22eb43447f553a695ddd9 diff --git a/src/Overlay.cpp b/src/Overlay.cpp index f19e460..25817f5 100644 --- a/src/Overlay.cpp +++ b/src/Overlay.cpp @@ -642,11 +642,11 @@ namespace gsr { make_window_sticky(display, window->get_system_handle()); hide_window_from_taskbar(display, window->get_system_handle()); - if(default_cursor) { - XFreeCursor(display, default_cursor); - default_cursor = 0; - } - default_cursor = XCreateFontCursor(display, XC_arrow); + // if(default_cursor) { + // XFreeCursor(display, default_cursor); + // default_cursor = 0; + // } + // default_cursor = XCreateFontCursor(display, XC_arrow); // TODO: Retry if these fail. // TODO: Hmm, these dont work in owlboy. Maybe owlboy uses xi2 and that breaks this (does it?). @@ -701,14 +701,14 @@ namespace gsr { page_stack.pop(); } - if(default_cursor) { - XFreeCursor(display, default_cursor); - default_cursor = 0; - } + // if(default_cursor) { + // XFreeCursor(display, default_cursor); + // default_cursor = 0; + // } - XUngrabKeyboard(display, CurrentTime); - XUngrabPointer(display, CurrentTime); - XFlush(display); + // XUngrabKeyboard(display, CurrentTime); + // XUngrabPointer(display, CurrentTime); + // XFlush(display); window_texture_deinit(&window_texture); window_texture_sprite.set_texture(nullptr); diff --git a/src/main.cpp b/src/main.cpp index 4a36fe7..a030dbb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,6 @@ #include <unistd.h> #include <signal.h> -#include <sys/socket.h> #include <thread> #include <X11/keysym.h> @@ -39,13 +38,6 @@ static void disable_prime_run() { unsetenv("__VK_LAYER_NV_optimus"); } -static bool is_socket_disconnected(int socket) { - char buf = '\0'; - errno = 0; - const ssize_t bytes_read = recv(socket, &buf, 1, MSG_PEEK | MSG_DONTWAIT); - return bytes_read == 0 || (bytes_read == -1 && (errno == EBADF || errno == ENOTCONN)); -} - int main(void) { setlocale(LC_ALL, "C"); // Sigh... stupid C @@ -70,7 +62,7 @@ int main(void) { signal(SIGINT, sigint_handler); if(mgl_init() != 0) { - fprintf(stderr, "error: failed to initialize mgl. Either failed to connec to the X11 server or failed to setup opengl\n"); + fprintf(stderr, "error: failed to initialize mgl. Failed to either connect to the X11 server or setup opengl\n"); exit(1); } @@ -199,19 +191,16 @@ int main(void) { fprintf(stderr, "error: failed to register hotkey alt+f10 for saving replay because the hotkey is registered by another program\n"); mgl::Clock frame_delta_clock; - while(running) { - if(is_socket_disconnected(x11_socket)) { - fprintf(stderr, "info: the X11 server has shutdown\n"); - break; - } - + while(running && mgl_is_connected_to_display_server()) { const double frame_delta_seconds = frame_delta_clock.restart(); gsr::set_frame_delta_seconds(frame_delta_seconds); global_hotkeys.poll_events(); overlay->handle_events(); - if(!overlay->draw()) + if(!overlay->draw()) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); + mgl_ping_display_server(); + } } fprintf(stderr, "info: shutting down!\n"); |