From be8b6e8c75683e912034dd69ec5a68bbc84605ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Tue, 24 Mar 2020 17:42:29 +0100 Subject: [PATCH] render: fdm refresh handler: don't clear pending flags The pending flags may already be set (from a previous call to the FDM hook). In this case, they should not be cleared. --- render.c | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/render.c b/render.c index 85879733..46e849a4 100644 --- a/render.c +++ b/render.c @@ -1455,30 +1455,25 @@ frame_callback(void *data, struct wl_callback *wl_callback, uint32_t callback_da wl_callback_destroy(wl_callback); term->window->frame_callback = NULL; - if (term->render.pending.csd) { - term->render.pending.csd = false; + bool grid = term->render.pending.grid; + bool csd = term->render.pending.csd; + bool search = term->render.pending.search; - if (term->window->use_csd == CSD_YES) { - quirk_weston_csd_on(term); - render_csd(term); - quirk_weston_csd_off(term); - } + term->render.pending.grid = false; + term->render.pending.csd = false; + term->render.pending.search = false; + + if (csd && term->window->use_csd == CSD_YES) { + quirk_weston_csd_on(term); + render_csd(term); + quirk_weston_csd_off(term); } - if (term->render.pending.search) { - term->render.pending.search = false; + if (search && term->is_searching) + render_search_box(term); - if (term->is_searching) - render_search_box(term); - } - - if (term->render.pending.grid) { - term->render.pending.grid = false; - - /* TODO: need to check if this breaks GNOME/weston */ - if (!term->delayed_render_timer.is_armed) - grid_render(term); - } + if (grid && (!term->delayed_render_timer.is_armed || csd || search)) + grid_render(term); } /* Move to terminal.c? */ @@ -1823,9 +1818,9 @@ fdm_hook_refresh_pending_terminals(struct fdm *fdm, void *data) grid_render(term); } else { /* Tells the frame callback to render again */ - term->render.pending.grid = grid; - term->render.pending.csd = csd; - term->render.pending.search = search; + term->render.pending.grid |= grid; + term->render.pending.csd |= csd; + term->render.pending.search |= search; } }