summaryrefslogtreecommitdiff
path: root/src/devices/VirtualKeyboard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/VirtualKeyboard.cpp')
-rw-r--r--src/devices/VirtualKeyboard.cpp67
1 files changed, 23 insertions, 44 deletions
diff --git a/src/devices/VirtualKeyboard.cpp b/src/devices/VirtualKeyboard.cpp
index e2be0078..654ca9f5 100644
--- a/src/devices/VirtualKeyboard.cpp
+++ b/src/devices/VirtualKeyboard.cpp
@@ -14,58 +14,37 @@ CVirtualKeyboard::CVirtualKeyboard(SP<CVirtualKeyboardV1Resource> keeb_) : keybo
if (!keeb_)
return;
- auto keeb = keeb_->wlr();
-
- // clang-format off
- hyprListener_destroy.initCallback(&keeb->base.events.destroy, [this] (void* owner, void* data) {
- disconnectCallbacks();
+ listeners.destroy = keeb_->events.destroy.registerListener([this](std::any d) {
keyboard.reset();
- events.destroy.emit();
- }, this, "CVirtualKeyboard");
-
- hyprListener_key.initCallback(&keeb->events.key, [this] (void* owner, void* data) {
- auto E = (wlr_keyboard_key_event*)data;
-
- keyboardEvents.key.emit(SKeyEvent{
- .timeMs = E->time_msec,
- .keycode = E->keycode,
- .updateMods = E->update_state,
- .state = E->state,
+ events.destroy.emit();
+ });
+
+ listeners.key = keeb_->events.key.registerListener([this](std::any d) { keyboardEvents.key.emit(d); });
+ listeners.modifiers = keeb_->events.modifiers.registerListener([this](std::any d) {
+ auto E = std::any_cast<SModifiersEvent>(d);
+ updateModifiers(E.depressed, E.latched, E.locked, E.group);
+ keyboardEvents.modifiers.emit(SModifiersEvent{
+ .depressed = modifiersState.depressed,
+ .latched = modifiersState.latched,
+ .locked = modifiersState.locked,
+ .group = modifiersState.group,
});
- }, this, "CVirtualKeyboard");
-
- hyprListener_keymap.initCallback(&keeb->events.keymap, [this] (void* owner, void* data) {
- keyboardEvents.keymap.emit();
- }, this, "CVirtualKeyboard");
-
- hyprListener_modifiers.initCallback(&keeb->events.modifiers, [this] (void* owner, void* data) {
- keyboardEvents.modifiers.emit();
- }, this, "CVirtualKeyboard");
-
- hyprListener_repeatInfo.initCallback(&keeb->events.repeat_info, [this] (void* owner, void* data) {
- keyboardEvents.repeatInfo.emit();
- }, this, "CVirtualKeyboard");
- // clang-format on
-
- deviceName = keeb->base.name ? keeb->base.name : "UNKNOWN";
+ });
+ listeners.keymap = keeb_->events.keymap.registerListener([this](std::any d) {
+ auto E = std::any_cast<SKeymapEvent>(d);
+ xkbKeymap = xkb_keymap_ref(E.keymap);
+ keyboardEvents.keymap.emit(d);
+ });
+
+ deviceName = keeb_->name;
}
bool CVirtualKeyboard::isVirtual() {
return true;
}
-wlr_keyboard* CVirtualKeyboard::wlr() {
- if (keyboard.expired())
- return nullptr;
- return keyboard->wlr();
-}
-
-void CVirtualKeyboard::disconnectCallbacks() {
- hyprListener_destroy.removeCallback();
- hyprListener_key.removeCallback();
- hyprListener_keymap.removeCallback();
- hyprListener_repeatInfo.removeCallback();
- hyprListener_modifiers.removeCallback();
+SP<Aquamarine::IKeyboard> CVirtualKeyboard::aq() {
+ return nullptr;
}
wl_client* CVirtualKeyboard::getClient() {