diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-09-08 16:11:53 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-09-08 16:11:53 +0200 |
| commit | 0ff31668a1117cf784e41331105d5c76f9bc441f (patch) | |
| tree | 1906a2c9c85e5b8839c8d40257d8af6cf536d01f /src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx | |
| parent | 71069b857068201c37ffcc2c3e799329ff29769b (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.cxx | 13 |
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; |
