mirror of
https://codeberg.org/dwl/dwl-patches.git
synced 2025-09-08 12:14:50 +00:00
tablet-input: Update patch and squash commits
This commit is contained in:
parent
af2391cb80
commit
b279ebde1c
@ -6,7 +6,7 @@ KNOWN BUGS:
|
|||||||
|
|
||||||
### Download
|
### Download
|
||||||
- [git branch](https://codeberg.org/fauxmight/dwl/src/branch/touch-input)
|
- [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
|
### Authors
|
||||||
- [fauxmight](https://codeberg.org/fauxmight)
|
- [fauxmight](https://codeberg.org/fauxmight)
|
||||||
|
@ -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>
|
From: Micah N Gorrell <m@minego.net>
|
||||||
Date: Fri, 9 Feb 2024 17:08:20 -0700
|
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
|
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 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
dwl.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
1 file changed, 145 insertions(+)
|
1 file changed, 150 insertions(+)
|
||||||
|
|
||||||
diff --git a/dwl.c b/dwl.c
|
diff --git a/dwl.c b/dwl.c
|
||||||
index 5867b0c..fe447fb 100644
|
index 0eba3e9..c9eb7fb 100644
|
||||||
--- a/dwl.c
|
--- a/dwl.c
|
||||||
+++ b/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_session_lock_v1.h>
|
||||||
#include <wlr/types/wlr_single_pixel_buffer_v1.h>
|
#include <wlr/types/wlr_single_pixel_buffer_v1.h>
|
||||||
#include <wlr/types/wlr_subcompositor.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_viewporter.h>
|
||||||
#include <wlr/types/wlr_virtual_keyboard_v1.h>
|
#include <wlr/types/wlr_virtual_keyboard_v1.h>
|
||||||
#include <wlr/types/wlr_virtual_pointer_v1.h>
|
#include <wlr/types/wlr_virtual_pointer_v1.h>
|
||||||
@@ -161,6 +162,12 @@ typedef struct {
|
@@ -165,6 +166,12 @@ typedef struct {
|
||||||
struct wl_listener key;
|
struct wl_listener destroy;
|
||||||
} KeyboardGroup;
|
} KeyboardGroup;
|
||||||
|
|
||||||
+typedef struct TouchGroup {
|
+typedef struct TouchGroup {
|
||||||
@ -36,19 +31,19 @@ index 5867b0c..fe447fb 100644
|
|||||||
+} TouchGroup;
|
+} TouchGroup;
|
||||||
+
|
+
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* Must keep these three elements in this order */
|
/* Must keep this field first */
|
||||||
unsigned int type; /* LayerShell */
|
unsigned int type; /* LayerShell */
|
||||||
@@ -264,7 +271,9 @@ static void createmon(struct wl_listener *listener, void *data);
|
@@ -271,7 +278,9 @@ static void createnotify(struct wl_listener *listener, void *data);
|
||||||
static void createnotify(struct wl_listener *listener, void *data);
|
|
||||||
static void createpointer(struct wlr_pointer *pointer);
|
static void createpointer(struct wlr_pointer *pointer);
|
||||||
static void createpointerconstraint(struct wl_listener *listener, void *data);
|
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 createtouch(struct wlr_touch *touch);
|
||||||
static void cursorconstrain(struct wlr_pointer_constraint_v1 *constraint);
|
static void cursorconstrain(struct wlr_pointer_constraint_v1 *constraint);
|
||||||
+static void createtouch(struct wlr_touch *touch);
|
+static void createtouch(struct wlr_touch *touch);
|
||||||
static void cursorframe(struct wl_listener *listener, void *data);
|
static void cursorframe(struct wl_listener *listener, void *data);
|
||||||
static void cursorwarptohint(void);
|
static void cursorwarptohint(void);
|
||||||
static void destroydecoration(struct wl_listener *listener, void *data);
|
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 togglefullscreen(const Arg *arg);
|
||||||
static void toggletag(const Arg *arg);
|
static void toggletag(const Arg *arg);
|
||||||
static void toggleview(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 unlocksession(struct wl_listener *listener, void *data);
|
||||||
static void unmaplayersurfacenotify(struct wl_listener *listener, void *data);
|
static void unmaplayersurfacenotify(struct wl_listener *listener, void *data);
|
||||||
static void unmapnotify(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 wlr_box sgeom;
|
||||||
static struct wl_list mons;
|
static struct wl_list mons;
|
||||||
static Monitor *selmon;
|
static Monitor *selmon;
|
||||||
@ -67,8 +62,8 @@ index 5867b0c..fe447fb 100644
|
|||||||
|
|
||||||
#ifdef XWAYLAND
|
#ifdef XWAYLAND
|
||||||
static void activatex11(struct wl_listener *listener, void *data);
|
static void activatex11(struct wl_listener *listener, void *data);
|
||||||
@@ -1041,6 +1055,16 @@ createpointerconstraint(struct wl_listener *listener, void *data)
|
@@ -1129,6 +1143,16 @@ createpopup(struct wl_listener *listener, void *data)
|
||||||
&pointer_constraint->destroy, destroypointerconstraint);
|
LISTEN_STATIC(&popup->base->surface->events.commit, commitpopup);
|
||||||
}
|
}
|
||||||
|
|
||||||
+void
|
+void
|
||||||
@ -84,7 +79,7 @@ index 5867b0c..fe447fb 100644
|
|||||||
void
|
void
|
||||||
cursorconstrain(struct wlr_pointer_constraint_v1 *constraint)
|
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:
|
case WLR_INPUT_DEVICE_POINTER:
|
||||||
createpointer(wlr_pointer_from_input_device(device));
|
createpointer(wlr_pointer_from_input_device(device));
|
||||||
break;
|
break;
|
||||||
@ -94,16 +89,16 @@ index 5867b0c..fe447fb 100644
|
|||||||
default:
|
default:
|
||||||
/* TODO handle other input device types */
|
/* TODO handle other input device types */
|
||||||
break;
|
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;
|
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;
|
caps |= WL_SEAT_CAPABILITY_KEYBOARD;
|
||||||
+ if (!wl_list_empty(&touches))
|
+ if (!wl_list_empty(&touches))
|
||||||
+ caps |= WL_SEAT_CAPABILITY_TOUCH;
|
+ caps |= WL_SEAT_CAPABILITY_TOUCH;
|
||||||
wlr_seat_set_capabilities(seat, caps);
|
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.axis, axisnotify);
|
||||||
LISTEN_STATIC(&cursor->events.frame, cursorframe);
|
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);
|
cursor_shape_mgr = wlr_cursor_shape_manager_v1_create(dpy, 1);
|
||||||
LISTEN_STATIC(&cursor_shape_mgr->events.request_set_shape, setcursorshape);
|
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();
|
printstatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,7 +146,8 @@ index 5867b0c..fe447fb 100644
|
|||||||
+
|
+
|
||||||
+ /* Find the client under the pointer and send the event along. */
|
+ /* Find the client under the pointer and send the event along. */
|
||||||
+ xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
|
+ 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) {
|
+ if (surface != NULL) {
|
||||||
+ serial = wlr_seat_touch_notify_down(seat, surface, event->time_msec, event->touch_id, sx, sy);
|
+ 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);
|
+ wlr_cursor_absolute_to_layout_coords(cursor, &event->touch->base, event->x, event->y, &lx, &ly);
|
||||||
+ xytonode(lx, ly, &surface, &c, NULL, &sx, &sy);
|
+ 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);
|
+ wlr_seat_touch_point_focus(seat, surface, event->time_msec, event->touch_id, sx, sy);
|
||||||
+ } else {
|
+ } else {
|
||||||
|
+ if (sloppyfocus)
|
||||||
|
+ focusclient(NULL, 0);
|
||||||
+ wlr_seat_touch_point_clear_focus(seat, event->time_msec, event->touch_id);
|
+ 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_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)
|
unlocksession(struct wl_listener *listener, void *data)
|
||||||
{
|
{
|
||||||
--
|
--
|
||||||
2.44.0
|
2.47.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
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user