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.
master
emersion 6 years ago
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…
Cancel
Save