2QL2H4REDZT46FI3LQ4RYEMQYZBNBK3IC3KH3XERAJU3NCZWMNYQC
L4X3HG56S4DS7QJTLMLP47BGCPF2TM5XRUFEN56BTWYJICBYUUEAC
QL6IFEPOHHUDBY2SGUZNNIRTDSZOSRJIHJKVU54LZSGTPTFPM2UAC
IH7QAHDQUTGT7KS2IP7SLDHYDEDX4BCQ4KDRYKIGV5Y477X3ZABQC
S7RXJJZG4IEIVLPHEWFT5M2T3SRRO5US5SYBPXSYSWJJLXAKNNPAC
E7UO6NRGXFDMBU3BSJYRDNOA3Y7VHD7NWPHI5PHCPHQF6ZNOPZLQC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
D425ND7AT3F7QJ3CCSESMVDOC3J5C5P32M5SJDBHECZJXLHNQ2FAC
J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC
JLUWRE5FNOBBXIPF2HQELX2JGECPHXFVSUCNSU27O2335NGJ7KMAC
7JQD43QS55Q2YI6OQ6BGVAHSHKQHI3TKD6PXIKYKJZXOVOWFHMWAC
ZOOCZQBGZ4PCOU54EPPUPWNOIFWCM5RMZ4EFL2WFR7LFJTAMHZGAC
6LVZRZGDURMWBUBXHFGV4HGB7L5M2FKCYGJCAU3X2PK74VJQ6RCAC
TZP6PT5SUMQJO4YUGALUU3R4RYQREDLZXWAOKD6N3QDROICWHRBAC
2ZRKX4A24W4WNSLJNPKP3FWB3Y3UCYLWWESTC65P45BQFSJKS4PQC
O5JVMDEEKP334BAYMJ6HHXROW4X4WC24JHCYZTKJRQE5UGYXV7YQC
7XCGFU3GX4TQXZBOU7GFAQ62EEOTVRNWFYQGI3XULFPSUKDZ2EYAC
RDEYLQVXEGPQXXDILJAIJ67TYZ2YHUO5WRWQTEIOPMJGT7EAKASQC
FNGIZYDU5274CDE27IONZBA4JMXI4SQXEDIVTMVESK7A44XIJ7FAC
6XZIQSMIVP2GZ5S3UCKEVNDSLTHSQEVSXLV4UIFF3G3SRCGJPXYAC
Y2BB47FLZ2TQKPOULIZCKQKCCX75DT7HEPPEJOURE26OD6VD6ZUAC
keyboard->modifiers.notify = keypressmod;
wl_signal_add(&device->keyboard->events.modifiers, &keyboard->modifiers);
keyboard->key.notify = keypress;
wl_signal_add(&device->keyboard->events.key, &keyboard->key);
kb->modifiers.notify = keypressmod;
wl_signal_add(&device->keyboard->events.modifiers, &kb->modifiers);
kb->key.notify = keypress;
wl_signal_add(&device->keyboard->events.key, &kb->key);
uint32_t mods = wlr_keyboard_get_modifiers(keyboard->device->keyboard);
if (event->state == WLR_KEY_PRESSED) {
/* On _press_, attempt to process a compositor keybinding. */
for (int i = 0; i < nsyms; i++) {
uint32_t mods = wlr_keyboard_get_modifiers(kb->device->keyboard);
/* On _press_, attempt to process a compositor keybinding. */
if (event->state == WLR_KEY_PRESSED)
for (int i = 0; i < nsyms; i++)
if (!c) {
/* If there's no client under the cursor, set the cursor image to a
* default. This is what makes the cursor image appear when you move it
* around the screen, not over any clients. */
/* If there's no client under the cursor, set the cursor image to a
* default. This is what makes the cursor image appear when you move it
* around the screen, not over any clients. */
if (!c)
Client *c = xytoclient(cursor->x, cursor->y,
&surface, &sx, &sy);
if (!c) {
Client *c = xytoclient(cursor->x, cursor->y, &surface, &sx, &sy);
if (!c)
Client *c = xytoclient(cursor->x, cursor->y,
&surface, &sx, &sy);
if (!c) {
Client *c = xytoclient(cursor->x, cursor->y, &surface, &sx, &sy);
if (!c)
* actually has pointer focus first. */
if (focused_client == event->seat_client) {
/* Once we've vetted the client, we can tell the cursor to use the
* provided surface as the cursor image. It will set the hardware cursor
* on the output that it's currently on and continue to do so as the
* cursor moves between outputs. */
* actually has pointer focus first. If so, we can tell the cursor to
* use the provided surface as the cursor image. It will set the
* hardware cursor on the output that it's currently on and continue to
* do so as the cursor moves between outputs. */
if (event->seat_client == seat->pointer_state.focused_client)