diff -ruN a/src/server.c b/src/server.c --- a/src/server.c 2025-05-02 11:41:57.000000000 -0400 +++ b/src/server.c 2025-07-11 14:53:03.269975308 -0400 @@ -58,6 +58,7 @@ static struct wlr_compositor *compositor; static struct wl_event_source *sighup_source; +static struct wl_event_source *sigusr1_source; static struct wl_event_source *sigint_source; static struct wl_event_source *sigterm_source; static struct wl_event_source *sigchld_source; @@ -102,6 +103,15 @@ } static int +handle_sigusr1(int signal, void *data) +{ + struct server *server = data; + + cursor_set_visible(&server->seat, false); + return 0; +} + +static int handle_sigterm(int signal, void *data) { struct wl_display *display = data; @@ -436,6 +446,8 @@ event_loop = wl_display_get_event_loop(server->wl_display); sighup_source = wl_event_loop_add_signal( event_loop, SIGHUP, handle_sighup, server); + sigusr1_source = wl_event_loop_add_signal( + event_loop, SIGUSR1, handle_sigusr1, server); sigint_source = wl_event_loop_add_signal( event_loop, SIGINT, handle_sigterm, server->wl_display); sigterm_source = wl_event_loop_add_signal( @@ -751,6 +763,9 @@ if (sighup_source) { wl_event_source_remove(sighup_source); } + if (sigusr1_source) { + wl_event_source_remove(sigusr1_source); + } wl_display_destroy_clients(server->wl_display); seat_finish(server);