From a187271ca4ba491c7614de540c4490e0f6fa118d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 7 Feb 2022 10:38:30 +0100 Subject: [PATCH] render: resize: finalize selection before reflowing the grid MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes a crash caused by the selection’s pivot point not being translated during reflow. While we could simply reflow the pivot point as well, testing shows irregular behavior with ongoing selections across window resizes, with different compositors behaving differently. For now, we simply finalize the selection, instead of trying to handle ongoing selections. Closes #922 --- render.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/render.c b/render.c index 024d0954..e189e1a0 100644 --- a/render.c +++ b/render.c @@ -3681,6 +3681,16 @@ maybe_resize(struct terminal *term, int width, int height, bool force) if (term->grid == &term->alt) selection_cancel(term); + else { + /* + * Don’t cancel, but make sure there aren’t any ongoing + * selections after the resize. + */ + tll_foreach(term->wl->seats, it) { + if (it->item.kbd_focus == term) + selection_finalize(&it->item, term, it->item.pointer.serial); + } + } struct coord *const tracking_points[] = { &term->selection.start,