summaryrefslogtreecommitdiff
path: root/dwl.c
diff options
context:
space:
mode:
authorGuido Cella <guido@guidocella.xyz>2024-01-24 22:47:50 +0100
committerLeonardo Hernández Hernández <leohdz172@proton.me>2024-01-25 17:13:01 +0000
commitac6074f4fdb8cc263c877f08e16a5805d3bb22d2 (patch)
treec6580d3a9d7842b5ae77d1caba3c348c6a3be558 /dwl.c
parent433385f7f18abb607c4feff6d6c7fa817071a710 (diff)
implement the virtual pointer protocol
This is used by programs like warpd.
Diffstat (limited to 'dwl.c')
-rw-r--r--dwl.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/dwl.c b/dwl.c
index 239f7d7..76ed8aa 100644
--- a/dwl.c
+++ b/dwl.c
@@ -47,6 +47,7 @@
#include <wlr/types/wlr_subcompositor.h>
#include <wlr/types/wlr_viewporter.h>
#include <wlr/types/wlr_virtual_keyboard_v1.h>
+#include <wlr/types/wlr_virtual_pointer_v1.h>
#include <wlr/types/wlr_xcursor_manager.h>
#include <wlr/types/wlr_xdg_activation_v1.h>
#include <wlr/types/wlr_xdg_decoration_v1.h>
@@ -328,6 +329,7 @@ static void updatetitle(struct wl_listener *listener, void *data);
static void urgent(struct wl_listener *listener, void *data);
static void view(const Arg *arg);
static void virtualkeyboard(struct wl_listener *listener, void *data);
+static void virtualpointer(struct wl_listener *listener, void *data);
static Monitor *xytomon(double x, double y);
static void xytonode(double x, double y, struct wlr_surface **psurface,
Client **pc, LayerSurface **pl, double *nx, double *ny);
@@ -361,6 +363,7 @@ static struct wlr_layer_shell_v1 *layer_shell;
static struct wlr_output_manager_v1 *output_mgr;
static struct wlr_gamma_control_manager_v1 *gamma_control_mgr;
static struct wlr_virtual_keyboard_manager_v1 *virtual_keyboard_mgr;
+static struct wlr_virtual_pointer_manager_v1 *virtual_pointer_mgr;
static struct wlr_cursor_shape_manager_v1 *cursor_shape_mgr;
static struct wlr_cursor *cursor;
@@ -2330,6 +2333,9 @@ setup(void)
LISTEN_STATIC(&backend->events.new_input, inputdevice);
virtual_keyboard_mgr = wlr_virtual_keyboard_manager_v1_create(dpy);
LISTEN_STATIC(&virtual_keyboard_mgr->events.new_virtual_keyboard, virtualkeyboard);
+ virtual_pointer_mgr = wlr_virtual_pointer_manager_v1_create(dpy);
+ LISTEN_STATIC(&virtual_pointer_mgr->events.new_virtual_pointer, virtualpointer);
+
seat = wlr_seat_create(dpy, "seat0");
LISTEN_STATIC(&seat->events.request_set_cursor, setcursor);
LISTEN_STATIC(&seat->events.request_set_selection, setsel);
@@ -2731,6 +2737,17 @@ virtualkeyboard(struct wl_listener *listener, void *data)
wlr_keyboard_group_add_keyboard(vkb_group.wlr_group, &keyboard->keyboard);
}
+void
+virtualpointer(struct wl_listener *listener, void *data)
+{
+ struct wlr_virtual_pointer_v1_new_pointer_event *event = data;
+ struct wlr_pointer pointer = event->new_pointer->pointer;
+
+ wlr_cursor_attach_input_device(cursor, &pointer.base);
+ if (event->suggested_output)
+ wlr_cursor_map_input_to_output(cursor, &pointer.base, event->suggested_output);
+}
+
Monitor *
xytomon(double x, double y)
{