This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch wl/browser-all
in repository enlightenment.
View the commit online.
commit 60abb40145edda776b336d2dcab1ead9f68fe183
Author: Cedric BAIL <[email protected]>
AuthorDate: Mon Aug 17 11:35:17 2026 -0600
e_comp_object - letting the frame lead still has to tell the client
f2db9402b stopped the clamp from pulling an interactively resized wayland
window back to its buffer, by setting pw/ph to the requested size. That does
suppress the clamp, but it suppresses it by making the requested size and the
buffer size compare equal - and that comparison is the condition on the branch
the clamp lives in. So the resize fell out of that branch entirely, and the
branch is also where
evas_object_smart_callback_call(obj, "client_resize", NULL);
goes out. That callback is the only thing that sends the client an
xdg_toplevel.configure, i.e. the only way the buffer is ever asked to catch up
with the frame. Nothing asked it, so it never did:
PROBE ir: req=490x370 pw=420 ph=320 resizing=1 cw=420x320 <- frame leads
PROBE ir: req=420x320 pw=420 ph=320 resizing=0 cw=490x370 <- and snaps back
The frame does follow the pointer for the length of the drag, which is what the
wlcs test looks at and why this was not caught. The client keeps painting the
old size throughout, and then at grab end resizing is no longer set, the clamp
applies again, and it pulls the frame down to the buffer that never changed -
the window jumps back to the size it had before the drag. Release the edge and
the resize is simply undone.
Suppress the assignment rather than the branch, so the client is still told.
Both halves of the flip are inside the guard: with server-side decorations the
clamp is e_comp_object_frame_wh_adjust() converting the buffer's client size
into a frame size, and that has to be skipped for the same reason the CSD
assignment does, which is also what f2db9402b did by overriding pw/ph ahead of
both.
Measured: with this, src/tests/wayland/test_client_move.c on wl/real-browser -
which drives E's own window_resize action through wl_test and then asks both
sides what size they think the window is - goes from failing to passing, and
the compositor and client agree at 490x370 rather than reverting to 420x320.
The nine wayland tests on this branch and e_wlcs_driver are unchanged, all
passing. The wlcs runner is not on this machine, so the two
surface_can_be_resized_interactively cases f2db9402b measured were not re-run;
this only widens what happens during the drag, so they should be unaffected.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01Np9jxYyepQFWqEba1tiU8K
---
src/bin/e_comp_object.c | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c
index 7f9449d21..0127e17e2 100644
--- a/src/bin/e_comp_object.c
+++ b/src/bin/e_comp_object.c
@@ -1124,6 +1124,7 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h)
{
E_Comp_Object *cw = data;
int pw = 0, ph = 0, fw, fh, iw, ih, prev_w, prev_h, x, y;
+ Eina_Bool frame_leads;
if ((w < 1) || (h < 1)) return;
@@ -1278,11 +1279,19 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h)
* window edge looks like everywhere else. The image is scaled to the frame
* for the frame or two until the client commits.
*
+ * Skip the clamp, not the branch that does it. That branch is also where
+ * the "client_resize" callback goes out, and that callback is the only
+ * thing that sends the client an xdg_toplevel.configure - so falling out
+ * of it is how the buffer would be told to catch up, and it never is. The
+ * client keeps painting the old size for the whole drag, and at grab end,
+ * with resizing no longer set, the clamp comes back and pulls the frame
+ * down to the buffer: the window snaps back to where the drag started.
+ * Suppress only the assignment, so the client is still told.
+ *
* X clients keep the old behaviour: there the pixmap really does resize
* with the window, so the buffer is never behind and the clamp is telling
* the truth. */
- if (e_client_util_resizing_get(cw->ec) && (!e_client_has_xwindow(cw->ec)))
- pw = w - fw, ph = h - fh;
+ frame_leads = e_client_util_resizing_get(cw->ec) && (!e_client_has_xwindow(cw->ec));
/* check shading and clamp to pixmap size for regular clients */
if ((!cw->ec->shading) && (!cw->ec->shaded) && (!cw->ec->input_only) && (!cw->ec->override) &&
@@ -1290,11 +1299,14 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h)
{
//INF("CALLBACK: REQ(%dx%d) != CUR(%dx%d)", w - fw, h - fh, pw, ph);
evas_object_smart_callback_call(obj, "client_resize", NULL);
- /* flip for CSD */
- if (cw->frame_object || cw->ec->input_only)
- e_comp_object_frame_wh_adjust(obj, pw, ph, &w, &h);
- else
- w = pw, h = ph;
+ if (!frame_leads)
+ {
+ /* flip for CSD */
+ if (cw->frame_object || cw->ec->input_only)
+ e_comp_object_frame_wh_adjust(obj, pw, ph, &w, &h);
+ else
+ w = pw, h = ph;
+ }
if ((cw->w == w) && (cw->h == h))
{
/* going to be a noop resize which won't trigger smart resize */
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.