summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-01-18 08:51:31 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-01-18 08:51:31 +0100
commit01f2f760b67a6b498ea7251c1bd2e26aaf7db034 (patch)
tree3c8d2a687a429ed8d7ebcc86d95c37927282934f /src/drivers
parentb7fba465cec78b00a46a47ebd3f8f231b5feb5ee (diff)
Create struct wl_callback_listener *Fl_Wayland_Graphics_Driver::p_surface_frame_listener
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx15
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H1
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx16
3 files changed, 12 insertions, 20 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
index 473afd810..b821ae201 100644
--- a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
@@ -397,18 +397,6 @@ static void delayed_scissor(Fl_Wayland_Gl_Window_Driver *dr) {
}*/
-static void surface_frame_done(void *data, struct wl_callback *cb, uint32_t time) {
- struct wld_window *xid = (struct wld_window *)data;
- wl_callback_destroy(cb);
- xid->frame_cb = NULL;
-}
-
-
-static const struct wl_callback_listener surface_frame_listener = {
- .done = surface_frame_done,
-};
-
-
void Fl_Wayland_Gl_Window_Driver::resize(int is_a_resize, int W, int H) {
if (!egl_window) return;
float f = Fl::screen_scale(pWindow->screen_num());
@@ -421,7 +409,8 @@ void Fl_Wayland_Gl_Window_Driver::resize(int is_a_resize, int W, int H) {
struct wld_window *xid = fl_wl_xid(pWindow);
if (xid->kind == Fl_Wayland_Window_Driver::DECORATED && !xid->frame_cb) {
xid->frame_cb = wl_surface_frame(xid->wl_surface);
- wl_callback_add_listener(xid->frame_cb, &surface_frame_listener, xid);
+ wl_callback_add_listener(xid->frame_cb,
+ Fl_Wayland_Graphics_Driver::p_surface_frame_listener, xid);
}
wl_egl_window_resize(egl_window, W, H, 0, 0);
}
diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
index b8c7a2a8d..c3730dee4 100644
--- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
+++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
@@ -53,6 +53,7 @@ public:
};
static const uint32_t wld_format;
static struct wl_shm_pool *current_pool;
+ static FL_EXPORT const struct wl_callback_listener *p_surface_frame_listener;
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen osrc,
int srcx, int srcy) FL_OVERRIDE;
void cache_size(Fl_Image *img, int &width, int &height) FL_OVERRIDE;
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;