diff options
author | adnano <me@adnano.co> | 2024-05-02 18:45:49 -0400 |
---|---|---|
committer | adnano <me@adnano.co> | 2024-05-02 18:45:49 -0400 |
commit | 1f221a73cf290ff509ef6c066ff692bb48f8625e (patch) | |
tree | abdd724cff64843e2dd5de22934d8d2d68ac5e37 /render.c | |
parent | 6284eea24b44d05260f96fe842fa9dd752185942 (diff) | |
download | wmenu-1f221a73cf290ff509ef6c066ff692bb48f8625e.tar.gz |
Fix destruction of pool buffers
Diffstat (limited to 'render.c')
-rw-r--r-- | render.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -7,11 +7,14 @@ #include "menu.h" #include "pango.h" +#include "pool-buffer.h" #include "wayland.h" // Calculate text widths. void calc_widths(struct menu *menu) { - cairo_t *cairo = menu->current->cairo; + struct wl_context *context = menu->context; + struct pool_buffer *current = context_get_current_buffer(context); + cairo_t *cairo = current->cairo; // Calculate prompt width if (menu->prompt) { @@ -195,13 +198,12 @@ void render_menu(struct menu *menu) { render_to_cairo(menu, cairo); int scale = context_get_scale(context); - menu->current = get_next_buffer(context_get_shm(context), - menu->buffers, menu->width, menu->height, scale); - if (!menu->current) { + struct pool_buffer *buffer = context_get_next_buffer(context, scale); + if (!buffer) { goto cleanup; } - cairo_t *shm = menu->current->cairo; + cairo_t *shm = buffer->cairo; cairo_save(shm); cairo_set_operator(shm, CAIRO_OPERATOR_CLEAR); cairo_paint(shm); @@ -211,7 +213,7 @@ void render_menu(struct menu *menu) { struct wl_surface *surface = context_get_surface(context); wl_surface_set_buffer_scale(surface, scale); - wl_surface_attach(surface, menu->current->buffer, 0, 0); + wl_surface_attach(surface, buffer->buffer, 0, 0); wl_surface_damage(surface, 0, 0, menu->width, menu->height); wl_surface_commit(surface); |