summaryrefslogtreecommitdiff
path: root/src/devices/VirtualPointer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/VirtualPointer.cpp')
-rw-r--r--src/devices/VirtualPointer.cpp176
1 files changed, 22 insertions, 154 deletions
diff --git a/src/devices/VirtualPointer.cpp b/src/devices/VirtualPointer.cpp
index c8ee3332..faca27dc 100644
--- a/src/devices/VirtualPointer.cpp
+++ b/src/devices/VirtualPointer.cpp
@@ -1,5 +1,6 @@
#include "VirtualPointer.hpp"
#include "../protocols/VirtualPointer.hpp"
+#include <aquamarine/input/Input.hpp>
SP<CVirtualPointer> CVirtualPointer::create(SP<CVirtualPointerV1Resource> resource) {
SP<CVirtualPointer> pPointer = SP<CVirtualPointer>(new CVirtualPointer(resource));
@@ -13,165 +14,32 @@ CVirtualPointer::CVirtualPointer(SP<CVirtualPointerV1Resource> resource) : point
if (!resource->good())
return;
- auto mouse = resource->wlr();
-
- // clang-format off
- hyprListener_destroy.initCallback(&mouse->base.events.destroy, [this] (void* owner, void* data) {
- disconnectCallbacks();
+ listeners.destroy = pointer->events.destroy.registerListener([this](std::any d) {
+ pointer.reset();
events.destroy.emit();
- }, this, "CVirtualPointer");
-
- hyprListener_motion.initCallback(&mouse->events.motion, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_motion_event*)data;
-
- pointerEvents.motion.emit(SMotionEvent{
- .timeMs = E->time_msec,
- .delta = {E->delta_x, E->delta_y},
- .unaccel = {E->unaccel_dx, E->unaccel_dy},
- });
- }, this, "CVirtualPointer");
-
- hyprListener_motionAbsolute.initCallback(&mouse->events.motion_absolute, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_motion_absolute_event*)data;
-
- pointerEvents.motionAbsolute.emit(SMotionAbsoluteEvent{
- .timeMs = E->time_msec,
- .absolute = {E->x, E->y},
- .device = self.lock(),
- });
- }, this, "CVirtualPointer");
-
- hyprListener_button.initCallback(&mouse->events.button, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_button_event*)data;
-
- pointerEvents.button.emit(SButtonEvent{
- .timeMs = E->time_msec,
- .button = E->button,
- .state = (wl_pointer_button_state)E->state,
- });
- }, this, "CVirtualPointer");
-
- hyprListener_axis.initCallback(&mouse->events.axis, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_axis_event*)data;
-
- pointerEvents.axis.emit(SAxisEvent{
- .timeMs = E->time_msec,
- .source = E->source,
- .axis = E->orientation,
- .relativeDirection = E->relative_direction,
- .delta = E->delta,
- .deltaDiscrete = E->delta_discrete,
- });
- }, this, "CVirtualPointer");
-
- hyprListener_frame.initCallback(&mouse->events.frame, [this] (void* owner, void* data) {
- pointerEvents.frame.emit();
- }, this, "CVirtualPointer");
-
- hyprListener_swipeBegin.initCallback(&mouse->events.swipe_begin, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_swipe_begin_event*)data;
-
- pointerEvents.swipeBegin.emit(SSwipeBeginEvent{
- .timeMs = E->time_msec,
- .fingers = E->fingers,
- });
- }, this, "CVirtualPointer");
-
- hyprListener_swipeEnd.initCallback(&mouse->events.swipe_end, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_swipe_end_event*)data;
-
- pointerEvents.swipeEnd.emit(SSwipeEndEvent{
- .timeMs = E->time_msec,
- .cancelled = E->cancelled,
- });
- }, this, "CVirtualPointer");
-
- hyprListener_swipeUpdate.initCallback(&mouse->events.swipe_update, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_swipe_update_event*)data;
-
- pointerEvents.swipeUpdate.emit(SSwipeUpdateEvent{
- .timeMs = E->time_msec,
- .fingers = E->fingers,
- .delta = {E->dx, E->dy},
- });
- }, this, "CVirtualPointer");
-
- hyprListener_pinchBegin.initCallback(&mouse->events.pinch_begin, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_pinch_begin_event*)data;
-
- pointerEvents.pinchBegin.emit(SPinchBeginEvent{
- .timeMs = E->time_msec,
- .fingers = E->fingers,
- });
- }, this, "CVirtualPointer");
-
- hyprListener_pinchEnd.initCallback(&mouse->events.pinch_end, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_pinch_end_event*)data;
-
- pointerEvents.pinchEnd.emit(SPinchEndEvent{
- .timeMs = E->time_msec,
- .cancelled = E->cancelled,
- });
- }, this, "CVirtualPointer");
-
- hyprListener_pinchUpdate.initCallback(&mouse->events.pinch_update, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_pinch_update_event*)data;
-
- pointerEvents.pinchUpdate.emit(SPinchUpdateEvent{
- .timeMs = E->time_msec,
- .fingers = E->fingers,
- .delta = {E->dx, E->dy},
- .scale = E->scale,
- .rotation = E->rotation,
- });
- }, this, "CVirtualPointer");
-
- hyprListener_holdBegin.initCallback(&mouse->events.hold_begin, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_hold_begin_event*)data;
-
- pointerEvents.holdBegin.emit(SHoldBeginEvent{
- .timeMs = E->time_msec,
- .fingers = E->fingers,
- });
- }, this, "CVirtualPointer");
-
- hyprListener_holdEnd.initCallback(&mouse->events.hold_end, [this] (void* owner, void* data) {
- auto E = (wlr_pointer_hold_end_event*)data;
-
- pointerEvents.holdEnd.emit(SHoldEndEvent{
- .timeMs = E->time_msec,
- .cancelled = E->cancelled,
- });
- }, this, "CVirtualPointer");
-
- // clang-format on
-
- deviceName = mouse->base.name ? mouse->base.name : "UNKNOWN";
+ });
+
+ listeners.motion = pointer->events.move.registerListener([this](std::any d) { pointerEvents.motion.emit(d); });
+ listeners.motionAbsolute = pointer->events.warp.registerListener([this](std::any d) { pointerEvents.motionAbsolute.emit(d); });
+ listeners.button = pointer->events.button.registerListener([this](std::any d) { pointerEvents.button.emit(d); });
+ listeners.axis = pointer->events.axis.registerListener([this](std::any d) { pointerEvents.axis.emit(d); });
+ listeners.frame = pointer->events.frame.registerListener([this](std::any d) { pointerEvents.frame.emit(); });
+ listeners.swipeBegin = pointer->events.swipeBegin.registerListener([this](std::any d) { pointerEvents.swipeBegin.emit(d); });
+ listeners.swipeEnd = pointer->events.swipeEnd.registerListener([this](std::any d) { pointerEvents.swipeEnd.emit(d); });
+ listeners.swipeUpdate = pointer->events.swipeUpdate.registerListener([this](std::any d) { pointerEvents.swipeUpdate.emit(d); });
+ listeners.pinchBegin = pointer->events.pinchBegin.registerListener([this](std::any d) { pointerEvents.pinchBegin.emit(d); });
+ listeners.pinchEnd = pointer->events.pinchEnd.registerListener([this](std::any d) { pointerEvents.pinchEnd.emit(d); });
+ listeners.pinchUpdate = pointer->events.pinchUpdate.registerListener([this](std::any d) { pointerEvents.pinchUpdate.emit(d); });
+ listeners.holdBegin = pointer->events.holdBegin.registerListener([this](std::any d) { pointerEvents.holdBegin.emit(d); });
+ listeners.holdEnd = pointer->events.holdEnd.registerListener([this](std::any d) { pointerEvents.holdEnd.emit(d); });
+
+ deviceName = pointer->name;
}
bool CVirtualPointer::isVirtual() {
return true;
}
-void CVirtualPointer::disconnectCallbacks() {
- hyprListener_destroy.removeCallback();
- hyprListener_motion.removeCallback();
- hyprListener_motionAbsolute.removeCallback();
- hyprListener_button.removeCallback();
- hyprListener_axis.removeCallback();
- hyprListener_frame.removeCallback();
- hyprListener_swipeBegin.removeCallback();
- hyprListener_swipeEnd.removeCallback();
- hyprListener_swipeUpdate.removeCallback();
- hyprListener_pinchBegin.removeCallback();
- hyprListener_pinchEnd.removeCallback();
- hyprListener_pinchUpdate.removeCallback();
- hyprListener_holdBegin.removeCallback();
- hyprListener_holdEnd.removeCallback();
-}
-
-wlr_pointer* CVirtualPointer::wlr() {
- if (pointer.expired())
- return nullptr;
- return pointer->wlr();
+SP<Aquamarine::IPointer> CVirtualPointer::aq() {
+ return nullptr;
}