From 042dde0ef9b3ba213285066aacae105740422ac2 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Thu, 8 Feb 2024 11:01:29 +0100 Subject: Experimental change to state_redraw --- src/state.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/state.c') 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) -- cgit v1.2.3