From 6416e742ac2e3b84fe7bcccd7d9ae3258b389e1f Mon Sep 17 00:00:00 2001 From: speckitor Date: Tue, 13 Jan 2026 11:35:02 +0700 Subject: [PATCH] fix crash on new toplevel when running on tty --- src/keyboard.c | 20 ++++++++++++-------- src/main.c | 10 ++++++++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index 7436682..e5791f4 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -24,14 +24,6 @@ static bool keyboard_handle_keybind(struct absinthe_server *server, xkb_keysym_t struct wlr_xdg_toplevel *xdg_toplevel; struct absinthe_toplevel *toplevel; - surface = server->seat->pointer_state.focused_surface; - - if (surface) - xdg_toplevel = wlr_xdg_toplevel_try_from_wlr_surface(surface); - - if (xdg_toplevel) - toplevel = xdg_toplevel->base->data; - switch (keysym) { case XKB_KEY_Escape: wl_display_terminate(server->display); @@ -40,7 +32,19 @@ static bool keyboard_handle_keybind(struct absinthe_server *server, xkb_keysym_t if (fork() == 0) execl("/bin/sh", "sh", "-c", "alacritty", NULL); break; + case XKB_KEY_r: + if (fork() == 0) + execl("/bin/sh", "sh", "-c", "wofi --show drun", NULL); + break; case XKB_KEY_f: + surface = server->seat->pointer_state.focused_surface; + + if (surface) + xdg_toplevel = wlr_xdg_toplevel_try_from_wlr_surface(surface); + + if (xdg_toplevel) + toplevel = xdg_toplevel->base->data; + if (toplevel) absinthe_toplevel_set_fullscreen(toplevel, !toplevel->fullscreen); break; diff --git a/src/main.c b/src/main.c index 00f66a4..55114d9 100644 --- a/src/main.c +++ b/src/main.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -45,7 +46,13 @@ int main(int argc, char **argv) return 1; } - wlr_renderer_init_wl_display(server.renderer, server.display); + wlr_renderer_init_wl_shm(server.renderer, server.display); + + server.scene = wlr_scene_create(); + if (wlr_renderer_get_texture_formats(server.renderer, WLR_BUFFER_CAP_DMABUF)) { + wlr_drm_create(server.display, server.renderer); + wlr_scene_set_linux_dmabuf_v1(server.scene, wlr_linux_dmabuf_v1_create_with_renderer(server.display, 5, server.renderer)); + } server.allocator = wlr_allocator_autocreate(server.backend, server.renderer); if (!server.allocator) { @@ -85,7 +92,6 @@ int main(int argc, char **argv) wlr_xdg_output_manager_v1_create(server.display, server.output_layout); - server.scene = wlr_scene_create(); server.scene_layout = wlr_scene_attach_output_layout(server.scene, server.output_layout); wl_list_init(&server.toplevels);