Subject: bug#75056: 31.0.50; tty-child-frames with server / multiple clients possible hangs

From: martin rudalics <[email-masked]>
Date: Tue, 28 Jan 2025 10:29:11 +0100

>> (2) do_switch_frame now has this
>>
>> 	  if (FRAMEP (top_frame))
>> 	    {
>> 	      struct frame *top = XFRAME (top_frame);
>> 	      struct frame *old_root = root_frame (top);
>> 	      if (old_root != new_root)
>> 		SET_FRAME_VISIBLE (old_root, false);
>> 	    }
>>
>> This is wrong because it will set the visibility of the old top frame to
>> nil.
>
> I don't understand that one. It doesn't, or shouldn't change, the
> visibility of the top_frame, but the visibility of its root. Can you
> please explain?

The root_frame of the old top frame is the old top frame itself.  Or am
I missing something?

> My idea is that root windows on ttys become invisible/invisible when
> they are displayed on the terminal or not. Child windows on these roots
> keep their visibility. They are automatically not displayed when the
> root is not displayed, that's inherently the case when
> combine_updates_for frame is not called for invisible root frames.

I think we should use the metaphor of a top frame on a tty as that of a
maximized frame on a GUI.  Such a frame hides all other normal frames on
that workspace but does not render them invisible or iconified (I ignore
z-order and groups here).  If you want to optimize redisplay, then the
old concept of obscured frames will be better suited IMO.

martin