swaybar: don't wl_display_roundtrip on each frame
This was the source of numerous bugs, from hotplug events not being received to segfaults because wl_display_roundtrip was making the bar process unplug events while blocking in an iteration over all outputs.
This commit is contained in:
parent
82f1393cbb
commit
8a5ff5a4db
|
@ -558,6 +558,7 @@ void bar_run(struct swaybar *bar) {
|
||||||
}
|
}
|
||||||
while (1) {
|
while (1) {
|
||||||
event_loop_poll();
|
event_loop_poll();
|
||||||
|
wl_display_flush(bar->display);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -510,7 +510,6 @@ void render_frame(struct swaybar *bar, struct swaybar_output *output) {
|
||||||
// TODO: this could infinite loop if the compositor assigns us a
|
// TODO: this could infinite loop if the compositor assigns us a
|
||||||
// different height than what we asked for
|
// different height than what we asked for
|
||||||
wl_surface_commit(output->surface);
|
wl_surface_commit(output->surface);
|
||||||
wl_display_roundtrip(bar->display);
|
|
||||||
} else if (height > 0) {
|
} else if (height > 0) {
|
||||||
// Replay recording into shm and send it off
|
// Replay recording into shm and send it off
|
||||||
output->current_buffer = get_next_buffer(bar->shm,
|
output->current_buffer = get_next_buffer(bar->shm,
|
||||||
|
@ -536,7 +535,6 @@ void render_frame(struct swaybar *bar, struct swaybar_output *output) {
|
||||||
wl_surface_damage(output->surface, 0, 0,
|
wl_surface_damage(output->surface, 0, 0,
|
||||||
output->width, output->height);
|
output->width, output->height);
|
||||||
wl_surface_commit(output->surface);
|
wl_surface_commit(output->surface);
|
||||||
wl_display_roundtrip(bar->display);
|
|
||||||
}
|
}
|
||||||
cairo_surface_destroy(recorder);
|
cairo_surface_destroy(recorder);
|
||||||
cairo_destroy(cairo);
|
cairo_destroy(cairo);
|
||||||
|
|
Loading…
Reference in a new issue