From f4f1989b6ef341557cc90a6805d745fef2a7a815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 6 Oct 2022 17:23:56 +0200 Subject: [PATCH] render: resize: ignore ptmx read events during interactive resize --- render.c | 4 ++++ terminal.c | 12 ++++++++++++ terminal.h | 3 +++ 3 files changed, 19 insertions(+) diff --git a/render.c b/render.c index d2fce8b0..3cb544cd 100644 --- a/render.c +++ b/render.c @@ -3700,6 +3700,8 @@ delayed_reflow_of_normal_grid(struct terminal *term) if (term->grid == &term->normal) term_damage_view(term); + + term_ptmx_resume(term); } static bool @@ -3939,6 +3941,7 @@ maybe_resize(struct terminal *term, int width, int height, bool force) } term->normal = g; + term_ptmx_pause(term); } /* Screen rows/cols before resize */ @@ -4028,6 +4031,7 @@ maybe_resize(struct terminal *term, int width, int height, bool force) term->render.resizing.grid = NULL; term->render.resizing.screen_rows = 0; + term_ptmx_resume(term); } struct coord *const tracking_points[] = { diff --git a/terminal.c b/terminal.c index df17201b..ee12ae32 100644 --- a/terminal.c +++ b/terminal.c @@ -233,6 +233,18 @@ static struct timespec last = {0}; static bool cursor_blink_rearm_timer(struct terminal *term); +void +term_ptmx_pause(struct terminal *term) +{ + fdm_event_del(term->fdm, term->ptmx, EPOLLIN); +} + +void +term_ptmx_resume(struct terminal *term) +{ + fdm_event_add(term->fdm, term->ptmx, EPOLLIN); +} + /* Externally visible, but not declared in terminal.h, to enable pgo * to call this function directly */ bool diff --git a/terminal.h b/terminal.h index 3afd101d..7a281e72 100644 --- a/terminal.h +++ b/terminal.h @@ -810,6 +810,9 @@ void term_collect_urls(struct terminal *term); void term_osc8_open(struct terminal *term, uint64_t id, const char *uri); void term_osc8_close(struct terminal *term); +void term_ptmx_pause(struct terminal *term); +void term_ptmx_resume(struct terminal *term); + static inline void term_reset_grapheme_state(struct terminal *term) { #if defined(FOOT_GRAPHEME_CLUSTERING)