Thanks so much for helping to keep the project running while life was crazy!
TOFCZFUYVBVEBHMKVG6G5MKCAEF2QCQ4GKMKGQUSJRLGLDZEJF4QC OHAXZDUSN77TGUZFMNO6V4744KH3HDP7SCXVXYEM7EK35KMHOLLAC QL4B4MMAVQZ52JOKUTRFZLCTSZLYUJLRYSDSBRZBZ5UNPQ7TOQRQC V3FJE2F2RDV6KH6EB7CCYRKQC726BIEH27DCTZKHHAYSQPUZU6LQC 3YASTKW6ARYFEDXJU2OH2O26NLG24ZKGELZNCRCPSMQ6KJ63OBUQC DYFVLEF66ARTPLPSVB3CNZFR3CMJPE2HZXGYI2A4BWHPUFZBLM5QC QRRSKK2KU2ELH5E6ZGDCCWJRXG6RB5EYFHD324I6LKWADGG56M6QC NZZZBRGVI57UXK257IAY7ZPC5DOTWP2HGFZLNS543R2EH5FDHNKQC ZGRRKB6DZARJGDEE2QL46TBMF6HO37VCQ26SEHMAWJ6SM7POXULAC GVPRPAVLH42RKRJO4AVXWTVCQVRRXL6OQOUVYB3ZHKC3NU5MZLFQC VO3MWB6Z442HXCPJQAIFUKJGKNM5HKSZMELZTOBHDPXSVMZONWMQC ZTOYJ4G4UQ665FKUH376KJOOO5GXHI62SWVXNZS7X6F2Y4GG2FSQC INFGFQAZC2P57M7B7G32YWZOAMUNVDB4FUMRY6GTQ6ANSMSPLIHAC F7JWVNZNHDF6QWHQDPFNIBNL3HARWDYF6BCW4IK7JLQRGVJPSNJQC RV6O6UDDBQMQQMSEHCS2T7SGUIG7UCNL6CEY37DJDRNUUURRDELQC IZ2KIIKXVGAUR2NRYJMZCTIXUCPWCRQFDXDAE2SAW6NFKINXRPWQC O2GTCFVDCWU4TI3PJDMOWLUINIOCCQDOQAGZR476NSVLTUINGJYQC QABPNBR63OM7GUPREDFVZEQH3SE55ZGJLSOI7TPFA2KJNJSQMZLAC SCGPO3IMIRLM6JAGVBLYO6MCN24HTDRMOTBZ36RRDO3R65BZJFAQC QDFBAKHJXFFUKZASI36Y25WMR7MNUQOAPYIRIRL6WGIWV45BMSNAC ZF4XKSZDOZ72J3I2CBN3M4MXTATJYKBUFZKBS4DDVHCACWUAZ5ZQC RM7J7D2HLZX66BJZW5O6BLUIDECLCCPQIZH3PXLQOZC67YCBSY6QC S5I7HVUVLNMAV64UX4AW4OWIB7UTQRGQG6TXBR7ZMZXXLCTVGAJAC JRXMQ2GKMY3ZPLMON4D7OPHU62B4A7PV5FXLYBQMJRNCLVKTUALQC MRPV4XBEVZNHLWBK3BMNXRPOBWGKX44RVT5XHEB4XP5VANMRWEMQC TXT5WDVXWSX6H7A5IDFPAR42VB6RJD2FKHUR5WW4UWCRJSQ4MPIAC 7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC Q63IYM3JPFW56MOE5PFL7U4AJ6BHTRSV7NHO5N3ILDA43MNQ4PZQC DACFL7ZVMNMIL75ZQE5BIXFCRYOWYISZ42OKHOTD4AD5GY63AUWAC LQPHYO7IIMLXHUD5IK657BO4BE3SGT5HYDRJDU5OFDF5YUXKIRTAC 4QUF4MKRSB5LYYS5FSYTCDSIEMYIERI2BQZLRGJ3GIGVYCPJVEPAC 3VV4BEF4XL3UURJHRQ3MEC3E3IIE6KMNKY7DHQTMQ4QBACKIKLMQC 2OQAWQSW5DDGUFJ4YWT5VXHZMRWQPDKZFO3JUPO4SV6JQHWT6HRAC PLJJLNS7E2UXW2YARGBSV6IHZEBGL5EW354IMMHPDATY5DQD77DAC USRQOWVNGWY42YR6YQ4XGZIMWMP7UR65JMKHEPBQTHFX67AJGWCQC 6OZ3VUODEBOTXODIJQU5TKXCDEJOWTYHCMCDB4MJ2X3T6EG374SAC J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC PMRSYJRYQAXZ3OEDD7ANMXTECMT2DNJEC3XQABRNA63SAOUZWA3AC VCNLR5X75OAXVKPZQHF5RUZ7BONBUC6RPGO2NZEUD3FZ7TEVL66AC MO5ORR7VSER3YUNO77DZJVKGOVYC2KNDCSC72J4NF7JYOHHTLRQAC CD2JEM3MH5BXN7ADZAWLJFTRZG7PMDCKISDNJEO472PIBEJHBH2AC SXR2JTOL5ZWTFNSCWS3D3W6QP7BVS53AF2WXBAWEE4K3CUWVHCTAC D425ND7AT3F7QJ3CCSESMVDOC3J5C5P32M5SJDBHECZJXLHNQ2FAC XGXZF5T7UFWJQES25XVBJZ4BN53SJ3SXZH3YUB2JUYVPN2PDRPJAC 34ZVZ4LWAOYLVXC2VO5QZLJHCH4ZKLDJUPILGNFFEPJ6BLTAN3HAC NLOBELMSKHUSKSMPZ2QSDVIOJRGWV7HNXNIKZ55TMUCH7DI73TAAC 6XZIQSMIVP2GZ5S3UCKEVNDSLTHSQEVSXLV4UIFF3G3SRCGJPXYAC IIWDZCVWWDAJITIXQXCFIAF7Z46DTFV2FYCUYMS4P7JMP34A6BUQC VB73LHGDVI7ZDLCT35D7TICLZAAVEFSDIAJXBJTT5HYMMNMFHJKQC IIKPVF4PWEWCLOY4656OTCFZJ6KUMBGCHZW6A76AJBI2WJWYROGAC E7UO6NRGXFDMBU3BSJYRDNOA3Y7VHD7NWPHI5PHCPHQF6ZNOPZLQC HWS332I73ETH3YIIOCQO7WB7VPQICME6GGXFJ7EUWDH5O3KA27QQC 7L3TU7JVWPBPHN7WF4TJ263BZ6BC3AYRRW6PULFUP5JZUGWWNUSAC RJ533ETG67DQKGRTX2A6N2MFI76GTSU3KFGFAZGCVD33TT3SC67AC WRXZXFDNBE3RXUV7VRWD54QHRWMSVHPKE4NKDOIFQLD6WZ73MQPAC FCEQONUYK6M5ZEWKBAPW6F64EURYKHBH4YIM4HVBSBKFRDD7YHRQC F72VJF4KJZEYZEYGAGKCWPMEQGPKS7T5PEEJPJKZO6ZG246TTLAQC TBCINKTPRLMPUWXGGPFZLJQO3KYXCGIQFE5IMHNLKNBO4TWJHM2AC SCBBNYN2ZEI2UBCW5C5QXQLLQGEWY4DWM2UHGTRZ7B653AONDQKAC VJ6T4L76LPIIV25GCFWUSFZXEFIBQ2EMRU2WHF3YFJHXSAMHNO5AC UCSTVE5NIAIQ3NJL5YLDFDKDPOCJS6NMAGABSWG67RGCPH47JQEQC 7HUMD4TAMWWBQDOZYCMWQXR66G3IU5WU3IVKTPCSMETSB6VREWTAC NBKUNVS3OI6G2JXUF2OA2NMA7EKDCHS3O2RKOZAY66HCHWJ4T5KAC XXOC2AY53ZWML6TVPKX6BHGKZJNRET4IWRSTCVMJQJZMK3MFD3TQC VPJQMU6GLXQ34RRPU7ER6CC3UDB2OM3FQWMEPK33LG5LGHNBZTFQC ZOOCZQBGZ4PCOU54EPPUPWNOIFWCM5RMZ4EFL2WFR7LFJTAMHZGAC SP45PRAMJKF52GEK4TQU6PQQ3AY3KRXCUDGQNUN65UOBA4R6VL6QC QQGHHW5XN2GWROQUW6BRS3W5J5W6ANKEVCP3EC7RTXAA3KCA4GYAC 625W47O7SIM55H5CFM7JKX2EN4EIP2TXFVFO7URBZIXQNMX4LBDAC CFIOQQFW4UKNDR2FDDHPZN5DBTMELTGUVZDNEZA6OF7WVONVEZJQC OFMBPPFARLKEKUP4ENSHZSIFJOFMO65UZOYO77N4YCXJ2S6PVTMQC MIZBQX6SKECIVNNGBF3LCR3IHXQVWQ5BJURMRSBNEVEUWFBH3MTQC 6TCDMCXLC4RNNQI6AEYYA6RZNHG3V2U6YDGXJOCU27F5TNKN26LQC JJXQTKU5WR74D7XW3JTN4Y3JSYDQTZ54GTD4F5XHT5RR2UWR72AAC WT554G3D2X4YAEDOCISXRNXQNNMQZVHIUANSJMT2CWRL756ZWZTAC 34QBMVT4HUWX4NS7QFHDTWS7ICNX25BECPI2K33AZV7VXI6NOCGQC GGLHB6M466D32B57EBNJMZRGNJB2DAKCMHNUKTN25TPZ4LV2GNYQC CFCIJBASG4L5JQUZ57IKRUV45CFAS65CRWGURGI5UHVGEKAJYOUQC 3RU5REBOOAYYK7CJKRFPTSQ7QKD7CPIM6C3I6G6NCE47IRMTRIPAC RDEV6AMJ4SLUNXMGVNH7OFA2D2DCV7QZFQ4MJFPWXE2T2PQXX5TAC AILEOG6JDK6PKFTW6JIDQ5GGSKEZL3DBLHLUHF7KR262QE2FZQFQC O3TIITAWQBJXO45JGUYX2N4JITKH4SEHV62AN5OG6GXQHDXVCR7QC KP7Q7NW257U3YLYPR3TVNTN4YZCBCDLON5NDDZ425CMVJMCAQBCQC TZ6AAEIJVIR4Y2QHKWVWVASJE5CT335GKODVUSGB4IWDJ56TUOGQC W32YIHMVPAREXUADJOAX45B6CTXZY42EE77RDDZYNJFEE2HLQ3HAC I2UG6WQKU6GNMQXFZXVONILKQFYXI7AIGK44KCMDWCQETA3UZW2AC VYZMMYEO3CEHLATYEHS7G6XBGEVOWDMAXHMHMINACSNF75TH72UAC 22AOV53ZPZKPZPJGHYOLNJYTUNQEB55NXSDW3HNFXD4IX4KXGHTAC W2IIP5B2G4PR6LRN5C3WYIMROFJV7YIAT5NBMCQTYCEMOZAULMVQC S7RXJJZG4IEIVLPHEWFT5M2T3SRRO5US5SYBPXSYSWJJLXAKNNPAC RS7FD3UJQ7HVHZ6I5TW476LSXRHSQS4BZMN6MJDMDQ42JH2MOE6QC 6LVZRZGDURMWBUBXHFGV4HGB7L5M2FKCYGJCAU3X2PK74VJQ6RCAC O5JVMDEEKP334BAYMJ6HHXROW4X4WC24JHCYZTKJRQE5UGYXV7YQC 2QL2H4REDZT46FI3LQ4RYEMQYZBNBK3IC3KH3XERAJU3NCZWMNYQC 65GPTMYLVOQPVAKNBCN5RHHZEL7USZYSJ4VJQO7LYBCS7BZM7BYAC SHN6Q2EL3A4WO6LD252QC7CVJUPBRWY3LYI6NONASWYJ2KOVVCLAC IM5D7DQINVNZPB6MV4Q5TWZU23YM7QMWNCCZNTF4SBBEESV3S2PAC SJYYGTAHOXUL5VHGVPIZKIYQ3JCXQHARIECVKKPBFBSMGIOSDA7AC 46MQCVOAPLYAM3HMYFA7E2B6IXSXO2Z57JNBORUBRL6P2GXADSPQC DZARK42IRA3GGM2HTCVSMT3IXJATCQCKXPWJKS6CZ23FWRH34YDAC ZJSS4UDVHV6NYWHSI2U4CHCP46CKN3S5XJ3LL2KT4V6FFYHD5D2QC ZIXAFAJJEKSFECJJW57MQ2Z666IZSJXU5FVAQ2JLG34BEJIV322AC QIIHRSY26Q3QJQUIDTU4M4C5NGAW3NGDOKT5UVZBD25A6UVPQDPQC RTF6FIROMZBLFDIGA66N3CZXVXKYJWI7TB5RM3B5X4BU5AFIAEMAC P3BVYOM6YV7M33KYMI5XNLZ6F44BBAP3I6NXPNTTCUAAPVPJ3PVQC WH2QXAEHJ3UWIAS5YCRYXCTROAX4SNC3UESM56HUMM3UGUUAAZQAC LRGGX34PR2PQEBW6U465VYOGIYOPD365PB444JGR6R3H7E524CCQC XHVBTXWGXGOVHLFX57RQI54NP2OY3BYI42K4ZODZDHXVZ2VF5YTQC CJYJF7B4EVOQ52VLDGPXTJSYZEBXJO4S4A5N2DM4IWI6UQ2BZTVQC OPA33YRIB5AVFBKVANDGJF4IO7ZPPSIAJ75RULIM46SI2YX54ODAC VU5S7GWUAARNDZWDB6XGP5SHY43DRWPIDE2YQVCZWXI4MBBLDOEAC QD3NDIJ4CRDN6QGCHALU2UG5DPMAYGE4MSGJPLYVXKLZNCV2WGIAC 6ZKVISYIRGGLYDMIHGXDCHV6N6WYJP2DK3CRJL4AMCZY65OSEYDAC ECOJQLQTN3LTJT7DRH7MXAJMZ5A7UOIMKLTNZFODOGE5B2U7EDVAC FJIYVCRICFJ7T52B2SLJOGFFX6AEYZNOSM3FJZ2B2ETFFYX2QXNAC 3EKVUJXI7KI4ZCILWWFJ6UNBYAHBS42TZ3PIPXOEXQ24KEFFA72QC US4HQXVWZEPU6HZ7Q733QB5QXOD32HJBYHUAQTT3DZGVXBMPNNOAC EUJMBPB6W6ADQS4ZFMODC4S5WWH6SZIVM5OW46Z6CPMPDOL4HM7QC GX2PWWI3Y7BOEOUIXW5NS4SYX4SXRWUC4TZ4RALA3AVCPX23CUEAC TOHEQJ4RLXZXOUGTQN2OCPCIKSVNGVMSUC4UB3KGCLZV4JUULD2QC R2EEZTZFT5S4KDNLI6RTD5X4H6BYJCL6EF24I33DSLUI6E7FBYRQC 4WVZ2LAGAIQ2EROHNA4T5PWQEEIPJRTA3CBHGAO55NACCUGLKEZQC 4VNCBQXHKJMDO7A4KJCFLLU6ORI6ZYOEGJOQWBLGXKF67I3P7V6QC WIS5F3QY5CUHYUK723DE2JWDB6AWZEWSQED67M2HDY5B7UAE6NVQC 6V3JKJZJ7KBS5I3Q266ZCRJYVO56ZQKLJL4EOHN6XC222CZFXCDQC 6HOXS3C6YQT4KLOHDMK4DVQ3EBGFBLHT2QNJY7Z6BVHM7ZPI6COAC 4E4BAOHMWKREJPN35VYZD54WX7XZWN7XBYGJO2IHSUFDPGIDZCYAC DFTXJKCO3JDLQDWKBGO7SISX7BFHYZL3GXSIT2GEEZBV4ND33YPQC 2ZRKX4A24W4WNSLJNPKP3FWB3Y3UCYLWWESTC65P45BQFSJKS4PQC SFBYBWC35S4IMTSC3ULSSAJVBWKUMZMKSF5RYODD3ARWD645RIUAC N64TMMPDOHSXHEAX4JTOA2TTGLHOTTL52MMGYIMZP2JDBH6WW7NAC ZPSXARCBIT2LZ4PLNMKXHIEEWG3XLVXXISIZDYNGFACDI5I256NQC if (tap_to_click && libinput_device_config_tap_get_finger_count(libinput_device))libinput_device_config_tap_set_enabled(libinput_device, LIBINPUT_CONFIG_TAP_ENABLED);if (libinput_device_config_scroll_has_natural_scroll(libinput_device))libinput_device_config_scroll_set_natural_scroll_enabled(libinput_device, natural_scrolling);
}}voidfullscreennotify(struct wl_listener *listener, void *data){Client *c = wl_container_of(listener, c, fullscreen);setfullscreen(c, !c->isfullscreen);}}voidsetfullscreen(Client *c, bool fullscreen){c->isfullscreen = fullscreen;c->bw = (1 - fullscreen) * borderpx;#ifdef XWAYLANDif (c->type == X11Managed)wlr_xwayland_surface_set_fullscreen(c->surface.xwayland, fullscreen);else#endifwlr_xdg_toplevel_set_fullscreen(c->surface.xdg, fullscreen);// restore previous size instead of arrange to work with floating windowsif (fullscreen) {c->oldx = c->geom.x;c->oldy = c->geom.y;c->oldheight = c->geom.height;c->oldwidth = c->geom.width;resize(c, c->mon->m.x, c->mon->m.y,c->mon->m.width, c->mon->m.height, false);} else {resize(c, c->oldx, c->oldy, c->oldwidth, c->oldheight, false);
for (i = 0; i < nsyms; i++)
if (c->isfullscreen) {resize(c, c->mon->m.x, c->mon->m.y, c->mon->m.width, c->mon->m.height, false);return;}resize(c, m->w.x, m->w.y, m->w.width, m->w.height, false);
c->fullscreen.notify = fullscreennotify;wl_signal_add(&xwayland_surface->events.request_fullscreen, &c->fullscreen);c->isfullscreen = false;
if (c->isfullscreen) {resize(c, c->mon->m.x, c->mon->m.y,c->mon->m.width, c->mon->m.height, false);return;}const float *color = (c == sel) ? focuscolor : bordercolor;for (int i = 0; i < 4; i++) {int w = surface->current.width;int h = surface->current.height;struct wlr_box *borders = (struct wlr_box[4]) {wlr_render_rect(renderer, &borders[i], color,
dwl is a work in progress, and it has not yet reached its feature goals in a number of ways:- A window's texture is scaled for its "home" monitor only (noticeable when window sits across a monitor boundary)- Urgent/attention/focus-request ([not yet supported](https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/9) by xdg-shell protocol)- Damage tracking
Many thanks to suckless.org and the dwm developers and community for the inspiration, and to Devin J. Pohly for creating dwl.
Many thanks to suckless.org and the dwm developers and community for the inspiration, and to the various contributors to the project, including:- Alexander Courtis for the XWayland implementation- Guido Cella for the layer-shell protocol implementation and for helping to keep the project running