terminal: Only hide cursor for keypresses that generate data for the process
diff --git a/clients/terminal.c b/clients/terminal.c
index 7d6d70a..e0f54bd 100644
--- a/clients/terminal.c
+++ b/clients/terminal.c
@@ -2138,13 +2138,6 @@
 	    handle_bound_key(terminal, input, sym, time))
 		return;
 
-	serial = display_get_serial(terminal->display);
-	if (terminal->hide_cursor_serial != serial &&
-	    state == WL_KEYBOARD_KEY_STATE_PRESSED) {
-		input_set_pointer_image(input, CURSOR_BLANK);
-		terminal->hide_cursor_serial = serial;
-	}
-
 	switch (sym) {
 	case XKB_KEY_F11:
 		if (state == WL_KEYBOARD_KEY_STATE_RELEASED)
@@ -2262,8 +2255,17 @@
 		break;
 	}
 
-	if (state == WL_KEYBOARD_KEY_STATE_PRESSED && len > 0)
+	if (state == WL_KEYBOARD_KEY_STATE_PRESSED && len > 0) {
 		terminal_write(terminal, ch, len);
+
+		/* Hide cursor, except if this was coming from a
+		 * repeating key press. */
+		serial = display_get_serial(terminal->display);
+		if (terminal->hide_cursor_serial != serial) {
+			input_set_pointer_image(input, CURSOR_BLANK);
+			terminal->hide_cursor_serial = serial;
+		}
+	}
 }
 
 static void