6US7XFRJWUNIUZHKTODZDU3DX6WO5K3J2G3ECIQYSVBDII3DXGWAC XWNT56OHVMZPSJRR2RXUUBLDN7GXOYA6UYWMZWQFR7WNZGZ3SX2AC 2MNEWEUDXLYJSIGGRQF55ZYEJCOC7TQ7IHV3SJC5A7NAQ5X5NA7AC NVYH3JEQ32BX26LR5KPYTEW4QJNM2YCOOIHLAINQ7QXNTL7KDJCQC 7EY3YPO43GHF3LWNI3UZKMMT65UO6DK4LA2X2UC25PAA77KVGSIQC YQNDQLKXXWYAW3BNXERQZZTVI3G6H4ADTIW5ZHKUEZLCCZHIG3MAC ZDYKSDYRFFWS24DNKV7TEUZYCHBSLEDP7U7HBWCBR3HWM7LBDOQQC DGJFEKNKYTSZNU4VGJXLHBOQGRGKYQVDN6IHN25DPKPDEGYQBBAQC HFIKAPN3TBMDVBDG7SZLX4ZJMSFFDGINTO6C2SKO5IVYUILGCQEQC S7RXJJZG4IEIVLPHEWFT5M2T3SRRO5US5SYBPXSYSWJJLXAKNNPAC J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC 7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC SMPVNWKUULOMWGJELCISIFGBRVX6IKCOQVKIIZMQKDNVVAFRHQYAC XGXZF5T7UFWJQES25XVBJZ4BN53SJ3SXZH3YUB2JUYVPN2PDRPJAC CD2JEM3MH5BXN7ADZAWLJFTRZG7PMDCKISDNJEO472PIBEJHBH2AC F7JWVNZNHDF6QWHQDPFNIBNL3HARWDYF6BCW4IK7JLQRGVJPSNJQC W2IIP5B2G4PR6LRN5C3WYIMROFJV7YIAT5NBMCQTYCEMOZAULMVQC ZEKBZDRVZJFHG75HZQVVQHO4G7RIY5OZTSI5G3BWIF566BRQBXHAC D425ND7AT3F7QJ3CCSESMVDOC3J5C5P32M5SJDBHECZJXLHNQ2FAC 6ZKVISYIRGGLYDMIHGXDCHV6N6WYJP2DK3CRJL4AMCZY65OSEYDAC IIWDZCVWWDAJITIXQXCFIAF7Z46DTFV2FYCUYMS4P7JMP34A6BUQC STNAKFBNSAXICF6AJNYSCQKE4YYQGIMZHR7RSLZJBEOSSUMKBCNAC 6XZIQSMIVP2GZ5S3UCKEVNDSLTHSQEVSXLV4UIFF3G3SRCGJPXYAC NOI4U573ODSPVF6CUC4T7QSYHZGZFHJ4EKTP5Y73LMUZPXK35FKQC 24ZMBWYLMODPBAVLT4XNOSETHQXVLXNASYXUIGG2435IT7WIZC5AC 6V3JKJZJ7KBS5I3Q266ZCRJYVO56ZQKLJL4EOHN6XC222CZFXCDQC MZ734MOA6IYZE7SDSQGTBLYUF5VWLLK7M7E6T3KIY6DBEJR3CFMAC LJJH53FPOX3RP5PCHNORRMTUSV4DXYYP2A47X6VDZ5KZI6T2DEOAC 7UDWES3V56FD5L7VJXSFC6POZ7SXN4Z2JNJQ3XBVN7KBZD6AXTDQC 2QL2H4REDZT46FI3LQ4RYEMQYZBNBK3IC3KH3XERAJU3NCZWMNYQC VCNLR5X75OAXVKPZQHF5RUZ7BONBUC6RPGO2NZEUD3FZ7TEVL66AC DADSQJFKYX6U5JOHSHJWWDSUFC7ZWSZVHFMEKPZEXKPELMEQBL2QC BFWKVWAIUKHCZVRA62GW6QZUEUKQLW365HUWIVKTEIPJNJSOZBAQC 65GPTMYLVOQPVAKNBCN5RHHZEL7USZYSJ4VJQO7LYBCS7BZM7BYAC AXYOCJJNJECLJKI6EFQRIB4OZDZVSTCC4YEO7YAMS3QVNLXGK5HQC WWYCDUXC3LTWNEZL464AILJV5JXWG2ZGL2BPXSKN24MHEN6GXFLQC ERBETXYU7NGSWW5LHQ3NSJA2N27JNMDDYMZ74B6IVQTEQMLRP6PAC X4Q25YFYZHXT6GTWNT5OCUNT66WM4RWKF6VRVUBD3BSQLQOFEPBQC D5RCS7JWGBICNVGAAWBYQNU35PVNWI3P5VJACH2FJ4FDD2CF5EWAC HXYYEIHDIKDVCZ7NUFOPMIGLXHILYKRDQZA3QOLCGEIC4PL67WNAC VO3MWB6Z442HXCPJQAIFUKJGKNM5HKSZMELZTOBHDPXSVMZONWMQC 6TCDMCXLC4RNNQI6AEYYA6RZNHG3V2U6YDGXJOCU27F5TNKN26LQC 6OZ3VUODEBOTXODIJQU5TKXCDEJOWTYHCMCDB4MJ2X3T6EG374SAC BHAVCU3626VQYRHL7PPGBXGM3N5GBHTN5L5P74M6BKDAARKQDOAQC 3VV4BEF4XL3UURJHRQ3MEC3E3IIE6KMNKY7DHQTMQ4QBACKIKLMQC ZOOCZQBGZ4PCOU54EPPUPWNOIFWCM5RMZ4EFL2WFR7LFJTAMHZGAC HWS332I73ETH3YIIOCQO7WB7VPQICME6GGXFJ7EUWDH5O3KA27QQC MIZBQX6SKECIVNNGBF3LCR3IHXQVWQ5BJURMRSBNEVEUWFBH3MTQC VB73LHGDVI7ZDLCT35D7TICLZAAVEFSDIAJXBJTT5HYMMNMFHJKQC CXLGE3YYT2YXJIR7JE6NT27ONH445P5LZIKJHT53R3ZYQ3V4BHMAC WT554G3D2X4YAEDOCISXRNXQNNMQZVHIUANSJMT2CWRL756ZWZTAC GVPRPAVLH42RKRJO4AVXWTVCQVRRXL6OQOUVYB3ZHKC3NU5MZLFQC 2GP4MXKEDQMZ7E6TCRSMV2AGN7HLEAHR3QEAC2QFCQQNPMNJSIHQC WU3FVGGMDAGZ6E3YFQTFYTFGUJ5FRWCUZBVOWUEOK73MXK5ABMGQC JJXQTKU5WR74D7XW3JTN4Y3JSYDQTZ54GTD4F5XHT5RR2UWR72AAC GGLHB6M466D32B57EBNJMZRGNJB2DAKCMHNUKTN25TPZ4LV2GNYQC NZGOSJCYNED2LNYAEO5NJLPPCE732ALWC6U2U2OXULGAYJGS6W6QC 2IG2HOCZANCWBZUU5EATTSJPFM2KS6IPBBXD7P2C2XGMH4AGLLBQC BPQVRKAUWU2E3YAU5XZTOCSMDYFLEPLD5YPR5SUGJEDHQ56LLZIQC TOFCZFUYVBVEBHMKVG6G5MKCAEF2QCQ4GKMKGQUSJRLGLDZEJF4QC USRQOWVNGWY42YR6YQ4XGZIMWMP7UR65JMKHEPBQTHFX67AJGWCQC O3TIITAWQBJXO45JGUYX2N4JITKH4SEHV62AN5OG6GXQHDXVCR7QC AILEOG6JDK6PKFTW6JIDQ5GGSKEZL3DBLHLUHF7KR262QE2FZQFQC 2OQAWQSW5DDGUFJ4YWT5VXHZMRWQPDKZFO3JUPO4SV6JQHWT6HRAC C3IYU5EQOMXONEDMVSM6SPEGXGQZSUSIPVQOE4OLIQMRI7SDHUFQC CFCIJBASG4L5JQUZ57IKRUV45CFAS65CRWGURGI5UHVGEKAJYOUQC 2MNQBTVRKKCIBBLZY42PNL5VS5R62LFYKZ2GMCZM6CEEA6PGEKZQC W32YIHMVPAREXUADJOAX45B6CTXZY42EE77RDDZYNJFEE2HLQ3HAC VU5S7GWUAARNDZWDB6XGP5SHY43DRWPIDE2YQVCZWXI4MBBLDOEAC IIKPVF4PWEWCLOY4656OTCFZJ6KUMBGCHZW6A76AJBI2WJWYROGAC SV4UYATUNO4G473QWSHDFONASDFDGWTEFJD47IRN6RQJOVR5PUTQC EUJMBPB6W6ADQS4ZFMODC4S5WWH6SZIVM5OW46Z6CPMPDOL4HM7QC SNQHJSWQWDVQ6DQDHIZSSE6SIKWSPLTPSCBM5DFKRCKFL4XHEZDQC 4WVZ2LAGAIQ2EROHNA4T5PWQEEIPJRTA3CBHGAO55NACCUGLKEZQC }voidcreatelayersurface(struct wl_listener *listener, void *data){struct wlr_layer_surface_v1 *wlr_layer_surface = data;LayerSurface *layersurface;Monitor *m;struct wlr_layer_surface_v1_state old_state;if (!wlr_layer_surface->output) {wlr_layer_surface->output = selmon->wlr_output;}layersurface = ecalloc(1, sizeof(LayerSurface));layersurface->type = LayerShell;LISTEN(&wlr_layer_surface->surface->events.commit,&layersurface->surface_commit, commitlayersurfacenotify);LISTEN(&wlr_layer_surface->events.destroy, &layersurface->destroy,destroylayersurfacenotify);LISTEN(&wlr_layer_surface->events.map, &layersurface->map,maplayersurfacenotify);LISTEN(&wlr_layer_surface->events.unmap, &layersurface->unmap,unmaplayersurfacenotify);layersurface->layer_surface = wlr_layer_surface;wlr_layer_surface->data = layersurface;m = wlr_layer_surface->output->data;layersurface->scene = wlr_layer_surface->surface->data =wlr_scene_subsurface_tree_create(layers[wlr_layer_surface->pending.layer],wlr_layer_surface->surface);layersurface->scene->data = layersurface;wl_list_insert(&m->layers[wlr_layer_surface->pending.layer],&layersurface->link);/* Temporarily set the layer's current state to pending* so that we can easily arrange it*/old_state = wlr_layer_surface->current;wlr_layer_surface->current = wlr_layer_surface->pending;arrangelayers(m);wlr_layer_surface->current = old_state;
createlayersurface(struct wl_listener *listener, void *data){struct wlr_layer_surface_v1 *wlr_layer_surface = data;LayerSurface *layersurface;Monitor *m;struct wlr_layer_surface_v1_state old_state;if (!wlr_layer_surface->output) {wlr_layer_surface->output = selmon->wlr_output;}layersurface = ecalloc(1, sizeof(LayerSurface));layersurface->type = LayerShell;LISTEN(&wlr_layer_surface->surface->events.commit,&layersurface->surface_commit, commitlayersurfacenotify);LISTEN(&wlr_layer_surface->events.destroy, &layersurface->destroy,destroylayersurfacenotify);LISTEN(&wlr_layer_surface->events.map, &layersurface->map,maplayersurfacenotify);LISTEN(&wlr_layer_surface->events.unmap, &layersurface->unmap,unmaplayersurfacenotify);layersurface->layer_surface = wlr_layer_surface;wlr_layer_surface->data = layersurface;m = wlr_layer_surface->output->data;layersurface->scene = wlr_layer_surface->surface->data =wlr_scene_subsurface_tree_create(layers[wlr_layer_surface->pending.layer],wlr_layer_surface->surface);layersurface->scene->data = layersurface;wl_list_insert(&m->layers[wlr_layer_surface->pending.layer],&layersurface->link);/* Temporarily set the layer's current state to pending* so that we can easily arrange it*/old_state = wlr_layer_surface->current;wlr_layer_surface->current = wlr_layer_surface->pending;arrangelayers(m);wlr_layer_surface->current = old_state;}void
}voiddragicondestroy(struct wl_listener *listener, void *data){struct wlr_drag_icon *icon = data;wlr_scene_node_destroy(icon->data);// Focus enter isn't sent during drag, so refocus the focused node.focusclient(selclient(), 1);motionnotify(0);}voidtogglefullscreen(const Arg *arg){Client *sel = selclient();if (sel)setfullscreen(sel, !sel->isfullscreen);}voidsetfullscreen(Client *c, int fullscreen){c->isfullscreen = fullscreen;c->bw = fullscreen ? 0 : borderpx;client_set_fullscreen(c, fullscreen);if (fullscreen) {c->prev = c->geom;resize(c, c->mon->m.x, c->mon->m.y, c->mon->m.width, c->mon->m.height, 0);} else {/* restore previous size instead of arrange for floating windows since* client positions are set by the user and cannot be recalculated */resize(c, c->prev.x, c->prev.y, c->prev.width, c->prev.height, 0);}arrange(c->mon);printstatus();}voidfullscreennotify(struct wl_listener *listener, void *data){Client *c = wl_container_of(listener, c, fullscreen);int fullscreen = client_wants_fullscreen(c);if (!c->mon) {/* if the client is not mapped yet, let mapnotify() call setfullscreen() */c->isfullscreen = fullscreen;return;}setfullscreen(c, fullscreen);
}voidfullscreennotify(struct wl_listener *listener, void *data){Client *c = wl_container_of(listener, c, fullscreen);int fullscreen = client_wants_fullscreen(c);if (!c->mon) {/* if the client is not mapped yet, let mapnotify() call setfullscreen() */c->isfullscreen = fullscreen;return;}setfullscreen(c, fullscreen);
requeststartdrag(struct wl_listener *listener, void *data){struct wlr_seat_request_start_drag_event *event = data;if (wlr_seat_validate_pointer_grab_serial(seat, event->origin,event->serial))wlr_seat_start_pointer_drag(seat, event->drag, event->serial);elsewlr_data_source_destroy(event->drag->source);}void
}voidrequeststartdrag(struct wl_listener *listener, void *data){struct wlr_seat_request_start_drag_event *event = data;if (wlr_seat_validate_pointer_grab_serial(seat, event->origin,event->serial))wlr_seat_start_pointer_drag(seat, event->drag, event->serial);elsewlr_data_source_destroy(event->drag->source);
setfullscreen(Client *c, int fullscreen){c->isfullscreen = fullscreen;c->bw = fullscreen ? 0 : borderpx;client_set_fullscreen(c, fullscreen);if (fullscreen) {c->prev = c->geom;resize(c, c->mon->m.x, c->mon->m.y, c->mon->m.width, c->mon->m.height, 0);} else {/* restore previous size instead of arrange for floating windows since* client positions are set by the user and cannot be recalculated */resize(c, c->prev.x, c->prev.y, c->prev.width, c->prev.height, 0);}arrange(c->mon);printstatus();}void