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 intclient_has_children(Client *c){#ifdef XWAYLANDif (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;