summaryrefslogtreecommitdiff
path: root/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-08-07 10:43:38 +0200
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-08-07 10:43:38 +0200
commit5dfc64ef323adfdf190b86dffaf8a9608b39afaa (patch)
treeaf16537417a192cf3befdea9a8e8b3dbaa015c3e /src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
parentb25549ffa7a62bf492be93a8ffb8b9a0d62e0613 (diff)
Wayland platform: move repeated code into Fl_Wayland_Graphics_Driver::buffer_commit().
Diffstat (limited to 'src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx')
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
index e817b6840..78586dc59 100644
--- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
@@ -76,13 +76,19 @@ struct fl_wld_buffer *Fl_Wayland_Graphics_Driver::create_shm_buffer(int width, i
}
-void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window) {
- if (!window->buffer->draw_buffer_needs_commit) return;
+void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window,
+ const struct wl_callback_listener *listener) {
cairo_surface_t *surf = cairo_get_target(window->buffer->cairo_);
cairo_surface_flush(surf);
memcpy(window->buffer->data, window->buffer->draw_buffer, window->buffer->data_size);
wl_surface_attach(window->wl_surface, window->buffer->wl_buffer, 0, 0);
wl_surface_set_buffer_scale(window->wl_surface, window->scale);
+ struct wl_callback *cb = wl_surface_frame(window->wl_surface);
+ if (listener) {
+ window->buffer->cb = cb;
+ wl_surface_damage_buffer(window->wl_surface, 0, 0, 1000000, 1000000);
+ wl_callback_add_listener(window->buffer->cb, listener, window);
+ }
wl_surface_commit(window->wl_surface);
window->buffer->draw_buffer_needs_commit = false;
//fprintf(stderr,"buffer_commit %s\n", window->fl_win->parent()?"child":"top");