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;
}