Make sure we don't miss queue redraws between commit and ack.
diff --git a/terminal.c b/terminal.c
index f210341..923539e 100644
--- a/terminal.c
+++ b/terminal.c
@@ -53,7 +53,7 @@
 struct terminal {
 	struct window *window;
 	struct wl_display *display;
-	int resize_scheduled;
+	int redraw_scheduled, redraw_pending;
 	char *data;
 	int width, height, tail, row, column, total_rows;
 	int fd, master;
@@ -126,6 +126,17 @@
 #define STATE_SKIP_TO_ALPHA 1
 
 static void
+terminal_schedule_redraw(struct terminal *terminal)
+{
+	if (!terminal->redraw_scheduled) {
+		g_idle_add(idle_redraw, terminal);
+		terminal->redraw_scheduled = 1;
+	} else {
+		terminal->redraw_pending = 1;
+	}
+}
+
+static void
 terminal_data(struct terminal *terminal, const char *data, size_t length)
 {
 	int i;
@@ -171,6 +182,8 @@
 			break;
 		}
 	}
+
+	terminal_schedule_redraw(terminal);
 }
 
 static void
@@ -178,10 +191,7 @@
 {
 	struct terminal *terminal = data;
 
-	if (!terminal->resize_scheduled) {
-		g_idle_add(idle_redraw, terminal);
-		terminal->resize_scheduled = 1;
-	}
+	terminal_schedule_redraw(terminal);
 }
 
 static void
@@ -189,8 +199,13 @@
 {
 	struct terminal *terminal = data;
 
-	terminal->resize_scheduled = 0;
+	terminal->redraw_scheduled = 0;
 	buffer_destroy(terminal->buffer, terminal->fd);
+
+	if (terminal->redraw_pending) {
+		terminal->redraw_pending = 0;
+		terminal_schedule_redraw(terminal);
+	}
 }
 
 struct key {
@@ -319,7 +334,7 @@
 	terminal->window = window_create(display, fd, "Wayland Terminal",
 					 500, 100, 500, 400);
 	terminal->display = display;
-	terminal->resize_scheduled = 1;
+	terminal->redraw_scheduled = 1;
 	terminal->width = 80;
 	terminal->height = 25;
 	size = (terminal->width + 1) * terminal->height;
@@ -348,11 +363,6 @@
 
 	terminal_data(terminal, buffer, bytes_read);
 
-	if (!terminal->resize_scheduled) {
-		g_idle_add(idle_redraw, terminal);
-		terminal->resize_scheduled = 1;
-	}
-
 	return TRUE;
 }