1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
From be7e98d28fc59aab67026e7d5efdcaeb26029713 Mon Sep 17 00:00:00 2001
From: wochap <gean.marroquin@gmail.com>
Date: Fri, 12 Jul 2024 11:30:17 -0500
Subject: [PATCH] implement pointer-gestures-unstable-v1
---
dwl.c | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 136 insertions(+)
diff --git a/dwl.c b/dwl.c
index dc0437e..e5805b1 100644
--- a/dwl.c
+++ b/dwl.c
@@ -38,6 +38,7 @@
#include <wlr/types/wlr_output_power_management_v1.h>
#include <wlr/types/wlr_pointer.h>
#include <wlr/types/wlr_pointer_constraints_v1.h>
+#include <wlr/types/wlr_pointer_gestures_v1.h>
#include <wlr/types/wlr_presentation_time.h>
#include <wlr/types/wlr_primary_selection.h>
#include <wlr/types/wlr_primary_selection_v1.h>
@@ -250,6 +251,14 @@ static void arrangelayer(Monitor *m, struct wl_list *list,
static void arrangelayers(Monitor *m);
static void axisnotify(struct wl_listener *listener, void *data);
static void buttonpress(struct wl_listener *listener, void *data);
+static void swipe_begin(struct wl_listener *listener, void *data);
+static void swipe_update(struct wl_listener *listener, void *data);
+static void swipe_end(struct wl_listener *listener, void *data);
+static void pinch_begin(struct wl_listener *listener, void *data);
+static void pinch_update(struct wl_listener *listener, void *data);
+static void pinch_end(struct wl_listener *listener, void *data);
+static void hold_begin(struct wl_listener *listener, void *data);
+static void hold_end(struct wl_listener *listener, void *data);
static void chvt(const Arg *arg);
static void checkidleinhibitor(struct wlr_surface *exclude);
static void cleanup(void);
@@ -383,6 +392,7 @@ 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_output_power_manager_v1 *power_mgr;
+static struct wlr_pointer_gestures_v1 *pointer_gestures;
static struct wlr_pointer_constraints_v1 *pointer_constraints;
static struct wlr_relative_pointer_manager_v1 *relative_pointer_mgr;
@@ -644,6 +654,122 @@ buttonpress(struct wl_listener *listener, void *data)
event->time_msec, event->button, event->state);
}
+void
+swipe_begin(struct wl_listener *listener, void *data)
+{
+ struct wlr_pointer_swipe_begin_event *event = data;
+
+ // Forward swipe begin event to client
+ wlr_pointer_gestures_v1_send_swipe_begin(
+ pointer_gestures,
+ seat,
+ event->time_msec,
+ event->fingers
+ );
+}
+
+void
+swipe_update(struct wl_listener *listener, void *data)
+{
+ struct wlr_pointer_swipe_update_event *event = data;
+
+ // Forward swipe update event to client
+ wlr_pointer_gestures_v1_send_swipe_update(
+ pointer_gestures,
+ seat,
+ event->time_msec,
+ event->dx,
+ event->dy
+ );
+}
+
+void
+swipe_end(struct wl_listener *listener, void *data)
+{
+ struct wlr_pointer_swipe_end_event *event = data;
+
+ // Forward swipe end event to client
+ wlr_pointer_gestures_v1_send_swipe_end(
+ pointer_gestures,
+ seat,
+ event->time_msec,
+ event->cancelled
+ );
+}
+
+void
+pinch_begin(struct wl_listener *listener, void *data)
+{
+ struct wlr_pointer_pinch_begin_event *event = data;
+
+ // Forward pinch begin event to client
+ wlr_pointer_gestures_v1_send_pinch_begin(
+ pointer_gestures,
+ seat,
+ event->time_msec,
+ event->fingers
+ );
+}
+
+void
+pinch_update(struct wl_listener *listener, void *data)
+{
+ struct wlr_pointer_pinch_update_event *event = data;
+
+ // Forward pinch update event to client
+ wlr_pointer_gestures_v1_send_pinch_update(
+ pointer_gestures,
+ seat,
+ event->time_msec,
+ event->dx,
+ event->dy,
+ event->scale,
+ event->rotation
+ );
+}
+
+void
+pinch_end(struct wl_listener *listener, void *data)
+{
+ struct wlr_pointer_pinch_end_event *event = data;
+
+ // Forward pinch end event to client
+ wlr_pointer_gestures_v1_send_pinch_end(
+ pointer_gestures,
+ seat,
+ event->time_msec,
+ event->cancelled
+ );
+}
+
+void
+hold_begin(struct wl_listener *listener, void *data)
+{
+ struct wlr_pointer_hold_begin_event *event = data;
+
+ // Forward hold begin event to client
+ wlr_pointer_gestures_v1_send_hold_begin(
+ pointer_gestures,
+ seat,
+ event->time_msec,
+ event->fingers
+ );
+}
+
+void
+hold_end(struct wl_listener *listener, void *data)
+{
+ struct wlr_pointer_hold_end_event *event = data;
+
+ // Forward hold end event to client
+ wlr_pointer_gestures_v1_send_hold_end(
+ pointer_gestures,
+ seat,
+ event->time_msec,
+ event->cancelled
+ );
+}
+
void
chvt(const Arg *arg)
{
@@ -2556,6 +2682,16 @@ setup(void)
virtual_pointer_mgr = wlr_virtual_pointer_manager_v1_create(dpy);
LISTEN_STATIC(&virtual_pointer_mgr->events.new_virtual_pointer, virtualpointer);
+ pointer_gestures = wlr_pointer_gestures_v1_create(dpy);
+ LISTEN_STATIC(&cursor->events.swipe_begin, swipe_begin);
+ LISTEN_STATIC(&cursor->events.swipe_update, swipe_update);
+ LISTEN_STATIC(&cursor->events.swipe_end, swipe_end);
+ LISTEN_STATIC(&cursor->events.pinch_begin, pinch_begin);
+ LISTEN_STATIC(&cursor->events.pinch_update, pinch_update);
+ LISTEN_STATIC(&cursor->events.pinch_end, pinch_end);
+ LISTEN_STATIC(&cursor->events.hold_begin, hold_begin);
+ LISTEN_STATIC(&cursor->events.hold_end, hold_end);
+
seat = wlr_seat_create(dpy, "seat0");
LISTEN_STATIC(&seat->events.request_set_cursor, setcursor);
LISTEN_STATIC(&seat->events.request_set_selection, setsel);
--
2.45.1
|