mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
Merge branch 'master' into releases/1.16
This commit is contained in:
commit
ee7e6e7234
4 changed files with 47 additions and 16 deletions
21
CHANGELOG.md
21
CHANGELOG.md
|
|
@ -1,5 +1,6 @@
|
|||
# Changelog
|
||||
|
||||
* [Unreleased](#unreleased)
|
||||
* [1.16.0](#1-16-0)
|
||||
* [1.15.3](#1-15-3)
|
||||
* [1.15.2](#1-15-2)
|
||||
|
|
@ -46,13 +47,31 @@
|
|||
* [1.2.0](#1-2-0)
|
||||
|
||||
|
||||
## Unreleased
|
||||
### Added
|
||||
### Changed
|
||||
### Deprecated
|
||||
### Removed
|
||||
### Fixed
|
||||
|
||||
* Foot not starting on linux kernels before 6.3 ([#1514][1514]).
|
||||
* Cells underneath erased sixels not being repainted ([#1515][1515]).
|
||||
|
||||
[1514]: https://codeberg.org/dnkl/foot/issues/1514
|
||||
[1515]: https://codeberg.org/dnkl/foot/issues/1515
|
||||
|
||||
|
||||
### Security
|
||||
### Contributors
|
||||
|
||||
|
||||
## 1.16.0
|
||||
|
||||
### Added
|
||||
|
||||
* Support for building with _wayland-protocols_ as a subproject.
|
||||
* Mouse wheel scrolls can now be used in `mouse-bindings`
|
||||
([#1077](1077)).
|
||||
([#1077][1077]).
|
||||
* New mouse bindings: `scrollback-up-mouse` and
|
||||
`scrollback-down-mouse`, bound to `BTN_BACK` and `BTN_FORWARD`
|
||||
respectively.
|
||||
|
|
|
|||
19
render.c
19
render.c
|
|
@ -1199,7 +1199,8 @@ render_sixel_chunk(struct terminal *term, pixman_image_t *pix, const struct sixe
|
|||
|
||||
static void
|
||||
render_sixel(struct terminal *term, pixman_image_t *pix,
|
||||
const struct coord *cursor, const struct sixel *sixel)
|
||||
pixman_region32_t *damage, const struct coord *cursor,
|
||||
const struct sixel *sixel)
|
||||
{
|
||||
xassert(sixel->pix != NULL);
|
||||
xassert(sixel->width >= 0);
|
||||
|
|
@ -1293,8 +1294,7 @@ render_sixel(struct terminal *term, pixman_image_t *pix,
|
|||
*/
|
||||
if (!sixel->opaque) {
|
||||
/* TODO: multithreading */
|
||||
int cursor_col = cursor->row == term_row_no ? cursor->col : -1;
|
||||
render_row(term, pix, NULL, row, term_row_no, cursor_col);
|
||||
render_row(term, pix, damage, row, term_row_no, cursor_col);
|
||||
} else {
|
||||
for (int col = sixel->pos.col;
|
||||
col < min(sixel->pos.col + sixel->cols, term->cols);
|
||||
|
|
@ -1309,7 +1309,7 @@ render_sixel(struct terminal *term, pixman_image_t *pix,
|
|||
if ((last_row_needs_erase && last_row) ||
|
||||
(last_col_needs_erase && last_col))
|
||||
{
|
||||
render_cell(term, pix, NULL, row, term_row_no, col, cursor_col == col);
|
||||
render_cell(term, pix, damage, row, term_row_no, col, cursor_col);
|
||||
} else {
|
||||
cell->attrs.clean = 1;
|
||||
cell->attrs.confined = 1;
|
||||
|
|
@ -1333,6 +1333,7 @@ render_sixel(struct terminal *term, pixman_image_t *pix,
|
|||
|
||||
static void
|
||||
render_sixel_images(struct terminal *term, pixman_image_t *pix,
|
||||
pixman_region32_t *damage,
|
||||
const struct coord *cursor)
|
||||
{
|
||||
if (likely(tll_length(term->grid->sixel_images)) == 0)
|
||||
|
|
@ -1370,7 +1371,7 @@ render_sixel_images(struct terminal *term, pixman_image_t *pix,
|
|||
}
|
||||
|
||||
sixel_sync_cache(term, &it->item);
|
||||
render_sixel(term, pix, cursor, &it->item);
|
||||
render_sixel(term, pix, damage, cursor, &it->item);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2974,7 +2975,10 @@ grid_render(struct terminal *term)
|
|||
}
|
||||
}
|
||||
|
||||
render_sixel_images(term, buf->pix[0], &cursor);
|
||||
pixman_region32_t damage;
|
||||
pixman_region32_init(&damage);
|
||||
|
||||
render_sixel_images(term, buf->pix[0], &damage, &cursor);
|
||||
|
||||
if (term->render.workers.count > 0) {
|
||||
mtx_lock(&term->render.workers.lock);
|
||||
|
|
@ -2985,9 +2989,6 @@ grid_render(struct terminal *term)
|
|||
xassert(tll_length(term->render.workers.queue) == 0);
|
||||
}
|
||||
|
||||
pixman_region32_t damage;
|
||||
pixman_region32_init(&damage);
|
||||
|
||||
for (int r = 0; r < term->rows; r++) {
|
||||
struct row *row = grid_row_in_view(term->grid, r);
|
||||
|
||||
|
|
|
|||
21
shm.c
21
shm.c
|
|
@ -27,10 +27,8 @@
|
|||
#define MAP_UNINITIALIZED 0
|
||||
#endif
|
||||
|
||||
#if defined(MFD_NOEXEC_SEAL)
|
||||
#define FOOT_MFD_FLAGS (MFD_CLOEXEC | MFD_ALLOW_SEALING | MFD_NOEXEC_SEAL)
|
||||
#else
|
||||
#define FOOT_MFD_FLAGS (MFD_CLOEXEC | MFD_ALLOW_SEALING)
|
||||
#if !defined(MFD_NOEXEC_SEAL)
|
||||
#define MFD_NOEXEC_SEAL 0
|
||||
#endif
|
||||
|
||||
#define TIME_SCROLL 0
|
||||
|
|
@ -339,7 +337,20 @@ get_new_buffers(struct buffer_chain *chain, size_t count,
|
|||
|
||||
/* Backing memory for SHM */
|
||||
#if defined(MEMFD_CREATE)
|
||||
pool_fd = memfd_create("foot-wayland-shm-buffer-pool", FOOT_MFD_FLAGS);
|
||||
/*
|
||||
* Older kernels reject MFD_NOEXEC_SEAL with EINVAL. Try first
|
||||
* *with* it, and if that fails, try again *without* it.
|
||||
*/
|
||||
errno = 0;
|
||||
pool_fd = memfd_create(
|
||||
"foot-wayland-shm-buffer-pool",
|
||||
MFD_CLOEXEC | MFD_ALLOW_SEALING | MFD_NOEXEC_SEAL);
|
||||
|
||||
if (pool_fd < 0 && errno == EINVAL) {
|
||||
pool_fd = memfd_create(
|
||||
"foot-wayland-shm-buffer-pool", MFD_CLOEXEC | MFD_ALLOW_SEALING);
|
||||
}
|
||||
|
||||
#elif defined(__FreeBSD__)
|
||||
// memfd_create on FreeBSD 13 is SHM_ANON without sealing support
|
||||
pool_fd = shm_open(SHM_ANON, O_RDWR | O_CLOEXEC, 0600);
|
||||
|
|
|
|||
2
sixel.c
2
sixel.c
|
|
@ -180,7 +180,7 @@ sixel_erase(struct terminal *term, struct sixel *sixel)
|
|||
|
||||
row->dirty = true;
|
||||
|
||||
for (int c = sixel->pos.col; c < min(sixel->cols, term->cols); c++)
|
||||
for (int c = sixel->pos.col; c < min(sixel->pos.col + sixel->cols, term->cols); c++)
|
||||
row->cells[c].attrs.clean = 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue