Subject: bug#76321: 31.0.50; Moving nested child frames out of their child parents

From: Gerd Möllmann <[email-masked]>
Date: Sun, 16 Feb 2025 07:00:40 +0100

Gerd Möllmann <[email-masked]> writes:

> This bug is for something Martin Rudalics found:
>
> There's a problem with moving nested child frames out of their child
> parents.  Load the attached tty-child-frames.el do first M-l and then
> C-M-l.  You should see a grey child frame embedded in an orange child
> frame.  Now do
>
> (set-frame-parameter tty-3 'left (- 30))

An observation: When I modify the frame creation like this

(defun tty-3 ()
  (interactive)
  (setq tty-3
	(make-frame
	 `((parent-frame . ,tty-2)
	   (left . (- 30)) (top . 5)
                   ^^^^^^
	   (width . 10) (height . 5)

and then do M-l and C-M-l, tty-3 is displayed at a different location
than after the modify-frame-parameter. This is an indication that there
is an inconsistency somewhere.

Elisp info says about frame parameter 'left':

     ‘(- POS)’
          This specifies the position of the right frame edge relative
          to the right edge of the display or parent frame.  The integer
          POS may be positive or negative; a negative value specifies a
          position outside the screen or parent frame or on a monitor
          other than the primary one (for multi-monitor displays).

Parent frame tty-2 of tty-3 has

	 `((parent-frame . ,root-frame)
	   (left . 40) (top . 5)
	   (width . 30) (height . 20)

tty-2's right edges is at 40 + 30 = 70, in root coordinates.

So, the right edge of tty-3 should land at 70, which makes its left edge
should be 70 - 10 = 60.

That is absolutely not what I'm seeing, neither with the initial (- 30)
for left nor after modify-frame-parameters. So I guess my reading of
Elisp info is wrong?

Martin, could you please help me with this? What is the intended effect
of the (- 30), do you know?