References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4288
4IA7K77KPR33PP6IKI6OQ2OXMCHCAZZXNYNQXETE6TJQQ6F6CM3QC if ((xdg_surface = wlr_xdg_surface_try_from_wlr_surface(root_surface))) {while (1) {switch (xdg_surface->role) {case WLR_XDG_SURFACE_ROLE_POPUP:if (!xdg_surface->popup->parent)return -1;else if (!wlr_xdg_surface_try_from_wlr_surface(xdg_surface->popup->parent))return toplevel_from_wlr_surface(xdg_surface->popup->parent, pc, pl);
xdg_surface = wlr_xdg_surface_try_from_wlr_surface(root_surface);while (xdg_surface) {tmp_xdg_surface = NULL;switch (xdg_surface->role) {case WLR_XDG_SURFACE_ROLE_POPUP:if (!xdg_surface->popup || !xdg_surface->popup->parent)return -1;tmp_xdg_surface = wlr_xdg_surface_try_from_wlr_surface(xdg_surface->popup->parent);if (!tmp_xdg_surface)return toplevel_from_wlr_surface(xdg_surface->popup->parent, pc, pl);
xdg_surface = wlr_xdg_surface_try_from_wlr_surface(xdg_surface->popup->parent);break;case WLR_XDG_SURFACE_ROLE_TOPLEVEL:c = xdg_surface->data;type = c->type;goto end;case WLR_XDG_SURFACE_ROLE_NONE:return -1;}
xdg_surface = tmp_xdg_surface;break;case WLR_XDG_SURFACE_ROLE_TOPLEVEL:c = xdg_surface->data;type = c->type;goto end;case WLR_XDG_SURFACE_ROLE_NONE:return -1;