diff --git a/less-simple-touch-input/less-simple-touch-input.patch b/less-simple-touch-input/less-simple-touch-input.patch index 1915ca7..ce63bbe 100644 --- a/less-simple-touch-input/less-simple-touch-input.patch +++ b/less-simple-touch-input/less-simple-touch-input.patch @@ -1,18 +1,23 @@ -From 81810896c3034d609ed1bf93e1e04641f9ddf818 Mon Sep 17 00:00:00 2001 +From adc8734017644f44443db30e976cf03147c7c3c4 Mon Sep 17 00:00:00 2001 From: Micah N Gorrell Date: Fri, 9 Feb 2024 17:08:20 -0700 Subject: [PATCH] Add support for touch screen input devices, and send the appropriate events to clients +Send notification of touch motition events even if there is no client to focus. This is important for swiping on an OSK. + +Add support for touch screen input devices, and send the appropriate events to clients + +Removed #ifdef around code that needs pointer constraints now that that is merged to upstream --- - dwl.c | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 149 insertions(+) + dwl.c | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 145 insertions(+) diff --git a/dwl.c b/dwl.c -index fa76db2..6bff6cd 100644 +index 5867b0c..fe447fb 100644 --- a/dwl.c +++ b/dwl.c -@@ -45,6 +45,7 @@ +@@ -47,6 +47,7 @@ #include #include #include @@ -20,7 +25,7 @@ index fa76db2..6bff6cd 100644 #include #include #include -@@ -158,6 +159,12 @@ typedef struct { +@@ -161,6 +162,12 @@ typedef struct { struct wl_listener key; } KeyboardGroup; @@ -33,15 +38,17 @@ index fa76db2..6bff6cd 100644 typedef struct { /* Must keep these three elements in this order */ unsigned int type; /* LayerShell */ -@@ -255,6 +262,7 @@ static void createlocksurface(struct wl_listener *listener, void *data); - static void createmon(struct wl_listener *listener, void *data); +@@ -264,7 +271,9 @@ static void createmon(struct wl_listener *listener, void *data); static void createnotify(struct wl_listener *listener, void *data); static void createpointer(struct wlr_pointer *pointer); + static void createpointerconstraint(struct wl_listener *listener, void *data); ++static void createtouch(struct wlr_touch *touch); + static void cursorconstrain(struct wlr_pointer_constraint_v1 *constraint); +static void createtouch(struct wlr_touch *touch); static void cursorframe(struct wl_listener *listener, void *data); + static void cursorwarptohint(void); static void destroydecoration(struct wl_listener *listener, void *data); - static void destroydragicon(struct wl_listener *listener, void *data); -@@ -321,6 +329,10 @@ static void togglefloating(const Arg *arg); +@@ -334,6 +343,10 @@ static void togglefloating(const Arg *arg); static void togglefullscreen(const Arg *arg); static void toggletag(const Arg *arg); static void toggleview(const Arg *arg); @@ -52,7 +59,7 @@ index fa76db2..6bff6cd 100644 static void unlocksession(struct wl_listener *listener, void *data); static void unmaplayersurfacenotify(struct wl_listener *listener, void *data); static void unmapnotify(struct wl_listener *listener, void *data); -@@ -387,6 +399,7 @@ static struct wlr_output_layout *output_layout; +@@ -404,6 +417,7 @@ static struct wlr_output_layout *output_layout; static struct wlr_box sgeom; static struct wl_list mons; static Monitor *selmon; @@ -60,8 +67,8 @@ index fa76db2..6bff6cd 100644 #ifdef XWAYLAND static void activatex11(struct wl_listener *listener, void *data); -@@ -1015,6 +1028,16 @@ createpointer(struct wlr_pointer *pointer) - wlr_cursor_attach_input_device(cursor, &pointer->base); +@@ -1041,6 +1055,16 @@ createpointerconstraint(struct wl_listener *listener, void *data) + &pointer_constraint->destroy, destroypointerconstraint); } +void @@ -75,9 +82,9 @@ index fa76db2..6bff6cd 100644 +} + void - cursorframe(struct wl_listener *listener, void *data) + cursorconstrain(struct wlr_pointer_constraint_v1 *constraint) { -@@ -1344,6 +1367,9 @@ inputdevice(struct wl_listener *listener, void *data) +@@ -1412,6 +1436,9 @@ inputdevice(struct wl_listener *listener, void *data) case WLR_INPUT_DEVICE_POINTER: createpointer(wlr_pointer_from_input_device(device)); break; @@ -87,7 +94,7 @@ index fa76db2..6bff6cd 100644 default: /* TODO handle other input device types */ break; -@@ -1356,6 +1382,8 @@ inputdevice(struct wl_listener *listener, void *data) +@@ -1424,6 +1451,8 @@ inputdevice(struct wl_listener *listener, void *data) caps = WL_SEAT_CAPABILITY_POINTER; if (!wl_list_empty(&kb_group.wlr_group->devices)) caps |= WL_SEAT_CAPABILITY_KEYBOARD; @@ -96,7 +103,7 @@ index fa76db2..6bff6cd 100644 wlr_seat_set_capabilities(seat, caps); } -@@ -2325,6 +2353,13 @@ setup(void) +@@ -2431,6 +2460,13 @@ setup(void) LISTEN_STATIC(&cursor->events.axis, axisnotify); LISTEN_STATIC(&cursor->events.frame, cursorframe); @@ -110,7 +117,7 @@ index fa76db2..6bff6cd 100644 cursor_shape_mgr = wlr_cursor_shape_manager_v1_create(dpy, 1); LISTEN_STATIC(&cursor_shape_mgr->events.request_set_shape, setcursorshape); -@@ -2541,6 +2576,120 @@ toggleview(const Arg *arg) +@@ -2647,6 +2683,115 @@ toggleview(const Arg *arg) printstatus(); } @@ -153,19 +160,14 @@ index fa76db2..6bff6cd 100644 + if (serial && wlr_seat_touch_num_points(seat) == 1) { + /* Emulate a mouse click if the touch event wasn't handled */ + struct wlr_pointer_button_event *button_event = data; ++ struct wlr_pointer_motion_absolute_event *motion_event = data; ++ double dx, dy; + -+#ifdef POINTERCONSTRAINTS -+ struct wlr_pointer_motion_absolute_event *event = data; -+ double lx, ly, dx, dy; -+ -+ wlr_cursor_absolute_to_layout_coords(cursor, &event->pointer->base, event->x, event->y, &lx, &ly); -+ wlr_cursor_warp_closest(cursor, &event->pointer->base, lx, ly); ++ wlr_cursor_absolute_to_layout_coords(cursor, &motion_event->pointer->base, motion_event->x, motion_event->y, &lx, &ly); ++ wlr_cursor_warp_closest(cursor, &motion_event->pointer->base, lx, ly); + dx = lx - cursor->x; + dy = ly - cursor->y; -+ motionnotify(event->time_msec, &event->pointer->base, dx, dy, dx, dy); -+#else -+ motionabsolute(listener, data); -+#endif ++ motionnotify(motion_event->time_msec, &motion_event->pointer->base, dx, dy, dx, dy); + + button_event->button = BTN_LEFT; + button_event->state = WLR_BUTTON_PRESSED; @@ -219,10 +221,10 @@ index fa76db2..6bff6cd 100644 + + if (c != NULL) { + wlr_seat_touch_point_focus(seat, surface, event->time_msec, event->touch_id, sx, sy); -+ wlr_seat_touch_notify_motion(seat, event->time_msec, event->touch_id, sx, sy); + } else { + wlr_seat_touch_point_clear_focus(seat, event->time_msec, event->touch_id); + } ++ wlr_seat_touch_notify_motion(seat, event->time_msec, event->touch_id, sx, sy); + + wlr_idle_notifier_v1_notify_activity(idle_notifier, seat); +} @@ -232,5 +234,5 @@ index fa76db2..6bff6cd 100644 unlocksession(struct wl_listener *listener, void *data) { -- -2.43.0 +2.44.0