diff options
Diffstat (limited to 'src/state.c')
| -rw-r--r-- | src/state.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/state.c b/src/state.c index 0054076..0debb1f 100644 --- a/src/state.c +++ b/src/state.c @@ -10,6 +10,7 @@ State *state_create(Window *win, Drawable *draw) state->win = win; state->draw = draw; state->btns = NULL; + state->id = 0; return state; } @@ -25,6 +26,7 @@ static gboolean redraw_and_layout(gpointer data) State *state = data; draw_compute_layout(state->draw, state->win, state->btns); draw_paint(state->draw, state->win); + state->id = 0; return G_SOURCE_REMOVE; } @@ -32,6 +34,7 @@ static gboolean redraw(gpointer data) { State *state = data; draw_paint(state->draw, state->win); + state->id = 0; return G_SOURCE_REMOVE; } @@ -40,7 +43,11 @@ static gboolean redraw(gpointer data) // This could probably be fixed by implementing a redraw source... void state_redraw(State *state, bool changed_layout) { - g_idle_add_full(G_PRIORITY_HIGH_IDLE, changed_layout ? redraw_and_layout : redraw, state, NULL); + // XXX: Override old redraw + if (state->id != 0) + g_source_remove(state->id); + + state->id = g_idle_add_full(G_PRIORITY_HIGH_IDLE, changed_layout ? redraw_and_layout : redraw, state, NULL); } void state_destroy(State *state) |
