Commit 8a4fbe65 for guacamole.apache.org

commit 8a4fbe65a00016bd2469b0153179c9d21398b8a0
Merge: 0e55d414 325a6dfe
Author: Virtually Nick <vnick@apache.org>
Date:   Thu Aug 6 14:49:37 2026 -0400

    Merge patch branch changes to main.

diff --cc src/terminal/terminal.c
index 8aef2e23,3628e4f5..acaf4e42
--- a/src/terminal/terminal.c
+++ b/src/terminal/terminal.c
@@@ -1889,27 -1898,25 +1922,30 @@@ static int __guac_terminal_send_key(gua
                  return 0;
              }

 +            /* Up */
 +            if (keysym == GUAC_TERMINAL_KEY_UP || keysym == GUAC_TERMINAL_KEY_KP_UP) {
 +                guac_terminal_scroll_display_up(term, 1);
 +                return 0;
 +            }
 +
 +            /* Down */
 +            if (keysym == GUAC_TERMINAL_KEY_DOWN || keysym == GUAC_TERMINAL_KEY_KP_DOWN) {
 +                guac_terminal_scroll_display_down(term, 1);
 +                return 0;
 +            }
 +
          }

-         /* Reset scroll */
-         if (term->scroll_offset != 0)
+         /* Reset scroll, unless the pressed key produces no output (ie: is purely
+          * a modifier or lock key) */
+         if (term->scroll_offset != 0 && !__guac_terminal_is_modifier_keysym(keysym)
+                 && !__guac_terminal_is_lock_keysym(keysym)) {
              guac_terminal_scroll_display_down(term, term->scroll_offset);
+         }

 -        /*
 -         * Modified arrows, function keys, and cursor editing keys encode Alt
 -         * and Meta directly in CSI (below). For all other keys, Alt/Meta are
 -         * represented by prefixing ESC.
 -         */
 -        if ((term->mod_alt || term->mod_meta)
 -                && !__guac_terminal_is_arrow_keysym(keysym)
 -                && !__guac_terminal_is_function_keysym(keysym)
 -                && !__guac_terminal_is_editing_keysym(keysym))
 -            guac_terminal_send_string(term, "\x1B");
 +        /* If alt being held, also send escape character */
 +        if (term->mod_alt)
 +            guac_terminal_send_string(term, GUAC_TERMINAL_ASCII_ESCAPE);

          /* Translate Ctrl+letter to control code */
          if (term->mod_ctrl) {