gimp but for windows: a wayland compositor
git clone https://github.com/m-col/wimp
Files | Refs | Readme

Commit febede681273cb27d570ce228d4dcda26f44b2d8
Parent: 5115ea02d3142ecb53cee64b436944858ec2f129
Author: mcol <mcol@posteo.net>
Date: 2021-01-30 12:11:50 +0000
Committer: mcol <mcol@posteo.net>
Committed: 2021-01-30 12:11:50 +0000

set up passthrough pointer gestures

src/types.h Modified

@@ -70,6 +70,13 @@
     struct wl_listener cursor_button_listener;
     struct wl_listener cursor_axis_listener;
     struct wl_listener cursor_frame_listener;
+    struct wlr_pointer_gestures_v1 *pointer_gestures;
+    struct wl_listener pinch_begin_listener;
+    struct wl_listener pinch_update_listener;
+    struct wl_listener pinch_end_listener;
+    struct wl_listener swipe_begin_listener;
+    struct wl_listener swipe_update_listener;
+    struct wl_listener swipe_end_listener;
 
     struct wlr_seat *seat;
     struct wl_listener new_input_listener;

src/cursor.c Modified

@@ -2,6 +2,7 @@
 #include <linux/input-event-codes.h>
 #include <unistd.h>
 #include <wlr/types/wlr_cursor.h>
+#include <wlr/types/wlr_pointer_gestures_v1.h>
 #include <wlr/types/wlr_xcursor_manager.h>
 
 #include "action.h"
@@ -216,25 +217,84 @@
 }
 
 
+static void on_pinch_end(struct wl_listener *listener, void *data) {
+    struct wlr_event_pointer_pinch_end *event = data;
+    wlr_pointer_gestures_v1_send_pinch_end(
+	wimp.pointer_gestures, wimp.seat, event->time_msec, event->cancelled
+    );
+}
+
+
+static void on_pinch_update(struct wl_listener *listener, void *data) {
+    struct wlr_event_pointer_pinch_update *event = data;
+    wlr_pointer_gestures_v1_send_pinch_update(
+	wimp.pointer_gestures, wimp.seat, event->time_msec,
+	event->dx, event->dy, event->scale, event->rotation
+    );
+}
+
+
+static void on_pinch_begin(struct wl_listener *listener, void *data) {
+    struct wlr_event_pointer_pinch_begin *event = data;
+    wlr_pointer_gestures_v1_send_pinch_begin(
+	wimp.pointer_gestures, wimp.seat, event->time_msec, event->fingers
+    );
+
+}
+
+
+static void on_swipe_end(struct wl_listener *listener, void *data) {
+    struct wlr_event_pointer_swipe_end *event = data;
+    wlr_pointer_gestures_v1_send_swipe_end(
+	wimp.pointer_gestures, wimp.seat, event->time_msec, event->cancelled
+    );
+}
+
+
+static void on_swipe_update(struct wl_listener *listener, void *data) {
+    struct wlr_event_pointer_swipe_update *event = data;
+    wlr_pointer_gestures_v1_send_swipe_update(
+	wimp.pointer_gestures, wimp.seat, event->time_msec, event->dx, event->dy
+    );
+}
+
+
+static void on_swipe_begin(struct wl_listener *listener, void *data) {
+    struct wlr_event_pointer_swipe_begin *event = data;
+    wlr_pointer_gestures_v1_send_swipe_begin(
+	wimp.pointer_gestures, wimp.seat, event->time_msec, event->fingers
+    );
+}
+
+
 void set_up_cursor() {
     wimp.cursor = wlr_cursor_create();
     wlr_cursor_attach_output_layout(wimp.cursor, wimp.output_layout);
     wimp.cursor_manager = wlr_xcursor_manager_create(NULL, 24);
     wlr_xcursor_manager_load(wimp.cursor_manager, 1);
 
+    wimp.cursor_axis_listener.notify = on_cursor_axis;
+    wimp.cursor_frame_listener.notify = on_cursor_frame;
+    wimp.cursor_button_listener.notify = on_cursor_button;
     wimp.cursor_motion_listener.notify = on_cursor_motion;
-    wl_signal_add(&wimp.cursor->events.motion, &wimp.cursor_motion_listener);
-
     wimp.cursor_motion_absolute_listener.notify = on_cursor_motion_absolute;
-    wl_signal_add(&wimp.cursor->events.motion_absolute,
-	&wimp.cursor_motion_absolute_listener);
-
-    wimp.cursor_button_listener.notify = on_cursor_button;
-    wl_signal_add(&wimp.cursor->events.button, &wimp.cursor_button_listener);
-
-    wimp.cursor_axis_listener.notify = on_cursor_axis;
     wl_signal_add(&wimp.cursor->events.axis, &wimp.cursor_axis_listener);
-
-    wimp.cursor_frame_listener.notify = on_cursor_frame;
     wl_signal_add(&wimp.cursor->events.frame, &wimp.cursor_frame_listener);
+    wl_signal_add(&wimp.cursor->events.button, &wimp.cursor_button_listener);
+    wl_signal_add(&wimp.cursor->events.motion, &wimp.cursor_motion_listener);
+    wl_signal_add(&wimp.cursor->events.motion_absolute, &wimp.cursor_motion_absolute_listener);
+
+    wimp.pointer_gestures = wlr_pointer_gestures_v1_create(wimp.display);
+    wimp.pinch_end_listener.notify = on_pinch_end;
+    wimp.pinch_begin_listener.notify = on_pinch_begin;
+    wimp.pinch_update_listener.notify = on_pinch_update;
+    wl_signal_add(&wimp.cursor->events.pinch_end, &wimp.pinch_end_listener);
+    wl_signal_add(&wimp.cursor->events.pinch_begin, &wimp.pinch_begin_listener);
+    wl_signal_add(&wimp.cursor->events.pinch_update, &wimp.pinch_update_listener);
+    wimp.swipe_end_listener.notify = on_swipe_end;
+    wimp.swipe_begin_listener.notify = on_swipe_begin;
+    wimp.swipe_update_listener.notify = on_swipe_update;
+    wl_signal_add(&wimp.cursor->events.swipe_end, &wimp.swipe_end_listener);
+    wl_signal_add(&wimp.cursor->events.swipe_begin, &wimp.swipe_begin_listener);
+    wl_signal_add(&wimp.cursor->events.swipe_update, &wimp.swipe_update_listener);
 }