summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H3
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx25
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx22
3 files changed, 24 insertions, 26 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
index 855bce1c7..01932fc50 100644
--- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
+++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
@@ -78,8 +78,7 @@ public:
virtual void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen osrc, int srcx, int srcy);
static struct fl_wld_buffer *create_shm_buffer(int width, int height);
static void buffer_release(struct wld_window *window);
- static void buffer_commit(struct wld_window *window, const struct wl_callback_listener*,
- bool need_damage = true);
+ static void buffer_commit(struct wld_window *window, bool need_damage = true);
static void cairo_init(struct fl_wld_buffer *buffer, int width, int height, int stride, cairo_format_t format);
virtual void *gc();
virtual void gc(void *gc);
diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
index e4632b4c5..98474ec24 100644
--- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
@@ -75,9 +75,26 @@ 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,
- const struct wl_callback_listener *listener,
- bool need_damage) {
+// used to support both normal and progressive drawing
+static void surface_frame_done(void *data, struct wl_callback *cb, uint32_t time);
+
+static const struct wl_callback_listener surface_frame_listener = {
+ .done = surface_frame_done,
+};
+
+static void surface_frame_done(void *data, struct wl_callback *cb, uint32_t time) {
+ struct wld_window *window = (struct wld_window *)data;
+//fprintf(stderr,"surface_frame_done: destroy cb=%p draw_buffer_needs_commit=%d\n", cb, window->buffer->draw_buffer_needs_commit);
+ wl_callback_destroy(cb);
+ window->buffer->cb = NULL;
+ if (window->buffer->draw_buffer_needs_commit) {
+//fprintf(stderr,"surface_frame_done: new cb=%p \n", window->buffer->cb);
+ Fl_Wayland_Graphics_Driver::buffer_commit(window, &surface_frame_listener);
+ }
+}
+
+
+void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window, bool need_damage) {
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);
@@ -85,7 +102,7 @@ void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window,
wl_surface_set_buffer_scale(window->wl_surface, window->scale);
window->buffer->cb = wl_surface_frame(window->wl_surface);
if (need_damage) wl_surface_damage_buffer(window->wl_surface, 0, 0, 1000000, 1000000);
- wl_callback_add_listener(window->buffer->cb, listener, window);
+ wl_callback_add_listener(window->buffer->cb, &surface_frame_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");
diff --git a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index 79747004f..5291f80b0 100644
--- a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
@@ -322,24 +322,6 @@ void Fl_Wayland_Window_Driver::capture_titlebar_and_borders(Fl_RGB_Image*& top,
top->scale(pWindow->w(), htop);
}
-// used to support both normal and progressive drawing
-static void surface_frame_done(void *data, struct wl_callback *cb, uint32_t time);
-
-static const struct wl_callback_listener surface_frame_listener = {
- .done = surface_frame_done,
-};
-
-static void surface_frame_done(void *data, struct wl_callback *cb, uint32_t time) {
- struct wld_window *window = (struct wld_window *)data;
-//fprintf(stderr,"surface_frame_done: destroy cb=%p draw_buffer_needs_commit=%d\n", cb, window->buffer->draw_buffer_needs_commit);
- wl_callback_destroy(cb);
- window->buffer->cb = NULL;
- if (window->buffer->draw_buffer_needs_commit) {
-//fprintf(stderr,"surface_frame_done: new cb=%p \n", window->buffer->cb);
- Fl_Wayland_Graphics_Driver::buffer_commit(window, &surface_frame_listener);
- }
-}
-
// make drawing go into this window (called by subclass flush() impl.)
void Fl_Wayland_Window_Driver::make_current() {
@@ -358,7 +340,7 @@ void Fl_Wayland_Window_Driver::make_current() {
// to support progressive drawing
if ( (!Fl_Wayland_Window_Driver::in_flush) && window->buffer && (!window->buffer->cb)) {
//fprintf(stderr, "direct make_current: new cb=%p\n", window->buffer->cb);
- Fl_Wayland_Graphics_Driver::buffer_commit(window, &surface_frame_listener);
+ Fl_Wayland_Graphics_Driver::buffer_commit(window);
}
Fl_Wayland_Window_Driver::wld_window = window;
@@ -425,7 +407,7 @@ void Fl_Wayland_Window_Driver::flush() {
Fl_Window_Driver::flush();
Fl_Wayland_Window_Driver::in_flush = false;
if (window->buffer->cb) wl_callback_destroy(window->buffer->cb);
- Fl_Wayland_Graphics_Driver::buffer_commit(window, &surface_frame_listener, false);
+ Fl_Wayland_Graphics_Driver::buffer_commit(window, false);
}