summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-07-28 14:21:51 +0200
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-07-28 14:21:51 +0200
commitc0dba15e4ba9d2e4103a4af8c3862c1a7b8b1769 (patch)
treef7b9d4a68dabbb13d8d3dbe368ca94df170a1eef /src
parentd265009b66cbc69ca6edf502dc23199a01d62220 (diff)
Wayland: restore support of Fl_Tile with subwindow widget - cont'd
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Tile.cxx3
-rw-r--r--src/Fl_Window_Driver.H1
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx8
3 files changed, 5 insertions, 7 deletions
diff --git a/src/Fl_Tile.cxx b/src/Fl_Tile.cxx
index 9874a570b..142b286bb 100644
--- a/src/Fl_Tile.cxx
+++ b/src/Fl_Tile.cxx
@@ -482,7 +482,6 @@ void Fl_Tile::move_intersection(int oldx, int oldy, int newx, int newy) {
}
}
-bool Fl_Tile::in_drag_intersection_ = false;
/**
Drags the intersection at (\p oldx,\p oldy) to (\p newx,\p newy).
@@ -534,12 +533,10 @@ void Fl_Tile::drag_intersection(int oldx, int oldy, int newx, int newy) {
}
}
// resize all children that have changed in size
- in_drag_intersection_ = true;
for (i = 0; i < children(); i++) {
Fl_Rect &r = final_size[i];
child(i)->damage_resize(r.x(), r.y(), r.w(), r.h());
}
- in_drag_intersection_ = false;
delete[] final_size;
} else {
move_intersection(oldx, oldy, newx, newy);
diff --git a/src/Fl_Window_Driver.H b/src/Fl_Window_Driver.H
index 924a86967..ce4b4ef4c 100644
--- a/src/Fl_Window_Driver.H
+++ b/src/Fl_Window_Driver.H
@@ -209,7 +209,6 @@ public:
virtual fl_uintptr_t os_id() { return 0; }
virtual void allow_expand_outside_parent() {}
- static bool in_tile_intersection_drag() { return Fl_Tile::in_drag_intersection_; }
};
#endif // FL_WINDOW_DRIVER_H
diff --git a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index 7aeb717a5..318fc61f4 100644
--- a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
@@ -1822,7 +1822,8 @@ void Fl_Wayland_Window_Driver::resize(int X, int Y, int W, int H) {
if (shown() && !(parent() || popup_window())) {
X = Y = 0;
}
- struct wld_window *parent_xid = parent() ? fl_wl_xid(pWindow->window()) : NULL;
+ Fl_Window *parent = this->parent() ? pWindow->window() : NULL;
+ struct wld_window *parent_xid = parent ? fl_wl_xid(parent) : NULL;
xid_and_rect *xid_rect = NULL;
if (parent_xid && parent_xid->frame_cb && wl_proxy_get_listener((struct wl_proxy*)parent_xid->frame_cb) == &surface_frame_listener) {
xid_rect = (xid_and_rect*)wl_callback_get_user_data(parent_xid->frame_cb);
@@ -1831,7 +1832,8 @@ void Fl_Wayland_Window_Driver::resize(int X, int Y, int W, int H) {
// When moving or resizing a non-GL subwindow independently from its parent, this condition
// delays application of X,Y,W,H values until the compositor signals
// it's ready for a new frame using the frame callback mechanism.
- if (in_tile_intersection_drag() || depth > 1 || pWindow->as_gl_window() || !parent_xid || wait_for_expose_value || (parent_xid->frame_cb && !xid_rect)) {
+ if ((parent && parent->damage()) || depth > 1 || pWindow->as_gl_window() || !parent_xid ||
+ wait_for_expose_value || (parent_xid->frame_cb && !xid_rect)) {
if (is_a_resize) {
if (pWindow->parent()) {
if (W < 1) W = 1;
@@ -1909,7 +1911,7 @@ void Fl_Wayland_Window_Driver::resize(int X, int Y, int W, int H) {
}
Fl_Wayland_Graphics_Driver::buffer_commit(parent_xid);
} else {
- if (!in_tile_intersection_drag() && !parent_xid->frame_cb) {
+ if (!(parent && parent->damage()) && !parent_xid->frame_cb) {
// use the frame callback mechanism and memorize current X,Y,W,H values
xid_rect = new xid_and_rect;
xid_rect->xid = parent_xid;