now it is a big function called toplevel_from_wlr_surface
WM43HOHUSZWK5OOCFHSOKA2PNUL45ZQENVPHNHWETSQQ7BAKHG7AC 7JRGTO7NJIMX6BUDXC7PXZOSE5FQOVQNGTK7HIOKM7CWQMFVTU3AC EQRGODLKSVSPFSUZU7BV5ER72U4QS4ATSBKV544XXQVKKTOSC7EAC 7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC 2B3SWBLKAAQYLU33YJTU2LQMO337JXHRMWDZA3V3G3IEXIFK5P6QC 2GP4MXKEDQMZ7E6TCRSMV2AGN7HLEAHR3QEAC2QFCQQNPMNJSIHQC FINGOWOULAPWRQRLJHJOCEQR4QAZR6GW5OHM56GMWTYZKRSEGOYQC Y7MFSXPSUETX7UAXGEKJEMPQ3DYM4E3QVASHM7KUKLR7XN6FA3MQC ST2AX7B3G7YBGOIF45XX3A2DLK2BONI67DHADM4KSLZVPBTUPC5QC 66TSV5DVW2ILJNGV3EGWPLHHYW2KXGZPCVW4UZ3J4GZOSSR7374AC YPEFSYD2O7BLC6VVQTXQMU4XGNIG2CXJAMV3WVBSWZRDVUSXRQDAC QWVYKUD2WPG5N3I3LFJ3KL6SJ5GTLCC6IL3PWBM2ACI4FKXKLQ6QC UK6FXGKR64ZLXYFGN3J3HOLCSF6C3V6GNBTCKTI7EXTLYJXVMBGAC static inline Client *client_from_wlr_surface(struct wlr_surface *s){struct wlr_xdg_surface *surface;#ifdef XWAYLANDstruct wlr_xwayland_surface *xsurface;if (s && wlr_surface_is_xwayland_surface(s)&& (xsurface = wlr_xwayland_surface_from_wlr_surface(s)))return xsurface->data;#endifif (s && wlr_surface_is_xdg_surface(s)&& (surface = wlr_xdg_surface_from_wlr_surface(s))&& surface->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL)return surface->data;if (s && wlr_surface_is_subsurface(s))return client_from_wlr_surface(wlr_surface_get_root_surface(s));return NULL;}
}static inline void *toplevel_from_wlr_surface(struct wlr_surface *s){struct wlr_xdg_surface *xdg_surface;struct wlr_surface *root_surface;struct wlr_layer_surface_v1 *layer_surface;#ifdef XWAYLANDstruct wlr_xwayland_surface *xsurface;#endifif (!s)return NULL;root_surface = wlr_surface_get_root_surface(s);#ifdef XWAYLANDif (wlr_surface_is_xwayland_surface(root_surface)&& (xsurface = wlr_xwayland_surface_from_wlr_surface(root_surface)))return xsurface->data;#endifif (wlr_surface_is_layer_surface(root_surface)&& (layer_surface = wlr_layer_surface_v1_from_wlr_surface(root_surface)))return layer_surface->data;if (wlr_surface_is_xdg_surface(root_surface)&& (xdg_surface = wlr_xdg_surface_from_wlr_surface(root_surface))) {while (1) {switch (xdg_surface->role) {case WLR_XDG_SURFACE_ROLE_POPUP:if (!xdg_surface->popup->parent)return NULL;else if (!wlr_surface_is_xdg_surface(xdg_surface->popup->parent))return toplevel_from_wlr_surface(xdg_surface->popup->parent);xdg_surface = wlr_xdg_surface_from_wlr_surface(xdg_surface->popup->parent);break;case WLR_XDG_SURFACE_ROLE_TOPLEVEL:return xdg_surface->data;case WLR_XDG_SURFACE_ROLE_NONE:return NULL;}}}return NULL;
}static inline void *toplevel_from_popup(struct wlr_xdg_popup *popup){struct wlr_xdg_surface *surface = popup->base;while (1) {switch (surface->role) {case WLR_XDG_SURFACE_ROLE_POPUP:if (!surface->popup->parent)return NULL;else if (wlr_surface_is_layer_surface(surface->popup->parent))return wlr_layer_surface_v1_from_wlr_surface(surface->popup->parent)->data;else if (!wlr_surface_is_xdg_surface(surface->popup->parent))return NULL;surface = wlr_xdg_surface_from_wlr_surface(surface->popup->parent);break;case WLR_XDG_SURFACE_ROLE_TOPLEVEL:return surface->data;case WLR_XDG_SURFACE_ROLE_NONE:return NULL;}}
static inline void *toplevel_from_wlr_layer_surface(struct wlr_surface *s){Client *c;struct wlr_layer_surface_v1 *wlr_layer_surface;if ((c = client_from_wlr_surface(s)))return c;else if (s && wlr_surface_is_layer_surface(s)&& (wlr_layer_surface = wlr_layer_surface_v1_from_wlr_surface(s)))return wlr_layer_surface->data;return NULL;}