diff options
Diffstat (limited to 'src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx')
| -rw-r--r-- | src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx index a5b7c2dfe..2dd6ac527 100644 --- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx +++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx @@ -118,15 +118,13 @@ struct Fl_Wayland_Graphics_Driver::wld_buffer * } -// used to support both normal and progressive drawing +// used to support both normal and progressive drawing and for top-level GL windows static void surface_frame_done(void *data, struct wl_callback *cb, uint32_t time) { struct wld_window *window = (struct wld_window *)data; wl_callback_destroy(cb); - if (window->buffer) { // fix for issue #712 - window->frame_cb = NULL; - if (window->buffer->draw_buffer_needs_commit) { - Fl_Wayland_Graphics_Driver::buffer_commit(window); - } + window->frame_cb = NULL; + if (window->buffer && window->buffer->draw_buffer_needs_commit) { + Fl_Wayland_Graphics_Driver::buffer_commit(window); } } @@ -136,6 +134,10 @@ static const struct wl_callback_listener surface_frame_listener = { }; +const struct wl_callback_listener *Fl_Wayland_Graphics_Driver::p_surface_frame_listener = + &surface_frame_listener; + + // copy pixels in region r from the Cairo surface to the Wayland buffer static void copy_region(struct wld_window *window, struct flCairoRegion *r) { struct Fl_Wayland_Graphics_Driver::wld_buffer *buffer = window->buffer; @@ -178,7 +180,7 @@ void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window, struct Fl_Wayland_Window_Driver::driver(window->fl_win)->wld_scale() ); if (!window->covered) { // see issue #878 window->frame_cb = wl_surface_frame(window->wl_surface); - wl_callback_add_listener(window->frame_cb, &surface_frame_listener, window); + wl_callback_add_listener(window->frame_cb, p_surface_frame_listener, window); } wl_surface_commit(window->wl_surface); window->buffer->draw_buffer_needs_commit = false; |
