From 9e2ca2b1a3603b58a138ad99d5606df264cc163f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 8 Feb 2020 14:08:16 +0100 Subject: [PATCH] render: add render_resize_force() This forces a full resize operation, even though actual window size (or scale) hasn't changed. --- render.c | 23 ++++++++++++++++++----- render.h | 2 ++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/render.c b/render.c index f97a957f..980d5fe2 100644 --- a/render.c +++ b/render.c @@ -995,10 +995,10 @@ reflow(struct row **new_grid, int new_cols, int new_rows, } /* Move to terminal.c? */ -void -render_resize(struct terminal *term, int width, int height) +static void +maybe_resize(struct terminal *term, int width, int height, bool force) { - if (width == 0 || height == 0) + if (!force && (width == 0 || height == 0)) return; int scale = -1; @@ -1015,12 +1015,12 @@ render_resize(struct terminal *term, int width, int height) width *= scale; height *= scale; - if (width == 0 && height == 0) { + if (!force && width == 0 && height == 0) { /* Assume we're not fully up and running yet */ return; } - if (width == term->width && height == term->height && scale == term->scale) + if (!force && width == term->width && height == term->height && scale == term->scale) return; /* Cancel an application initiated "Synchronized Update" */ @@ -1124,10 +1124,23 @@ render_resize(struct terminal *term, int width, int height) term->render.last_cursor.cell = NULL; + term->render.last_buf = NULL; term_damage_view(term); render_refresh(term); } +void +render_resize(struct terminal *term, int width, int height) +{ + return maybe_resize(term, width, height, false); +} + +void +render_resize_force(struct terminal *term, int width, int height) +{ + return maybe_resize(term, width, height, true); +} + static void xcursor_callback( void *data, struct wl_callback *wl_callback, uint32_t callback_data); diff --git a/render.h b/render.h index 43f5314e..3bd52fa5 100644 --- a/render.h +++ b/render.h @@ -9,6 +9,8 @@ struct renderer *render_init(struct fdm *fdm, struct wayland *wayl); void render_destroy(struct renderer *renderer); void render_resize(struct terminal *term, int width, int height); +void render_resize_force(struct terminal *term, int width, int height); + void render_set_title(struct terminal *term, const char *title); void render_refresh(struct terminal *term); bool render_xcursor_set(struct terminal *term);