WMNBUD2PGH4XJP7UJNQXULQ475EIQUPEDPZOVU4AT2ALU3FHKFEQC
FU2WC4UK4Q5M3K3TSKML2HVBNQFJST4DJ2HCOOD4UW5K3RFV6OSAC
MU7VGXA6DNB7JL5L237EQ4RV3ERC3HT6HTK4JJB7YJBOALXVIQIAC
M4ZMV4ICABF3KJGNXYHW47Y7BZDUUKIU4K3EQBBDOFBGFEEHYDPQC
4XZATWRQIRK75HLKR4CHOGRQCSVSYB2W6BR5AQRLRRFJKDDIEODQC
GDGXDTOLKG5RWSGDJCWTDYIRWE2R55UKUVRLDL33KTGJCRXHH3SQC
3LD373HUEDIOTZZP7RWTC2DQ3I2XIUXIDKXDHPZ6U2B72MBUJB6AC
YI5DEBVFYKBKLMLDKR6BZPGF7OEXS4DX7W32PVPJDOMAUX4EIM3QC
D3UVBUCXGJOJYSD7QW2KTDQTNMVUYMAOBPN2OGNLM7IZWFOVMG3QC
XDDA5JPEY3VNHPK32G7GYRFNHF5K5JOIL7QBPK6F7GSR5MNRMAJQC
64STJYAKOVLMNC4VO4OGWNQ4J4LBIETANLDKON2NDPJV7ZEWTDLQC
WYVKSPRLSTAQDVP3JAQHRDMOSOXSBFALXNANKYXSDHRIWFADKZMAC
Q3BFKMS4YCHJ66QGNXGPCBEL5HOL5VXNJNR7MZEY4TPO2XH2C4KAC
EMEGEGSGKVPZCIPCOYJ47YRTVZG4HPEQBANVEV77663UMCI5V36QC
6US7XFRJWUNIUZHKTODZDU3DX6WO5K3J2G3ECIQYSVBDII3DXGWAC
X4Q25YFYZHXT6GTWNT5OCUNT66WM4RWKF6VRVUBD3BSQLQOFEPBQC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC
7L3TU7JVWPBPHN7WF4TJ263BZ6BC3AYRRW6PULFUP5JZUGWWNUSAC
S7RXJJZG4IEIVLPHEWFT5M2T3SRRO5US5SYBPXSYSWJJLXAKNNPAC
D425ND7AT3F7QJ3CCSESMVDOC3J5C5P32M5SJDBHECZJXLHNQ2FAC
FUZEZTLBNTVGUNLBGFLMVZOHLGMMHFPQD7USP4JYMGGVXBL2EUBQC
DGJFEKNKYTSZNU4VGJXLHBOQGRGKYQVDN6IHN25DPKPDEGYQBBAQC
7QP2Q5MUDMETQEZD2FRAVIFPIFNURQDKWJ32LJCK3XJU56BCPFFAC
TOFCZFUYVBVEBHMKVG6G5MKCAEF2QCQ4GKMKGQUSJRLGLDZEJF4QC
IIWDZCVWWDAJITIXQXCFIAF7Z46DTFV2FYCUYMS4P7JMP34A6BUQC
4QUF4MKRSB5LYYS5FSYTCDSIEMYIERI2BQZLRGJ3GIGVYCPJVEPAC
XXOC2AY53ZWML6TVPKX6BHGKZJNRET4IWRSTCVMJQJZMK3MFD3TQC
PSWOY2CD6NWN6INAVZIYXLLSDQU5USAF3PATAL7FYRHEVHQ77XFQC
BFWKVWAIUKHCZVRA62GW6QZUEUKQLW365HUWIVKTEIPJNJSOZBAQC
HFIKAPN3TBMDVBDG7SZLX4ZJMSFFDGINTO6C2SKO5IVYUILGCQEQC
VCNLR5X75OAXVKPZQHF5RUZ7BONBUC6RPGO2NZEUD3FZ7TEVL66AC
T65KVJWUY3RYRWBFG5DP4V4NID4VO3MM6IOFYPM2IJKR6NCD7YDQC
VAXA3WURYP2FVVI5HUGJDF66SUQLZNWRRTIIV526XQVPIDZMVFXQC
SP45PRAMJKF52GEK4TQU6PQQ3AY3KRXCUDGQNUN65UOBA4R6VL6QC
7EY3YPO43GHF3LWNI3UZKMMT65UO6DK4LA2X2UC25PAA77KVGSIQC
KP7Q7NW257U3YLYPR3TVNTN4YZCBCDLON5NDDZ425CMVJMCAQBCQC
2MNQBTVRKKCIBBLZY42PNL5VS5R62LFYKZ2GMCZM6CEEA6PGEKZQC
O3TIITAWQBJXO45JGUYX2N4JITKH4SEHV62AN5OG6GXQHDXVCR7QC
CFCIJBASG4L5JQUZ57IKRUV45CFAS65CRWGURGI5UHVGEKAJYOUQC
UCSTVE5NIAIQ3NJL5YLDFDKDPOCJS6NMAGABSWG67RGCPH47JQEQC
V24HNYFIMA4SECR4AVQJ2AIVEWOK5XJDMCNFGGGSIT6L2DEFBGJAC
2OPRUCF6X32U4MLIW3I5LSKCXWJNVDIZJDZQK7W2XNNIEGXC2UVQC
Z5Z7GRJMSKQLA2VWSHTK5ZLKUMFHUOYESH3X4SAXAEDZ2NSWAWLAC
PLJJLNS7E2UXW2YARGBSV6IHZEBGL5EW354IMMHPDATY5DQD77DAC
ZO37G4TIN3ISIX5QZNMNSXNCXOW3AUUIJEHXAIMSBLSNEV3OE3IQC
AVOU4HCKZUPX5K6TVRJWVZI5LQRT2XESSVCPIDJ5GIQWGP3J5J5QC
VZP5KLKVB635ERG2G57KPTUMTPE3BYKBVQCWMFW6GDZ3H5QU74FAC
HRPYY7AN45VGEMP4HK7VYJEWRRLE5TFKDIZR3AM5RRJ2AI34G3QQC
PJYEVNHWOKY53NR2C2PT6RTRACRSKPSPDFTTLTEOYN3ICAIIN45AC
J7X4HM2XFWYAEAYYXGTUKHNBZ4JZX64BZW5WUYAHEUPXYPWFUMRAC
24ZMBWYLMODPBAVLT4XNOSETHQXVLXNASYXUIGG2435IT7WIZC5AC
AEOM6GBTSH3NGIN365GS5L2PAUUSXSMDPMYTGJPL7UDMHDWLYXSQC
HWS332I73ETH3YIIOCQO7WB7VPQICME6GGXFJ7EUWDH5O3KA27QQC
QPIH44BS3UQOFH7SUW5JGWQ7EK6CGTPVBB57PKRU7EOK6PLVTQAQC
HH5I4HSPYNDRQHIOTASMU5BGFD754OUI4ZGRZQHUE5SM6OTJTEWQC
LQPHYO7IIMLXHUD5IK657BO4BE3SGT5HYDRJDU5OFDF5YUXKIRTAC
MJC3HT2VAXQTX53MRPT3PA3LMNNCI4STEOLLPT4KSSPPDGOAHUXQC
WWL35N23TZ2UPTMLXTVLR5KKFWA3H4MHQ5VXZDADRBS22I4A5F5QC
LJJH53FPOX3RP5PCHNORRMTUSV4DXYYP2A47X6VDZ5KZI6T2DEOAC
VJ3BNHJ4Z4DSKGGQMEJTSSHGI3NLK54HTP5GBT4FFRGS2TTVKKFAC
ZKVTQNVGM7FEFXJJPM33PJBJUPVDDBISMTA5BFFQKVBHOLNOTWEAC
FAGFMJELLBID6PONKHW7CKVRTZLEFAQQRF4FSE3LBCERN2ONFC6QC
YPBR3SBNUKK6FRVP2R23PJ3GTVACFNIHGRNGOWK3IQM4UIA4JGYAC
6XZPXDROIJ6BDFKLBQDHMJIEFQUCOCZ7VRK2AJMVJ5QYTLJFPFLAC
BJTFRPISAH2XAAVR5XVG4EU5E5HU5RX3YOSV4TYZ2GP2ZAXZC2JAC
YQQETCXBXPPLXBU3UPUIIKB3JZCHRFSW7PPP2DR436WVIXNXFUHAC
QAPSVUOF7DV6R2PSLKLZUKC5TMB62ZYOUZ2NA6CHFOU6PSTJULWAC
7HUMD4TAMWWBQDOZYCMWQXR66G3IU5WU3IVKTPCSMETSB6VREWTAC
SCBBNYN2ZEI2UBCW5C5QXQLLQGEWY4DWM2UHGTRZ7B653AONDQKAC
CKVVVLSLXV4EJB5P6QOZZOGG2PXJSN523ODZSGVW33GBHGCYKFLQC
XGXZF5T7UFWJQES25XVBJZ4BN53SJ3SXZH3YUB2JUYVPN2PDRPJAC
VJ6T4L76LPIIV25GCFWUSFZXEFIBQ2EMRU2WHF3YFJHXSAMHNO5AC
L4CIAHCUYOG3JCS34ZEPOR4EBHR3NYWHMKQFNYH3X4BQFV6LPR2AC
CLFRYF7CROZDF4776NYUZXZ46ZJNH3AEITGA3DOCLZ2QEMMUPOLQC
static void chvt(const Arg *arg);
static void cleanup(void);
static void cleanupkeyboard(struct wl_listener *listener, void *data);
static void cleanupmon(struct wl_listener *listener, void *data);
static void closemon(Monitor *m);
static void commitlayersurfacenotify(struct wl_listener *listener, void *data);
static void commitnotify(struct wl_listener *listener, void *data);
static void createidleinhibitor(struct wl_listener *listener, void *data);
static void createkeyboard(struct wlr_keyboard *keyboard);
layersurface->scene_layer = wlr_scene_layer_surface_v1_create(
layers[wlr_layer_surface->pending.layer], wlr_layer_surface);
layersurface->scene = wlr_layer_surface->surface->data =
layersurface->scene_layer->node;
void
dragicondestroy(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);
}
clock_gettime(CLOCK_MONOTONIC, &now);
/* Render if no XDG clients have an outstanding resize and are visible on
* this monitor. */
/* Checking m->un_map for every client is not optimal but works */
wl_list_for_each(c, &clients, link) {
if ((c->resize && m->un_map) || (c->type == XDGShell
&& (c->surface.xdg->pending.geometry.width !=
c->surface.xdg->current.geometry.width
|| c->surface.xdg->pending.geometry.height !=
c->surface.xdg->current.geometry.height))) {
/* Lie */
wlr_surface_send_frame_done(client_surface(c), &now);
skip = 1;
}
}
}
void
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);
else
wlr_data_source_destroy(event->drag->source);
}
void
startdrag(struct wl_listener *listener, void *data)
{
struct wlr_drag *drag = data;
if (!drag->icon)
return;
drag->icon->data = wlr_scene_subsurface_tree_create(layers[LyrNoFocus], drag->icon->surface);
motionnotify(0);
wl_signal_add(&drag->icon->events.destroy, &drag_icon_destroy);
for (i = 0; i < LENGTH(focus_order); i++) {
if ((node = wlr_scene_node_at(layers[focus_order[i]], x, y, nx, ny))) {
if (node->type == WLR_SCENE_NODE_SURFACE)
surface = wlr_scene_surface_from_node(node)->surface;
/* Walk the tree to find a node that knows the client */
for (pnode = node; pnode && !c; pnode = pnode->parent)
c = pnode->data;
if (c && c->type == LayerShell) {
c = NULL;
l = pnode->data;
}
}
Keyboard *kb = device->data = ecalloc(1, sizeof(*kb));
createidleinhibitor(struct wl_listener *listener, void *data)
{
struct wlr_idle_inhibitor_v1 *idle_inhibitor = data;
wl_signal_add(&idle_inhibitor->events.destroy, &idle_inhibitor_destroy);
wlr_idle_set_enabled(idle, seat, 0);
void
static void chvt(const Arg *arg);
static void cleanup(void);
static void cleanupkeyboard(struct wl_listener *listener, void *data);
static void cleanupmon(struct wl_listener *listener, void *data);
static void closemon(Monitor *m);
static void commitlayersurfacenotify(struct wl_listener *listener, void *data);
static void commitnotify(struct wl_listener *listener, void *data);
static void createkeyboard(struct wlr_keyboard *keyboard);
static void createidleinhibitor(struct wl_listener *listener, void *data);