mirror of
https://gitea.nishi.boats/pyrite-dev/milsko
synced 2025-12-31 06:30:52 +00:00
wayland: key modifiers
This commit is contained in:
@@ -94,7 +94,7 @@ struct _MwLLWayland {
|
|||||||
|
|
||||||
MwBool active; /* Whether or not the surface is the one being hovered over. */
|
MwBool active; /* Whether or not the surface is the one being hovered over. */
|
||||||
|
|
||||||
/*struct wl_event_queue* event_queue;*/
|
MwU32 mod_state;
|
||||||
|
|
||||||
MwLL* sublevels; /* stb_ds managed array of any sublevels */
|
MwLL* sublevels; /* stb_ds managed array of any sublevels */
|
||||||
MwBool configured; /* Whether or not xdg_toplevel_configure has run once */
|
MwBool configured; /* Whether or not xdg_toplevel_configure has run once */
|
||||||
|
|||||||
@@ -118,28 +118,6 @@ struct wl_pointer_listener pointer_listener = {
|
|||||||
.axis = pointer_axis,
|
.axis = pointer_axis,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Recursively dispatch the key event to `handle` and its children */
|
|
||||||
static void recursive_key(MwLL handle, void* ud) {
|
|
||||||
int i;
|
|
||||||
if(handle->wayland.sublevels != NULL) {
|
|
||||||
for(i = 0; i < arrlen(handle->wayland.sublevels); i++) {
|
|
||||||
MwLLDispatch(handle->wayland.sublevels[i], key, ud);
|
|
||||||
recursive_key(handle->wayland.sublevels[i], ud);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Recursively dispatch the key_released event to `handle` and its children */
|
|
||||||
static void recursive_key_released(MwLL handle, void* ud) {
|
|
||||||
int i;
|
|
||||||
if(handle->wayland.sublevels != NULL) {
|
|
||||||
for(i = 0; i < arrlen(handle->wayland.sublevels); i++) {
|
|
||||||
MwLLDispatch(handle->wayland.sublevels[i], key_released, ud);
|
|
||||||
recursive_key(handle->wayland.sublevels[i], ud);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* `wl_keyboard.keymap` callback */
|
/* `wl_keyboard.keymap` callback */
|
||||||
static void keyboard_keymap(void* data,
|
static void keyboard_keymap(void* data,
|
||||||
struct wl_keyboard* wl_keyboard,
|
struct wl_keyboard* wl_keyboard,
|
||||||
@@ -259,12 +237,16 @@ static void keyboard_key(void* data,
|
|||||||
default:
|
default:
|
||||||
key = sym;
|
key = sym;
|
||||||
}
|
}
|
||||||
|
if((self->wayland.mod_state & 4) == 4) {
|
||||||
|
key |= MwLLControlMask;
|
||||||
|
}
|
||||||
|
if((self->wayland.mod_state & 8) == 8) {
|
||||||
|
key |= MwLLAltMask;
|
||||||
|
}
|
||||||
if(state == WL_KEYBOARD_KEY_STATE_PRESSED) {
|
if(state == WL_KEYBOARD_KEY_STATE_PRESSED) {
|
||||||
MwLLDispatch(self, key, &key);
|
MwLLDispatch(self, key, &key);
|
||||||
recursive_key(self, &key);
|
|
||||||
} else {
|
} else {
|
||||||
MwLLDispatch(self, key_released, &key);
|
MwLLDispatch(self, key_released, &key);
|
||||||
recursive_key_released(self, &key);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -277,7 +259,13 @@ static void keyboard_modifiers(void* data,
|
|||||||
MwU32 mods_depressed,
|
MwU32 mods_depressed,
|
||||||
MwU32 mods_latched,
|
MwU32 mods_latched,
|
||||||
MwU32 mods_locked,
|
MwU32 mods_locked,
|
||||||
MwU32 group) {};
|
MwU32 group) {
|
||||||
|
MwLL self = data;
|
||||||
|
|
||||||
|
self->wayland.mod_state = 0;
|
||||||
|
self->wayland.mod_state |= mods_depressed;
|
||||||
|
self->wayland.mod_state |= mods_locked;
|
||||||
|
};
|
||||||
|
|
||||||
struct wl_keyboard_listener keyboard_listener = {
|
struct wl_keyboard_listener keyboard_listener = {
|
||||||
.keymap = keyboard_keymap,
|
.keymap = keyboard_keymap,
|
||||||
|
|||||||
Reference in New Issue
Block a user