tablet-input: Update patch and squash commits

This commit is contained in:
A Frederick Christensen 2025-01-01 16:51:07 -06:00
parent af2391cb80
commit b279ebde1c
No known key found for this signature in database
GPG Key ID: 6183FA655784FC36
2 changed files with 29 additions and 95 deletions

View File

@ -6,7 +6,7 @@ KNOWN BUGS:
### Download
- [git branch](https://codeberg.org/fauxmight/dwl/src/branch/touch-input)
- [2024-03-26](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/less-simple-touch-input/less-simple-touch-input.patch)
- [2025-01-01](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/less-simple-touch-input/less-simple-touch-input.patch)
### Authors
- [fauxmight](https://codeberg.org/fauxmight)

View File

@ -1,23 +1,18 @@
From adc8734017644f44443db30e976cf03147c7c3c4 Mon Sep 17 00:00:00 2001
From 0eda173488e6ef3b0c7744e8cef0b3e0dfc81605 Mon Sep 17 00:00:00 2001
From: Micah N Gorrell <m@minego.net>
Date: Fri, 9 Feb 2024 17:08:20 -0700
Subject: [PATCH 1/3] Add support for touch screen input devices, and send the
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 | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 145 insertions(+)
dwl.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 150 insertions(+)
diff --git a/dwl.c b/dwl.c
index 5867b0c..fe447fb 100644
index 0eba3e9..c9eb7fb 100644
--- a/dwl.c
+++ b/dwl.c
@@ -47,6 +47,7 @@
@@ -51,6 +51,7 @@
#include <wlr/types/wlr_session_lock_v1.h>
#include <wlr/types/wlr_single_pixel_buffer_v1.h>
#include <wlr/types/wlr_subcompositor.h>
@ -25,8 +20,8 @@ index 5867b0c..fe447fb 100644
#include <wlr/types/wlr_viewporter.h>
#include <wlr/types/wlr_virtual_keyboard_v1.h>
#include <wlr/types/wlr_virtual_pointer_v1.h>
@@ -161,6 +162,12 @@ typedef struct {
struct wl_listener key;
@@ -165,6 +166,12 @@ typedef struct {
struct wl_listener destroy;
} KeyboardGroup;
+typedef struct TouchGroup {
@ -36,19 +31,19 @@ index 5867b0c..fe447fb 100644
+} TouchGroup;
+
typedef struct {
/* Must keep these three elements in this order */
/* Must keep this field first */
unsigned int type; /* LayerShell */
@@ -264,7 +271,9 @@ static void createmon(struct wl_listener *listener, void *data);
static void createnotify(struct wl_listener *listener, void *data);
@@ -271,7 +278,9 @@ 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 createpopup(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);
@@ -334,6 +343,10 @@ static void togglefloating(const Arg *arg);
@@ -342,6 +351,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);
@ -59,7 +54,7 @@ index 5867b0c..fe447fb 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);
@@ -404,6 +417,7 @@ static struct wlr_output_layout *output_layout;
@@ -410,6 +423,7 @@ static struct wlr_output_layout *output_layout;
static struct wlr_box sgeom;
static struct wl_list mons;
static Monitor *selmon;
@ -67,8 +62,8 @@ index 5867b0c..fe447fb 100644
#ifdef XWAYLAND
static void activatex11(struct wl_listener *listener, void *data);
@@ -1041,6 +1055,16 @@ createpointerconstraint(struct wl_listener *listener, void *data)
&pointer_constraint->destroy, destroypointerconstraint);
@@ -1129,6 +1143,16 @@ createpopup(struct wl_listener *listener, void *data)
LISTEN_STATIC(&popup->base->surface->events.commit, commitpopup);
}
+void
@ -84,7 +79,7 @@ index 5867b0c..fe447fb 100644
void
cursorconstrain(struct wlr_pointer_constraint_v1 *constraint)
{
@@ -1412,6 +1436,9 @@ inputdevice(struct wl_listener *listener, void *data)
@@ -1534,6 +1558,9 @@ inputdevice(struct wl_listener *listener, void *data)
case WLR_INPUT_DEVICE_POINTER:
createpointer(wlr_pointer_from_input_device(device));
break;
@ -94,16 +89,16 @@ index 5867b0c..fe447fb 100644
default:
/* TODO handle other input device types */
break;
@@ -1424,6 +1451,8 @@ inputdevice(struct wl_listener *listener, void *data)
@@ -1546,6 +1573,8 @@ inputdevice(struct wl_listener *listener, void *data)
caps = WL_SEAT_CAPABILITY_POINTER;
if (!wl_list_empty(&kb_group.wlr_group->devices))
if (!wl_list_empty(&kb_group->wlr_group->devices))
caps |= WL_SEAT_CAPABILITY_KEYBOARD;
+ if (!wl_list_empty(&touches))
+ caps |= WL_SEAT_CAPABILITY_TOUCH;
wlr_seat_set_capabilities(seat, caps);
}
@@ -2431,6 +2460,13 @@ setup(void)
@@ -2557,6 +2586,13 @@ setup(void)
LISTEN_STATIC(&cursor->events.axis, axisnotify);
LISTEN_STATIC(&cursor->events.frame, cursorframe);
@ -117,7 +112,7 @@ index 5867b0c..fe447fb 100644
cursor_shape_mgr = wlr_cursor_shape_manager_v1_create(dpy, 1);
LISTEN_STATIC(&cursor_shape_mgr->events.request_set_shape, setcursorshape);
@@ -2647,6 +2683,115 @@ toggleview(const Arg *arg)
@@ -2727,6 +2763,120 @@ toggleview(const Arg *arg)
printstatus();
}
@ -151,7 +146,8 @@ index 5867b0c..fe447fb 100644
+
+ /* Find the client under the pointer and send the event along. */
+ xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
+ // fprintf(stderr, "touch_down at %lf, %lf\n", lx, ly);
+ if (sloppyfocus)
+ focusclient(c, 0);
+
+ if (surface != NULL) {
+ serial = wlr_seat_touch_notify_down(seat, surface, event->time_msec, event->touch_id, sx, sy);
@ -219,9 +215,13 @@ index 5867b0c..fe447fb 100644
+ wlr_cursor_absolute_to_layout_coords(cursor, &event->touch->base, event->x, event->y, &lx, &ly);
+ xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
+
+ if (c != NULL) {
+ if (c != NULL && surface != NULL) {
+ if (sloppyfocus)
+ focusclient(c, 0);
+ wlr_seat_touch_point_focus(seat, surface, event->time_msec, event->touch_id, sx, sy);
+ } else {
+ if (sloppyfocus)
+ focusclient(NULL, 0);
+ 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);
@ -234,71 +234,5 @@ index 5867b0c..fe447fb 100644
unlocksession(struct wl_listener *listener, void *data)
{
--
2.44.0
From c2e4ff7253f33c80552abe9126e3c57d0aa23560 Mon Sep 17 00:00:00 2001
From: Micah N Gorrell <m@minego.net>
Date: Thu, 28 Mar 2024 11:25:59 -0600
Subject: [PATCH 2/3] Removed debug
---
dwl.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/dwl.c b/dwl.c
index fe447fb..c26c581 100644
--- a/dwl.c
+++ b/dwl.c
@@ -2713,7 +2713,6 @@ touchdown(struct wl_listener *listener, void *data)
/* Find the client under the pointer and send the event along. */
xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
- // fprintf(stderr, "touch_down at %lf, %lf\n", lx, ly);
if (surface != NULL) {
serial = wlr_seat_touch_notify_down(seat, surface, event->time_msec, event->touch_id, sx, sy);
--
2.44.0
From ae64e0c3b51c8600de7c081034ea267c08134635 Mon Sep 17 00:00:00 2001
From: anabasis <anabasis@noreply.codeberg.org>
Date: Sat, 11 May 2024 20:19:18 -0400
Subject: [PATCH 3/3] fix bug and focus client according to sloppyfocus
---
dwl.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/dwl.c b/dwl.c
index c26c581..75b44d7 100644
--- a/dwl.c
+++ b/dwl.c
@@ -2713,6 +2713,8 @@ touchdown(struct wl_listener *listener, void *data)
/* Find the client under the pointer and send the event along. */
xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
+ if (sloppyfocus)
+ focusclient(c, 0);
if (surface != NULL) {
serial = wlr_seat_touch_notify_down(seat, surface, event->time_msec, event->touch_id, sx, sy);
@@ -2780,9 +2782,13 @@ touchmotion(struct wl_listener *listener, void *data)
wlr_cursor_absolute_to_layout_coords(cursor, &event->touch->base, event->x, event->y, &lx, &ly);
xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
- if (c != NULL) {
+ if (c != NULL && surface != NULL) {
+ if (sloppyfocus)
+ focusclient(c, 0);
wlr_seat_touch_point_focus(seat, surface, event->time_msec, event->touch_id, sx, sy);
} else {
+ if (sloppyfocus)
+ focusclient(NULL, 0);
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);
--
2.44.0
2.47.0