mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-04-13 08:21:03 -04:00
Merge branch 'master' into pad-extend
This commit is contained in:
commit
7c81816612
10 changed files with 102 additions and 38 deletions
30
CHANGELOG.md
30
CHANGELOG.md
|
|
@ -1,6 +1,7 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
* [Unreleased](#unreleased)
|
* [Unreleased](#unreleased)
|
||||||
|
* [1.26.1](#1-26-1)
|
||||||
* [1.26.0](#1-26-0)
|
* [1.26.0](#1-26-0)
|
||||||
* [1.25.0](#1-25-0)
|
* [1.25.0](#1-25-0)
|
||||||
* [1.24.0](#1-24-0)
|
* [1.24.0](#1-24-0)
|
||||||
|
|
@ -75,16 +76,39 @@
|
||||||
### Removed
|
### Removed
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
* Wrong documented default value for `initial-color-theme` in
|
* Other output (key presses, query replies etc) being mixed with paste
|
||||||
`foot.ini(5)` ([#2292][2292]).
|
data, both interactive pastes and OSC-52 ([#2307][2307]).
|
||||||
|
* Scrollback search not working correctly when the terminal
|
||||||
|
application has enabled the kitty keyboard protocol with release
|
||||||
|
event reporting ([#2316][2316]).
|
||||||
|
|
||||||
[2292]: https://codeberg.org/dnkl/foot/issues/2292
|
[2307]: https://codeberg.org/dnkl/foot/issues/2307
|
||||||
|
[2316]: https://codeberg.org/dnkl/foot/issues/2316
|
||||||
|
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
### Contributors
|
### Contributors
|
||||||
|
|
||||||
|
|
||||||
|
## 1.26.1
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* Wrong documented default value for `initial-color-theme` in
|
||||||
|
`foot.ini(5)` ([#2292][2292]).
|
||||||
|
* Occasional crashes when closing a window and
|
||||||
|
`tweak.pre-apply-damage=yes` (the default) ([#2288][2288]).
|
||||||
|
|
||||||
|
[2292]: https://codeberg.org/dnkl/foot/issues/2292
|
||||||
|
[2288]: https://codeberg.org/dnkl/foot/issues/2288
|
||||||
|
|
||||||
|
|
||||||
|
### Contributors
|
||||||
|
|
||||||
|
* Roshless
|
||||||
|
* vlkrs
|
||||||
|
|
||||||
|
|
||||||
## 1.26.0
|
## 1.26.0
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
||||||
2
char32.c
2
char32.c
|
|
@ -34,7 +34,7 @@ _Static_assert(
|
||||||
#if !defined(__STDC_UTF_32__) || !__STDC_UTF_32__
|
#if !defined(__STDC_UTF_32__) || !__STDC_UTF_32__
|
||||||
#error "char32_t does not use UTF-32"
|
#error "char32_t does not use UTF-32"
|
||||||
#endif
|
#endif
|
||||||
#if (!defined(__STDC_ISO_10646__) || !__STDC_ISO_10646__) && !defined(__FreeBSD__)
|
#if (!defined(__STDC_ISO_10646__) || !__STDC_ISO_10646__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
|
||||||
#error "wchar_t does not use UTF-32"
|
#error "wchar_t does not use UTF-32"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
7
input.c
7
input.c
|
|
@ -1643,31 +1643,34 @@ key_press_release(struct seat *seat, struct terminal *term, uint32_t serial,
|
||||||
seat->wayl->key_binding_manager, term->conf, seat);
|
seat->wayl->key_binding_manager, term->conf, seat);
|
||||||
xassert(bindings != NULL);
|
xassert(bindings != NULL);
|
||||||
|
|
||||||
if (pressed) {
|
|
||||||
if (term->unicode_mode.active) {
|
if (term->unicode_mode.active) {
|
||||||
|
if (pressed)
|
||||||
unicode_mode_input(seat, term, sym);
|
unicode_mode_input(seat, term, sym);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (term->is_searching) {
|
else if (term->is_searching) {
|
||||||
|
if (pressed) {
|
||||||
if (should_repeat)
|
if (should_repeat)
|
||||||
start_repeater(seat, key);
|
start_repeater(seat, key);
|
||||||
|
|
||||||
search_input(
|
search_input(
|
||||||
seat, term, bindings, key, sym, mods, consumed,
|
seat, term, bindings, key, sym, mods, consumed,
|
||||||
raw_syms, raw_count, serial);
|
raw_syms, raw_count, serial);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (urls_mode_is_active(term)) {
|
else if (urls_mode_is_active(term)) {
|
||||||
|
if (pressed) {
|
||||||
if (should_repeat)
|
if (should_repeat)
|
||||||
start_repeater(seat, key);
|
start_repeater(seat, key);
|
||||||
|
|
||||||
urls_input(
|
urls_input(
|
||||||
seat, term, bindings, key, sym, mods, consumed,
|
seat, term, bindings, key, sym, mods, consumed,
|
||||||
raw_syms, raw_count, serial);
|
raw_syms, raw_count, serial);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_DEBUG) && defined(LOG_ENABLE_DBG) && LOG_ENABLE_DBG
|
#if defined(_DEBUG) && defined(LOG_ENABLE_DBG) && LOG_ENABLE_DBG
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
project('foot', 'c',
|
project('foot', 'c',
|
||||||
version: '1.26.0',
|
version: '1.26.1',
|
||||||
license: 'MIT',
|
license: 'MIT',
|
||||||
meson_version: '>=0.59.0',
|
meson_version: '>=0.59.0',
|
||||||
default_options: [
|
default_options: [
|
||||||
|
|
@ -12,6 +12,11 @@ is_debug_build = get_option('buildtype').startswith('debug')
|
||||||
|
|
||||||
cc = meson.get_compiler('c')
|
cc = meson.get_compiler('c')
|
||||||
|
|
||||||
|
# Newer clang versions warns when using __COUNTER__ without -std=c2y
|
||||||
|
if cc.has_argument('-Wc2y-extensions')
|
||||||
|
add_project_arguments('-Wno-c2y-extensions', language: 'c')
|
||||||
|
endif
|
||||||
|
|
||||||
if cc.has_function('memfd_create',
|
if cc.has_function('memfd_create',
|
||||||
args: ['-D_GNU_SOURCE'],
|
args: ['-D_GNU_SOURCE'],
|
||||||
prefix: '#include <sys/mman.h>')
|
prefix: '#include <sys/mman.h>')
|
||||||
|
|
|
||||||
4
osc.c
4
osc.c
|
|
@ -261,12 +261,12 @@ osc_from_clipboard(struct terminal *term, const char *source)
|
||||||
|
|
||||||
if (from_clipboard) {
|
if (from_clipboard) {
|
||||||
text_from_clipboard(
|
text_from_clipboard(
|
||||||
seat, term, &from_clipboard_cb, &from_clipboard_done, ctx);
|
seat, term, true, &from_clipboard_cb, &from_clipboard_done, ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (from_primary) {
|
if (from_primary) {
|
||||||
text_from_primary(
|
text_from_primary(
|
||||||
seat, term, &from_clipboard_cb, &from_clipboard_done, ctx);
|
seat, term, true, &from_clipboard_cb, &from_clipboard_done, ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
4
search.c
4
search.c
|
|
@ -1375,13 +1375,13 @@ execute_binding(struct seat *seat, struct terminal *term,
|
||||||
|
|
||||||
case BIND_ACTION_SEARCH_CLIPBOARD_PASTE:
|
case BIND_ACTION_SEARCH_CLIPBOARD_PASTE:
|
||||||
text_from_clipboard(
|
text_from_clipboard(
|
||||||
seat, term, &from_clipboard_cb, &from_clipboard_done, term);
|
seat, term, false, &from_clipboard_cb, &from_clipboard_done, term);
|
||||||
*update_search_result = *redraw = true;
|
*update_search_result = *redraw = true;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case BIND_ACTION_SEARCH_PRIMARY_PASTE:
|
case BIND_ACTION_SEARCH_PRIMARY_PASTE:
|
||||||
text_from_primary(
|
text_from_primary(
|
||||||
seat, term, &from_clipboard_cb, &from_clipboard_done, term);
|
seat, term, false, &from_clipboard_cb, &from_clipboard_done, term);
|
||||||
*update_search_result = *redraw = true;
|
*update_search_result = *redraw = true;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
||||||
35
selection.c
35
selection.c
|
|
@ -2006,6 +2006,7 @@ struct clipboard_receive {
|
||||||
int timeout_fd;
|
int timeout_fd;
|
||||||
struct itimerspec timeout;
|
struct itimerspec timeout;
|
||||||
bool bracketed;
|
bool bracketed;
|
||||||
|
bool no_strip;
|
||||||
bool quote_paths;
|
bool quote_paths;
|
||||||
|
|
||||||
void (*decoder)(struct clipboard_receive *ctx, char *data, size_t size);
|
void (*decoder)(struct clipboard_receive *ctx, char *data, size_t size);
|
||||||
|
|
@ -2153,6 +2154,8 @@ static bool
|
||||||
fdm_receive(struct fdm *fdm, int fd, int events, void *data)
|
fdm_receive(struct fdm *fdm, int fd, int events, void *data)
|
||||||
{
|
{
|
||||||
struct clipboard_receive *ctx = data;
|
struct clipboard_receive *ctx = data;
|
||||||
|
const bool no_strip = ctx->no_strip;
|
||||||
|
const bool bracketed = ctx->bracketed;
|
||||||
|
|
||||||
if ((events & EPOLLHUP) && !(events & EPOLLIN))
|
if ((events & EPOLLHUP) && !(events & EPOLLIN))
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -2204,13 +2207,14 @@ fdm_receive(struct fdm *fdm, int fd, int events, void *data)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '\n':
|
case '\n':
|
||||||
if (!ctx->bracketed)
|
if (!no_strip && !bracketed) {
|
||||||
p[i] = '\r';
|
p[i] = '\r';
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '\r':
|
case '\r':
|
||||||
/* Convert \r\n -> \r */
|
/* Convert \r\n -> \r */
|
||||||
if (!ctx->bracketed && i + 1 < left && p[i + 1] == '\n') {
|
if (!no_strip && !bracketed && i + 1 < left && p[i + 1] == '\n') {
|
||||||
i++;
|
i++;
|
||||||
skip_one();
|
skip_one();
|
||||||
goto again;
|
goto again;
|
||||||
|
|
@ -2223,8 +2227,11 @@ fdm_receive(struct fdm *fdm, int fd, int events, void *data)
|
||||||
case '\x11': case '\x12': case '\x13': case '\x14': case '\x15':
|
case '\x11': case '\x12': case '\x13': case '\x14': case '\x15':
|
||||||
case '\x16': case '\x17': case '\x18': case '\x19': case '\x1a':
|
case '\x16': case '\x17': case '\x18': case '\x19': case '\x1a':
|
||||||
case '\x1b': case '\x1c': case '\x1d': case '\x1e': case '\x1f':
|
case '\x1b': case '\x1c': case '\x1d': case '\x1e': case '\x1f':
|
||||||
|
if (!no_strip) {
|
||||||
skip_one();
|
skip_one();
|
||||||
goto again;
|
goto again;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In addition to stripping non-formatting C0 controls,
|
* In addition to stripping non-formatting C0 controls,
|
||||||
|
|
@ -2242,7 +2249,7 @@ fdm_receive(struct fdm *fdm, int fd, int events, void *data)
|
||||||
* handled above.
|
* handled above.
|
||||||
*/
|
*/
|
||||||
case '\b': case '\x7f': case '\x00':
|
case '\b': case '\x7f': case '\x00':
|
||||||
if (!ctx->bracketed) {
|
if (!no_strip && !bracketed) {
|
||||||
skip_one();
|
skip_one();
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
@ -2263,8 +2270,8 @@ done:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
begin_receive_clipboard(struct terminal *term, int read_fd,
|
begin_receive_clipboard(struct terminal *term, bool no_strip,
|
||||||
enum data_offer_mime_type mime_type,
|
int read_fd, enum data_offer_mime_type mime_type,
|
||||||
void (*cb)(char *data, size_t size, void *user),
|
void (*cb)(char *data, size_t size, void *user),
|
||||||
void (*done)(void *user), void *user)
|
void (*done)(void *user), void *user)
|
||||||
{
|
{
|
||||||
|
|
@ -2297,6 +2304,7 @@ begin_receive_clipboard(struct terminal *term, int read_fd,
|
||||||
.timeout_fd = timeout_fd,
|
.timeout_fd = timeout_fd,
|
||||||
.timeout = timeout,
|
.timeout = timeout,
|
||||||
.bracketed = term->bracketed_paste,
|
.bracketed = term->bracketed_paste,
|
||||||
|
.no_strip = no_strip,
|
||||||
.quote_paths = term->grid == &term->normal,
|
.quote_paths = term->grid == &term->normal,
|
||||||
.decoder = (mime_type == DATA_OFFER_MIME_URI_LIST
|
.decoder = (mime_type == DATA_OFFER_MIME_URI_LIST
|
||||||
? &fdm_receive_decoder_uri
|
? &fdm_receive_decoder_uri
|
||||||
|
|
@ -2326,6 +2334,7 @@ err:
|
||||||
|
|
||||||
void
|
void
|
||||||
text_from_clipboard(struct seat *seat, struct terminal *term,
|
text_from_clipboard(struct seat *seat, struct terminal *term,
|
||||||
|
bool no_strip,
|
||||||
void (*cb)(char *data, size_t size, void *user),
|
void (*cb)(char *data, size_t size, void *user),
|
||||||
void (*done)(void *user), void *user)
|
void (*done)(void *user), void *user)
|
||||||
{
|
{
|
||||||
|
|
@ -2358,7 +2367,8 @@ text_from_clipboard(struct seat *seat, struct terminal *term,
|
||||||
/* Don't keep our copy of the write-end open (or we'll never get EOF) */
|
/* Don't keep our copy of the write-end open (or we'll never get EOF) */
|
||||||
close(write_fd);
|
close(write_fd);
|
||||||
|
|
||||||
begin_receive_clipboard(term, read_fd, clipboard->mime_type, cb, done, user);
|
begin_receive_clipboard(
|
||||||
|
term, no_strip, read_fd, clipboard->mime_type, cb, done, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -2401,7 +2411,8 @@ selection_from_clipboard(struct seat *seat, struct terminal *term, uint32_t seri
|
||||||
if (term->bracketed_paste)
|
if (term->bracketed_paste)
|
||||||
term_paste_data_to_slave(term, "\033[200~", 6);
|
term_paste_data_to_slave(term, "\033[200~", 6);
|
||||||
|
|
||||||
text_from_clipboard(seat, term, &receive_offer, &receive_offer_done, term);
|
text_from_clipboard(
|
||||||
|
seat, term, false, &receive_offer, &receive_offer_done, term);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
@ -2470,7 +2481,7 @@ selection_to_primary(struct seat *seat, struct terminal *term, uint32_t serial)
|
||||||
|
|
||||||
void
|
void
|
||||||
text_from_primary(
|
text_from_primary(
|
||||||
struct seat *seat, struct terminal *term,
|
struct seat *seat, struct terminal *term, bool no_strip,
|
||||||
void (*cb)(char *data, size_t size, void *user),
|
void (*cb)(char *data, size_t size, void *user),
|
||||||
void (*done)(void *user), void *user)
|
void (*done)(void *user), void *user)
|
||||||
{
|
{
|
||||||
|
|
@ -2508,7 +2519,8 @@ text_from_primary(
|
||||||
/* Don't keep our copy of the write-end open (or we'll never get EOF) */
|
/* Don't keep our copy of the write-end open (or we'll never get EOF) */
|
||||||
close(write_fd);
|
close(write_fd);
|
||||||
|
|
||||||
begin_receive_clipboard(term, read_fd, primary->mime_type, cb, done, user);
|
begin_receive_clipboard(
|
||||||
|
term, no_strip, read_fd, primary->mime_type, cb, done, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -2530,7 +2542,8 @@ selection_from_primary(struct seat *seat, struct terminal *term)
|
||||||
if (term->bracketed_paste)
|
if (term->bracketed_paste)
|
||||||
term_paste_data_to_slave(term, "\033[200~", 6);
|
term_paste_data_to_slave(term, "\033[200~", 6);
|
||||||
|
|
||||||
text_from_primary(seat, term, &receive_offer, &receive_offer_done, term);
|
text_from_primary(
|
||||||
|
seat, term, false, &receive_offer, &receive_offer_done, term);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -2819,7 +2832,7 @@ drop(void *data, struct wl_data_device *wl_data_device)
|
||||||
term_paste_data_to_slave(term, "\033[200~", 6);
|
term_paste_data_to_slave(term, "\033[200~", 6);
|
||||||
|
|
||||||
begin_receive_clipboard(
|
begin_receive_clipboard(
|
||||||
term, read_fd, clipboard->mime_type,
|
term, false, read_fd, clipboard->mime_type,
|
||||||
&receive_dnd, &receive_dnd_done, ctx);
|
&receive_dnd, &receive_dnd_done, ctx);
|
||||||
|
|
||||||
/* data offer is now "owned" by the receive context */
|
/* data offer is now "owned" by the receive context */
|
||||||
|
|
|
||||||
|
|
@ -63,12 +63,12 @@ bool text_to_primary(
|
||||||
* point).
|
* point).
|
||||||
*/
|
*/
|
||||||
void text_from_clipboard(
|
void text_from_clipboard(
|
||||||
struct seat *seat, struct terminal *term,
|
struct seat *seat, struct terminal *term, bool no_strip,
|
||||||
void (*cb)(char *data, size_t size, void *user),
|
void (*cb)(char *data, size_t size, void *user),
|
||||||
void (*done)(void *user), void *user);
|
void (*done)(void *user), void *user);
|
||||||
|
|
||||||
void text_from_primary(
|
void text_from_primary(
|
||||||
struct seat *seat, struct terminal *term,
|
struct seat *seat, struct terminal *term, bool no_strip,
|
||||||
void (*cb)(char *data, size_t size, void *user),
|
void (*cb)(char *data, size_t size, void *user),
|
||||||
void (*dont)(void *user), void *user);
|
void (*dont)(void *user), void *user);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,10 @@ term_to_slave(struct terminal *term, const void *data, size_t len)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tll_length(term->ptmx_buffers) > 0 || term->is_sending_paste_data) {
|
if (unlikely(tll_length(term->ptmx_buffers) > 0 ||
|
||||||
|
term->is_sending_paste_data ||
|
||||||
|
tll_length(term->ptmx_paste_buffers) > 0))
|
||||||
|
{
|
||||||
/*
|
/*
|
||||||
* Don't even try to send data *now* if there's queued up
|
* Don't even try to send data *now* if there's queued up
|
||||||
* data, since that would result in events arriving out of
|
* data, since that would result in events arriving out of
|
||||||
|
|
|
||||||
26
wayland.c
26
wayland.c
|
|
@ -1,5 +1,6 @@
|
||||||
#include "wayland.h"
|
#include "wayland.h"
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
@ -245,19 +246,34 @@ shm_format(void *data, struct wl_shm *wl_shm, uint32_t format)
|
||||||
case WL_SHM_FORMAT_ABGR16161616: wayl->shm_have_abgr161616 = true; break;
|
case WL_SHM_FORMAT_ABGR16161616: wayl->shm_have_abgr161616 = true; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG) && LOG_ENABLE_DBG == 1
|
||||||
bool have_description = false;
|
bool have_description = false;
|
||||||
|
const char c4 = (format >> 24) & 0xff;
|
||||||
|
const char c3 = (format >> 16) & 0xff;
|
||||||
|
const char c2 = (format >> 8) & 0xff;
|
||||||
|
const char c1 = (format >> 0) & 0xff;
|
||||||
|
|
||||||
for (size_t i = 0; i < ALEN(shm_formats); i++) {
|
for (size_t i = 0; i < ALEN(shm_formats); i++) {
|
||||||
if (shm_formats[i].format == format) {
|
if (shm_formats[i].format == format) {
|
||||||
LOG_DBG("shm: 0x%08x: %s", format, shm_formats[i].description);
|
LOG_DBG("shm: 0x%08x: %c%c%c%c - %s",
|
||||||
|
format,
|
||||||
|
isprint(c1) ? c1 : ' ',
|
||||||
|
isprint(c2) ? c2 : ' ',
|
||||||
|
isprint(c3) ? c3 : ' ',
|
||||||
|
isprint(c4) ? c4 : ' ',
|
||||||
|
shm_formats[i].description);
|
||||||
have_description = true;
|
have_description = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!have_description)
|
if (!have_description)
|
||||||
LOG_DBG("shm: 0x%08x: unknown", format);
|
LOG_DBG("shm: 0x%08x: %c%c%c%c - unknown",
|
||||||
|
format,
|
||||||
|
isprint(c1) ? c1 : ' ',
|
||||||
|
isprint(c2) ? c2 : ' ',
|
||||||
|
isprint(c3) ? c3 : ' ',
|
||||||
|
isprint(c4) ? c4 : ' ');
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2177,8 +2193,6 @@ wayl_win_destroy(struct wl_window *win)
|
||||||
|
|
||||||
struct terminal *term = win->term;
|
struct terminal *term = win->term;
|
||||||
|
|
||||||
render_wait_for_preapply_damage(term);
|
|
||||||
|
|
||||||
if (win->csd.move_timeout_fd != -1)
|
if (win->csd.move_timeout_fd != -1)
|
||||||
close(win->csd.move_timeout_fd);
|
close(win->csd.move_timeout_fd);
|
||||||
|
|
||||||
|
|
@ -2236,6 +2250,8 @@ wayl_win_destroy(struct wl_window *win)
|
||||||
tll_remove(win->urls, it);
|
tll_remove(win->urls, it);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
render_wait_for_preapply_damage(term);
|
||||||
|
|
||||||
csd_destroy(win);
|
csd_destroy(win);
|
||||||
wayl_win_subsurface_destroy(&win->search);
|
wayl_win_subsurface_destroy(&win->search);
|
||||||
wayl_win_subsurface_destroy(&win->scrollback_indicator);
|
wayl_win_subsurface_destroy(&win->scrollback_indicator);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue