When a child window of a fullscreen client is mapped, the fullscreen is disabled, and if the previously fullscreen client is floating the child window is rendered below it and cannot be seen, causing confusion, though it is still focused and interactable.
Fix this by putting children of fullscreen clients in LyrFS instead of LyrFloat, and by returning before the unset_fullscreen code is called when they are mapped.
focusstack() now lets you switch focus from a fullscreen client to its child windows, otherwise if you switch focus from the child window to the fullscreen client you could not focus the child window again and the fullscreen client would stay unresponsive.
Child clients are not reparented to LyrFloat after leaving fullscreen, so you could spawn a child window, focus back the fullscreen client, unfullscreen it, and the child window would still be drawn above other floating clients. Avoid dealing with this edge case to keep the line count low.
These cases can be tested by pressing Ctrl+o in applications with an open file dialog.
B55WO4IAXSJHECYSDF2JE7MILRJZTFMCDILEFDB6E4AVTO73Z6OQC
HFVTAHQEE75B6GP3JYJOE4RQBF365ZBVNPMWCKY2YKMXAKJYULKAC
CE3KENZRJ3NY2D4C42AIIJFBQ7HU6YFLRQDPMNL4VW6PZGGLQGUAC
T6RRXRQT6K4T63MKNIDLTNASZCAE3SWWMJU5BXKSHWFY2YY3VBSAC
VQPPTF2SMUCNKNRGGHFSYBIP6NMYJFXCRNDOE5PKE36ACJFMIVFQC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
EQRGODLKSVSPFSUZU7BV5ER72U4QS4ATSBKV544XXQVKKTOSC7EAC
HLSR6YZSOCJGJAA457QC6SID4VELZ7WGKQIAI44IKPDBMRGSYR3QC
KR3USWEXG6PLRSKYLH6ZDDY7OTAYRTMD73TWF5WJGVCQKDGAJS6QC
B6ZQDU7AXQZTLHDO7NKK26C5WKN5F3LJ4ECD2WPIAULZXODUDPQAC
5NXELRTS2KF2SZJRXZBJNNDXZG23OSWVUVCIQSPV7TH7T3XKL4PAC
NMDOPTG3IB6YYKU276EY6CHKGRVUJM62FOEOEMN6VPJ4TYHZHP2AC
2GP4MXKEDQMZ7E6TCRSMV2AGN7HLEAHR3QEAC2QFCQQNPMNJSIHQC
}
static inline int
client_has_children(Client *c)
{
#ifdef XWAYLAND
if (client_is_x11(c))
return !wl_list_empty(&c->surface.xwayland->children);
#endif
/* surface.xdg->link is never empty because it always contains at least the
* surface itself. */
return wl_list_length(&c->surface.xdg->link) > 1;