6V3JKJZJ7KBS5I3Q266ZCRJYVO56ZQKLJL4EOHN6XC222CZFXCDQC
3EDO6OUSMQ77E3GRBT5QDQ556NF4YEU4LMRXT5IU2MQVOG2D3KUAC
LQPHYO7IIMLXHUD5IK657BO4BE3SGT5HYDRJDU5OFDF5YUXKIRTAC
24QUH6X2AJRSRNFW274P2TN73GSV5LR45TGRLJDUD655IH2AAZWQC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
D425ND7AT3F7QJ3CCSESMVDOC3J5C5P32M5SJDBHECZJXLHNQ2FAC
L4X3HG56S4DS7QJTLMLP47BGCPF2TM5XRUFEN56BTWYJICBYUUEAC
ZOOCZQBGZ4PCOU54EPPUPWNOIFWCM5RMZ4EFL2WFR7LFJTAMHZGAC
S7RXJJZG4IEIVLPHEWFT5M2T3SRRO5US5SYBPXSYSWJJLXAKNNPAC
J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC
MZ734MOA6IYZE7SDSQGTBLYUF5VWLLK7M7E6T3KIY6DBEJR3CFMAC
F72VJF4KJZEYZEYGAGKCWPMEQGPKS7T5PEEJPJKZO6ZG246TTLAQC
UCSTVE5NIAIQ3NJL5YLDFDKDPOCJS6NMAGABSWG67RGCPH47JQEQC
DEYEAIOK6XPZXJXKS4S6EFXRZL7U65VBC2T3ABPDTSTEQRBXY25AC
O5JVMDEEKP334BAYMJ6HHXROW4X4WC24JHCYZTKJRQE5UGYXV7YQC
IWYHVSLDXIRLG2CZRN46XQFZKBRXCKKD6ME24XC5KFZRDOBGBTQQC
46MQCVOAPLYAM3HMYFA7E2B6IXSXO2Z57JNBORUBRL6P2GXADSPQC
6XZIQSMIVP2GZ5S3UCKEVNDSLTHSQEVSXLV4UIFF3G3SRCGJPXYAC
KD353LTTUI6LTMYDTNPH3W6NXETRKDTNB6MA64K3WBQC6GSYKPMAC
XKWY25ZVEJIJU7R23CEG5CTYRAWKZ5FXSHY3ZEZRGCIWYIKQSLOAC
Z53RRSEGCT3PGEZNNSAREB3WVYOHCTDXXPNAKOWWGCEYW4G2QC4QC
static Client *xytoclient(double x, double y,
struct wlr_surface **surface, double *sx, double *sy);
static Client *xytoclient(double x, double y);
wl_list_for_each(c, &stack, slink) {
if (VISIBLEON(c, c->mon) && wlr_box_contains_point(&c->geom, x, y)) {
/*
* XDG toplevels may have nested surfaces, such as popup windows
* for context menus or tooltips. This function tests if any of
* those are underneath the coordinates x and y (in layout
* coordinates). If so, it sets the surface pointer to that
* wlr_surface and the sx and sy coordinates to the coordinates
* relative to that surface's top-left corner.
*/
/* XXX set *surface to xdg_surface->surface instead of
* NULL? what should sx/sy be in that case? */
if (surface)
*surface = wlr_xdg_surface_surface_at(c->xdg_surface,
x - c->geom.x - c->bw,
y - c->geom.y - c->bw, sx, sy);
wl_list_for_each(c, &stack, slink)
if (VISIBLEON(c, c->mon) && wlr_box_contains_point(&c->geom, x, y))
Client *
xytosurface(double x, double y,
struct wlr_surface **surface, double *sx, double *sy)
{
Client *c = xytoclient(x, y);
/*
* XDG toplevels may have nested surfaces, such as popup windows
* for context menus or tooltips. This function tests if any of
* those are underneath the coordinates x and y (in layout
* coordinates). If so, it sets the surface pointer to that
* wlr_surface and the sx and sy coordinates to the coordinates
* relative to that surface's top-left corner.
*/
/* XXX set *surface to xdg_surface->surface otherwise? what should
* sx/sy be in that case? */
if (c)
*surface = wlr_xdg_surface_surface_at(c->xdg_surface,
x - c->geom.x - c->bw,
y - c->geom.y - c->bw, sx, sy);
return c;
}