From c72643ccf6a835866d9908defdfd6dc6247abadc Mon Sep 17 00:00:00 2001 From: corentin-soriano Date: Mon, 30 Sep 2024 13:38:29 +0200 Subject: [PATCH] GUACAMOLE-377: Fix issue where display content is not updated when switching back to normal buffer. --- src/terminal/terminal-handlers.c | 8 ++++++++ src/terminal/terminal.c | 20 +++++++++++--------- src/terminal/terminal/terminal-priv.h | 8 ++++++++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/terminal/terminal-handlers.c b/src/terminal/terminal-handlers.c index f139c1090..12bd4af68 100644 --- a/src/terminal/terminal-handlers.c +++ b/src/terminal/terminal-handlers.c @@ -1070,6 +1070,14 @@ int guac_terminal_csi(guac_terminal* term, unsigned char c) { guac_terminal_scrollbar_set_bounds(term->scrollbar, -guac_terminal_get_available_scroll(term), 0); + /* Redraw normal buffer content */ + guac_terminal_redraw_default_layer(term); + + /* Clear selection */ + term->text_selected = false; + term->selection_committed = false; + guac_terminal_notify(term); + } /* Clear normal buffer only if we were previously using diff --git a/src/terminal/terminal.c b/src/terminal/terminal.c index d98e6117a..6cff6718d 100644 --- a/src/terminal/terminal.c +++ b/src/terminal/terminal.c @@ -2125,10 +2125,7 @@ void guac_terminal_apply_color_scheme(guac_terminal* terminal, display->default_background = default_char->attributes.background; /* Redraw terminal text and background */ - guac_terminal_repaint_default_layer(terminal, client->socket); - __guac_terminal_redraw_rect(terminal, 0, 0, - terminal->term_height - 1, - terminal->term_width - 1); + guac_terminal_redraw_default_layer(terminal); /* Acquire exclusive access to terminal */ guac_terminal_lock(terminal); @@ -2151,7 +2148,6 @@ const char* guac_terminal_get_color_scheme(guac_terminal* terminal) { void guac_terminal_apply_font(guac_terminal* terminal, const char* font_name, int font_size, int dpi) { - guac_client* client = terminal->client; guac_terminal_display* display = terminal->display; if (guac_terminal_display_set_font(display, font_name, font_size, dpi)) @@ -2163,10 +2159,7 @@ void guac_terminal_apply_font(guac_terminal* terminal, const char* font_name, terminal->outer_height); /* Redraw terminal text and background */ - guac_terminal_repaint_default_layer(terminal, client->socket); - __guac_terminal_redraw_rect(terminal, 0, 0, - terminal->term_height - 1, - terminal->term_width - 1); + guac_terminal_redraw_default_layer(terminal); /* Acquire exclusive access to terminal */ guac_terminal_lock(terminal); @@ -2232,3 +2225,12 @@ void guac_terminal_remove_user(guac_terminal* terminal, guac_user* user) { /* Remove the user from the terminal cursor */ guac_common_cursor_remove_user(terminal->cursor, user); } + +void guac_terminal_redraw_default_layer(guac_terminal* terminal) { + + /* Redraw terminal text and background */ + guac_terminal_repaint_default_layer(terminal, terminal->client->socket); + __guac_terminal_redraw_rect(terminal, 0, 0, + terminal->term_height - 1, + terminal->term_width - 1); +} diff --git a/src/terminal/terminal/terminal-priv.h b/src/terminal/terminal/terminal-priv.h index 19d7d8da3..52462ce54 100644 --- a/src/terminal/terminal/terminal-priv.h +++ b/src/terminal/terminal/terminal-priv.h @@ -682,4 +682,12 @@ void guac_terminal_copy_rows(guac_terminal* terminal, */ void guac_terminal_flush(guac_terminal* terminal); +/** + * Redraw default layer text and background. + * + * @param terminal + * The terminal to redraw. + */ +void guac_terminal_redraw_default_layer(guac_terminal* terminal); + #endif