summaryrefslogtreecommitdiff
path: root/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-09-08 16:11:53 +0200
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-09-08 16:11:53 +0200
commit0ff31668a1117cf784e41331105d5c76f9bc441f (patch)
tree1906a2c9c85e5b8839c8d40257d8af6cf536d01f /src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
parent71069b857068201c37ffcc2c3e799329ff29769b (diff)
Wayland: remove memory leak from missing wl_callback_destroy() call.
This hopefully corresponds to the memory leak mentioned in fltk.general named "FLTK and Wayland".
Diffstat (limited to 'src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx')
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
index 031c44e40..e4632b4c5 100644
--- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
@@ -76,18 +76,16 @@ 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) {
+ const struct wl_callback_listener *listener,
+ 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);
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);
- }
+ 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_surface_commit(window->wl_surface);
window->buffer->draw_buffer_needs_commit = false;
//fprintf(stderr,"buffer_commit %s\n", window->fl_win->parent()?"child":"top");
@@ -117,6 +115,7 @@ void Fl_Wayland_Graphics_Driver::cairo_init(struct fl_wld_buffer *buffer, int wi
void Fl_Wayland_Graphics_Driver::buffer_release(struct wld_window *window)
{
if (window->buffer) {
+ if (window->buffer->cb) wl_callback_destroy(window->buffer->cb);
wl_buffer_destroy(window->buffer->wl_buffer);
delete[] window->buffer->draw_buffer;
window->buffer->draw_buffer = NULL;