aboutsummaryrefslogtreecommitdiff
path: root/src/state.c
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-02-08 11:01:29 +0100
committerFederico Angelilli <code@fedang.net>2024-02-08 11:01:29 +0100
commit042dde0ef9b3ba213285066aacae105740422ac2 (patch)
treeba7432cf98ba98cdce65e5b5a7f5e6007d2811c2 /src/state.c
parentc13a74d93c62e8e867afcbed487bcbc7955b29e7 (diff)
Experimental change to state_redraw
Diffstat (limited to 'src/state.c')
-rw-r--r--src/state.c9
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)