diff --git a/osc.c b/osc.c index dcfaf524..50d6ab3b 100644 --- a/osc.c +++ b/osc.c @@ -619,6 +619,7 @@ osc_dispatch(struct terminal *term) term_damage_view(term); render_refresh(term); + render_refresh_margins(term); break; } @@ -706,6 +707,7 @@ osc_dispatch(struct terminal *term) term->colors.bg = term->colors.default_bg; term_damage_view(term); render_refresh(term); + render_refresh_margins(term); break; case 112: diff --git a/render.c b/render.c index db60e7ca..08caabc7 100644 --- a/render.c +++ b/render.c @@ -1535,7 +1535,7 @@ static const struct wl_callback_listener frame_listener = { }; static void -grid_render(struct terminal *term) +grid_render(struct terminal *term, bool redraw_margins) { if (term->is_shutting_down) return; @@ -1554,14 +1554,16 @@ grid_render(struct terminal *term) /* If we resized the window, or is flashing, or just stopped flashing */ if (term->render.last_buf != buf || term->flash.active || term->render.was_flashing || - term->is_searching != term->render.was_searching) + term->is_searching != term->render.was_searching || + redraw_margins) { if (term->render.last_buf != NULL && term->render.last_buf->width == buf->width && term->render.last_buf->height == buf->height && !term->flash.active && !term->render.was_flashing && - term->is_searching == term->render.was_searching) + term->is_searching == term->render.was_searching && + !redraw_margins) { static bool has_warned = false; if (!has_warned) { @@ -1932,11 +1934,13 @@ frame_callback(void *data, struct wl_callback *wl_callback, uint32_t callback_da term->window->frame_callback = NULL; bool grid = term->render.pending.grid; + bool margins = term->render.pending.margins; bool csd = term->render.pending.csd; bool search = term->render.pending.search; bool title = term->render.pending.title; term->render.pending.grid = false; + term->render.pending.margins = false; term->render.pending.csd = false; term->render.pending.search = false; term->render.pending.title = false; @@ -1953,8 +1957,11 @@ frame_callback(void *data, struct wl_callback *wl_callback, uint32_t callback_da if (search && term->is_searching) render_search_box(term); - if (grid && (!term->delayed_render_timer.is_armed || csd || search)) - grid_render(term); + if ((grid || margins) && + (!term->delayed_render_timer.is_armed || csd || search)) + { + grid_render(term, margins); + } } /* Move to terminal.c? */ @@ -2265,11 +2272,13 @@ fdm_hook_refresh_pending_terminals(struct fdm *fdm, void *data) assert(term->window->is_configured); bool grid = term->render.refresh.grid; + bool margins = term->render.refresh.margins; bool csd = term->render.refresh.csd; bool search = term->render.refresh.search; bool title = term->render.refresh.title; term->render.refresh.grid = false; + term->render.refresh.margins = false; term->render.refresh.csd = false; term->render.refresh.search = false; term->render.refresh.title = false; @@ -2284,11 +2293,12 @@ fdm_hook_refresh_pending_terminals(struct fdm *fdm, void *data) render_update_title(term); if (search) render_search_box(term); - if (grid) - grid_render(term); + if (grid || margins) + grid_render(term, margins); } else { /* Tells the frame callback to render again */ term->render.pending.grid |= grid; + term->render.pending.margins |= margins; term->render.pending.csd |= csd; term->render.pending.search |= search; term->render.pending.title |= title; @@ -2319,6 +2329,12 @@ render_refresh(struct terminal *term) term->render.refresh.grid = true; } +void +render_refresh_margins(struct terminal *term) +{ + term->render.refresh.margins = true; +} + void render_refresh_csd(struct terminal *term) { diff --git a/render.h b/render.h index 05c79322..3f8cf540 100644 --- a/render.h +++ b/render.h @@ -13,6 +13,7 @@ bool render_resize(struct terminal *term, int width, int height); bool render_resize_force(struct terminal *term, int width, int height); void render_refresh(struct terminal *term); +void render_refresh_margins(struct terminal *term); void render_refresh_csd(struct terminal *term); void render_refresh_search(struct terminal *term); void render_refresh_title(struct terminal *term); diff --git a/terminal.h b/terminal.h index 4318f889..12e93ce2 100644 --- a/terminal.h +++ b/terminal.h @@ -373,6 +373,7 @@ struct terminal { /* Scheduled for rendering, as soon-as-possible */ struct { bool grid; + bool margins; bool csd; bool search; bool title; @@ -381,6 +382,7 @@ struct terminal { /* Scheduled for rendering, in the next frame callback */ struct { bool grid; + bool margins; bool csd; bool search; bool title;