diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2024-06-11 11:37:45 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2024-06-11 11:37:45 +0200 |
| commit | d7d1d0d6b2be85d562d6c0a0d910e2af260f8a6b (patch) | |
| tree | e8b0335e0833ad494ffdf91ce893e1d1245cf290 /src/drivers | |
| parent | b17357339f66949de7787e83aa9d21d613439170 (diff) | |
Wayland: fix interactive moving and resizing of a subwindow - cont'd (#987)
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx index 9546fde94..c4587cf07 100644 --- a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx +++ b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx @@ -1784,6 +1784,7 @@ void Fl_Wayland_Window_Driver::resize(int X, int Y, int W, int H) { pWindow->wait_for_expose(); } int is_a_move = (X != x() || Y != y()); + int oldX = x(), oldY = y(), oldW = w(), oldH = h(); bool true_rescale = Fl_Window::is_a_rescale(); float f = Fl::screen_scale(pWindow->screen_num()); if (fl_win && fl_win->buffer) { @@ -1869,9 +1870,16 @@ void Fl_Wayland_Window_Driver::resize(int X, int Y, int W, int H) { if (fl_win && fl_win->kind == SUBWINDOW && fl_win->subsurface) { // Interactive move or resize of a subwindow requires to commit the parent surface (#987) - Fl_Window *parent = pWindow->window(); - struct wld_window *xid = fl_wl_xid(parent); - if (xid) wl_surface_commit(xid->wl_surface); + struct wld_window *xid = fl_wl_xid(pWindow->window()); + if (xid) { + if (!xid->frame_cb) { + xid->frame_cb = wl_surface_frame(xid->wl_surface); + wl_callback_add_listener(xid->frame_cb, Fl_Wayland_Graphics_Driver::p_surface_frame_listener, xid); + wl_surface_commit(xid->wl_surface); + } else { + pWindow->Fl_Widget::resize(oldX, oldY, oldW, oldH); + } + } checkSubwindowFrame(); // make sure subwindow doesn't leak outside parent } } |
