mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-26 01:40:12 -05:00
shm: associate a 'cookie' with each buffer
When re-using a buffer from cache, only re-use ones with a matching cookie. This prevents contention between multiple terminal windows.
This commit is contained in:
parent
8df82938b0
commit
00b46455a0
3 changed files with 22 additions and 9 deletions
12
render.c
12
render.c
|
|
@ -441,10 +441,13 @@ grid_render(struct terminal *term)
|
|||
assert(term->width > 0);
|
||||
assert(term->height > 0);
|
||||
|
||||
struct buffer *buf = shm_get_buffer(term->wl->shm, term->width, term->height);
|
||||
wl_surface_attach(term->window->surface, buf->wl_buf, 0, 0);
|
||||
pixman_image_t *pix = buf->pix;
|
||||
unsigned long cookie = (uintptr_t)term;
|
||||
struct buffer *buf = shm_get_buffer(
|
||||
term->wl->shm, term->width, term->height, cookie);
|
||||
|
||||
wl_surface_attach(term->window->surface, buf->wl_buf, 0, 0);
|
||||
|
||||
pixman_image_t *pix = buf->pix;
|
||||
bool all_clean = tll_length(term->grid->scroll_damage) == 0;
|
||||
|
||||
/* If we resized the window, or is flashing, or just stopped flashing */
|
||||
|
|
@ -754,7 +757,8 @@ render_search_box(struct terminal *term)
|
|||
const int width = 2 * margin + max(20, term->search.len) * term->cell_width;
|
||||
const int height = 2 * margin + 1 * term->cell_height;
|
||||
|
||||
struct buffer *buf = shm_get_buffer(term->wl->shm, width, height);
|
||||
unsigned long cookie = (uintptr_t)term;
|
||||
struct buffer *buf = shm_get_buffer(term->wl->shm, width, height, cookie);
|
||||
|
||||
/* Background - yellow on empty/match, red on mismatch */
|
||||
pixman_color_t color = color_hex_to_pixman(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue