summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-05-09 19:56:17 +0200
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-05-09 19:56:17 +0200
commitad27da578a952548dd16f8be4bbd871fccc423c7 (patch)
tree533f79e887f5d016e5853e95706ba7303533f905
parent48ca0e3b507f709041ad9a33b28b16801c9bf95e (diff)
Avoid glpuzzle crash when resizing while puzzle is spinning - cont'd.
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H1
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx9
2 files changed, 5 insertions, 5 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H
index 8a1c4abc2..7110a8e3a 100644
--- a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H
+++ b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H
@@ -36,6 +36,7 @@ Consequently, FL_DOUBLE is enforced in all Fl_Gl_Window::mode_ values under Wayl
class Fl_Wayland_Gl_Window_Driver : public Fl_Gl_Window_Driver {
friend Fl_Gl_Window_Driver* Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *);
bool egl_resize_in_progress;
+ bool swap_done;
Fl_Wayland_Gl_Window_Driver(Fl_Gl_Window *win);
virtual float pixels_per_unit();
virtual void make_current_before();
diff --git a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
index 8165152b8..686816203 100644
--- a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
@@ -56,6 +56,7 @@ Fl_Wayland_Gl_Window_Driver::Fl_Wayland_Gl_Window_Driver(Fl_Gl_Window *win) : Fl
egl_window = NULL;
egl_surface = NULL;
egl_resize_in_progress = false;
+ swap_done = false;
}
@@ -307,11 +308,9 @@ void Fl_Wayland_Gl_Window_Driver::swap_buffers() {
wl_display_read_events(Fl_Wayland_Screen_Driver::wl_display);
wl_display_dispatch_queue_pending(Fl_Wayland_Screen_Driver::wl_display, gl_event_queue);
}
- if (!egl_window) return;
- int W = 0, H;
- if (!pWindow->parent()) wl_egl_window_get_attached_size(egl_window, &W, &H);
- if (!egl_resize_in_progress || W == 0) {
- eglSwapBuffers(Fl_Wayland_Gl_Window_Driver::egl_display, egl_surface);
+ if (!egl_resize_in_progress || pWindow->parent() || !swap_done) {
+ eglSwapBuffers(Fl_Wayland_Gl_Window_Driver::egl_display, egl_surface);
+ swap_done = true;
}
egl_resize_in_progress = false;
}