FLTK logo

[master] 7800c2f - Wayland: fix handling of fast calls to Fl_Window::flush().

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 7800c2f - Wayland: fix handling of fast calls to Fl_Window::flush(). "ManoloFLTK" Sep 08, 2022  
 
commit 7800c2f3c3195089932e9dbb62371c6408e1e5fe
Author:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
AuthorDate: Fri Sep 9 07:26:19 2022 +0200
Commit:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
CommitDate: Fri Sep 9 07:26:19 2022 +0200

    Wayland: fix handling of fast calls to Fl_Window::flush().
    
    Also fix scaling of borderless windows.

 src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index 72430c8..8a56067 100644
--- src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
@@ -431,10 +431,8 @@ void Fl_Wayland_Window_Driver::flush() {
   Fl_Wayland_Window_Driver::in_flush = true;
   Fl_Window_Driver::flush();
   Fl_Wayland_Window_Driver::in_flush = false;
-
-  if (!window->buffer->cb) {
-    Fl_Wayland_Graphics_Driver::buffer_commit(window, &surface_frame_listener_one_shot, false);
-  }
+  if (window->buffer->cb) wl_callback_destroy(window->buffer->cb);
+  Fl_Wayland_Graphics_Driver::buffer_commit(window, &surface_frame_listener_one_shot, false);
 }
 
 
@@ -875,6 +873,7 @@ static void xdg_toplevel_configure(void *data, struct xdg_toplevel *xdg_toplevel
                                    int32_t width, int32_t height, struct wl_array *states)
 {
   // runs for borderless top-level windows
+  // under Weston: width & height are 0 during both calls
   struct wld_window *window = (struct wld_window*)data;
 //fprintf(stderr, "xdg_toplevel_configure: surface=%p size: %dx%d\n", window->wl_surface, width, height);
   if (window->fl_win->fullscreen_active()) xdg_toplevel_set_fullscreen(xdg_toplevel, NULL);
@@ -1445,7 +1444,11 @@ void Fl_Wayland_Window_Driver::resize(int X, int Y, int W, int H) {
         if (!pWindow->as_gl_window()) Fl_Wayland_Graphics_Driver::buffer_release(fl_win);
         fl_win->configured_width = W;
         fl_win->configured_height = H;
-        xdg_surface_set_window_geometry(fl_win->xdg_surface, 0, 0, W * f, H * f);
+        W *= f; H *= f;
+        xdg_toplevel_set_min_size(fl_win->xdg_toplevel, W, H);
+        xdg_toplevel_set_max_size(fl_win->xdg_toplevel, W, H);
+        xdg_surface_set_window_geometry(fl_win->xdg_surface, 0, 0, W, H);
+        //printf("xdg_surface_set_window_geometry: %dx%d\n",W, H);
       }
 #if defined(USE_SYSTEM_LIBDECOR) && USE_SYSTEM_LIBDECOR
       if (W < minw() || H < minh()) {
Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.