xwayland: add server and basic window functionality
xwayland: add server and basic window functionality
xwayland: add server and basic window functionality
xwayland: add server and basic window functionality
HWS332I73ETH3YIIOCQO7WB7VPQICME6GGXFJ7EUWDH5O3KA27QQC STNAKFBNSAXICF6AJNYSCQKE4YYQGIMZHR7RSLZJBEOSSUMKBCNAC PMRSYJRYQAXZ3OEDD7ANMXTECMT2DNJEC3XQABRNA63SAOUZWA3AC HNCOIBG56SF5Q55XJDIHSN67EKDV5ZLGEII5XT5S7FX5UXM34KWAC WVSX4HL763MHTPSNJOCEXKGYBFYOABSPX637PKY6RAU55FFFY7YQC 2FBILAASURBC6XQLU7Q4NOOTAZMWFFSIB66S4YHWJ5JHYEUAMJWQC MIZBQX6SKECIVNNGBF3LCR3IHXQVWQ5BJURMRSBNEVEUWFBH3MTQC 7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC LQPHYO7IIMLXHUD5IK657BO4BE3SGT5HYDRJDU5OFDF5YUXKIRTAC QL6IFEPOHHUDBY2SGUZNNIRTDSZOSRJIHJKVU54LZSGTPTFPM2UAC XKWY25ZVEJIJU7R23CEG5CTYRAWKZ5FXSHY3ZEZRGCIWYIKQSLOAC US4HQXVWZEPU6HZ7Q733QB5QXOD32HJBYHUAQTT3DZGVXBMPNNOAC 7L3TU7JVWPBPHN7WF4TJ263BZ6BC3AYRRW6PULFUP5JZUGWWNUSAC J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC ZOOCZQBGZ4PCOU54EPPUPWNOIFWCM5RMZ4EFL2WFR7LFJTAMHZGAC S7RXJJZG4IEIVLPHEWFT5M2T3SRRO5US5SYBPXSYSWJJLXAKNNPAC 2QL2H4REDZT46FI3LQ4RYEMQYZBNBK3IC3KH3XERAJU3NCZWMNYQC E7UO6NRGXFDMBU3BSJYRDNOA3Y7VHD7NWPHI5PHCPHQF6ZNOPZLQC PYRALXEFRJ5O2NSVSR7WFJ56QNW2VMWYTBKKGJMDLZCHEU4JXZKQC W32YIHMVPAREXUADJOAX45B6CTXZY42EE77RDDZYNJFEE2HLQ3HAC CLFRYF7CROZDF4776NYUZXZ46ZJNH3AEITGA3DOCLZ2QEMMUPOLQC D425ND7AT3F7QJ3CCSESMVDOC3J5C5P32M5SJDBHECZJXLHNQ2FAC MO5ORR7VSER3YUNO77DZJVKGOVYC2KNDCSC72J4NF7JYOHHTLRQAC 52BEET6JL7L5PXXHSC6TN7K53HVSOIOVGUZTSQJ3OFF2YXC25UNQC UXGT6OW6ENH6SWLVRF3JVS3WGTXPTKZPVOESJAGUSSLZT2WRASBAC 3EDO6OUSMQ77E3GRBT5QDQ556NF4YEU4LMRXT5IU2MQVOG2D3KUAC D64WESJYNP7BT2GW7BX6332GAXIWK72KRIBEKTE34ATA4APJMGNQC OYZELWD247C2GT4QAW6YECUCA2GRLG4VI25BMOZKOGNRKERPZ6AQC UCSTVE5NIAIQ3NJL5YLDFDKDPOCJS6NMAGABSWG67RGCPH47JQEQC P3BVYOM6YV7M33KYMI5XNLZ6F44BBAP3I6NXPNTTCUAAPVPJ3PVQC WH2QXAEHJ3UWIAS5YCRYXCTROAX4SNC3UESM56HUMM3UGUUAAZQAC RWCXH2L4WZ4U5DZRUGRN6POD7C4WXXLCCSLINRXNBCNYGA7VJD7QC FJIYVCRICFJ7T52B2SLJOGFFX6AEYZNOSM3FJZ2B2ETFFYX2QXNAC QD3NDIJ4CRDN6QGCHALU2UG5DPMAYGE4MSGJPLYVXKLZNCV2WGIAC IIWDZCVWWDAJITIXQXCFIAF7Z46DTFV2FYCUYMS4P7JMP34A6BUQC 6ZKVISYIRGGLYDMIHGXDCHV6N6WYJP2DK3CRJL4AMCZY65OSEYDAC 6XZIQSMIVP2GZ5S3UCKEVNDSLTHSQEVSXLV4UIFF3G3SRCGJPXYAC if (!(appid = c->xdg_surface->toplevel->app_id))appid = broken;if (!(title = c->xdg_surface->toplevel->title))title = broken;
if (c->isxdg) {if (!(appid = c->xdg_surface->toplevel->app_id))appid = broken;if (!(title = c->xdg_surface->toplevel->title))title = broken;} else {if (!(title = c->xwayland_surface->title))title = broken;}
surface = wlr_xdg_surface_surface_at(c->xdg_surface,cursor->x - c->geom.x - c->bw,cursor->y - c->geom.y - c->bw, NULL, NULL);
if (c->isxdg)surface = wlr_xdg_surface_surface_at(c->xdg_surface,cursor->x - c->geom.x - c->bw,cursor->y - c->geom.y - c->bw, NULL, NULL);elsesurface = wlr_surface_surface_at(c->xwayland_surface->surface,cursor->x - c->geom.x - c->bw,cursor->y - c->geom.y - c->bw, NULL, NULL);
}voidcreatenotifyxwayland(struct wl_listener *listener, void *data){struct wlr_xwayland_surface *xwayland_surface = data;Client *c;/* Allocate a Client for this surface */c = xwayland_surface->data = calloc(1, sizeof(*c));c->xwayland_surface = xwayland_surface;c->isxdg = 0;c->bw = borderpx;/* Listen to the various events it can emit */c->map.notify = maprequest;wl_signal_add(&xwayland_surface->events.map, &c->map);c->unmap.notify = unmapnotify;wl_signal_add(&xwayland_surface->events.unmap, &c->unmap);c->destroy.notify = destroynotify;wl_signal_add(&xwayland_surface->events.destroy, &c->destroy);
if (tl != ptl && ptl)wlr_xdg_toplevel_set_activated(ptl, 0);if (tl != ptl && tl)wlr_xdg_toplevel_set_activated(tl, 1);
if (tl != ptl && ptl) {if (ptl->isxdg)wlr_xdg_toplevel_set_activated(ptl->xdg_surface, 0);elsewlr_xwayland_surface_activate(ptl->xwayland_surface, 0);}if (tl != ptl && tl) {if (tl->isxdg)wlr_xdg_toplevel_set_activated(tl->xdg_surface, 1);elsewlr_xwayland_surface_activate(tl->xwayland_surface, 1);}
wlr_xdg_surface_get_geometry(c->xdg_surface, &c->geom);c->geom.width += 2 * c->bw;c->geom.height += 2 * c->bw;
if (c->isxdg) {wlr_xdg_surface_get_geometry(c->xdg_surface, &c->geom);c->geom.width += 2 * c->bw;c->geom.height += 2 * c->bw;} else {c->geom.x = c->xwayland_surface->x;c->geom.y = c->xwayland_surface->y;c->geom.width = c->xwayland_surface->width + 2 * c->bw;c->geom.height = c->xwayland_surface->height + 2 * c->bw;}
if ((c = xytoclient(cursor->x, cursor->y)))surface = wlr_xdg_surface_surface_at(c->xdg_surface,cursor->x - c->geom.x - c->bw,cursor->y - c->geom.y - c->bw, &sx, &sy);
if ((c = xytoclient(cursor->x, cursor->y))) {if (c->isxdg)surface = wlr_xdg_surface_surface_at(c->xdg_surface,cursor->x - c->geom.x - c->bw,cursor->y - c->geom.y - c->bw, &sx, &sy);elsesurface = wlr_surface_surface_at(c->xwayland_surface->surface,cursor->x - c->geom.x - c->bw,cursor->y - c->geom.y - c->bw, &sx, &sy);}
rdata.y = c->geom.y + c->bw,wlr_xdg_surface_for_each_surface(c->xdg_surface, render, &rdata);
rdata.y = c->geom.y + c->bw;if (c->isxdg)wlr_xdg_surface_for_each_surface(c->xdg_surface, render, &rdata);elsewlr_surface_for_each_surface(c->xwayland_surface->surface, render, &rdata);
wlr_xdg_toplevel_set_size(c->xdg_surface,c->geom.width - 2 * c->bw, c->geom.height - 2 * c->bw);
if (c->isxdg)wlr_xdg_toplevel_set_size(c->xdg_surface,c->geom.width - 2 * c->bw, c->geom.height - 2 * c->bw);elsewlr_xwayland_surface_configure(c->xwayland_surface,c->geom.x, c->geom.y,c->geom.width - 2 * c->bw, c->geom.height - 2 * c->bw);
/** Initialise the XWayland X server.* It will be started when the first X client is started.*/xwayland = wlr_xwayland_create(dpy, compositor, true);if (xwayland) {wl_signal_add(&xwayland->events.new_surface, &new_xwayland_surface);setenv("DISPLAY", xwayland->display_name, true);} else {fprintf(stderr, "failed to setup XWayland X server, continuing without it\n");}