linuxOS_AP06/buildroot/package/weston/0090-libinput-seat-Avoid-using-VNC-s-seat-as-udev_seat.patch
2025-06-03 12:28:32 +08:00

114 lines
3.6 KiB
Diff

From 465e7277aa3ba33bc81ba69dc5389aad45479e2b Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Wed, 10 Jul 2024 16:45:54 +0800
Subject: [PATCH 90/97] libinput-seat: Avoid using VNC's seat as udev_seat.
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
libweston/libinput-seat.c | 43 +++++++++++++++++++++++++++++++--------
1 file changed, 34 insertions(+), 9 deletions(-)
diff --git a/libweston/libinput-seat.c b/libweston/libinput-seat.c
index aaefe6cfc..c160a65a8 100644
--- a/libweston/libinput-seat.c
+++ b/libweston/libinput-seat.c
@@ -50,6 +50,14 @@ udev_seat_create(struct udev_input *input, const char *seat_name);
static void
udev_seat_destroy(struct udev_seat *seat);
+static void
+udev_seat_led_update(struct weston_seat *seat_base, enum weston_led leds);
+static inline bool
+is_udev_seat(struct weston_seat *seat)
+{
+ return seat->led_update == udev_seat_led_update;
+}
+
static struct udev_seat *
get_udev_seat(struct udev_input *input, struct libinput_device *device)
{
@@ -316,6 +324,7 @@ udev_input_enable(struct udev_input *input)
struct wl_event_loop *loop;
struct weston_compositor *c = input->compositor;
int fd;
+ struct weston_seat *seat_base;
struct udev_seat *seat;
int devices_found = 0;
@@ -342,7 +351,12 @@ udev_input_enable(struct udev_input *input)
process_events(input);
}
- wl_list_for_each(seat, &input->compositor->seat_list, base.link) {
+ wl_list_for_each(seat_base, &input->compositor->seat_list, link) {
+ if (!is_udev_seat(seat_base))
+ continue;
+
+ seat = (struct udev_seat *)seat_base;
+
evdev_notify_keyboard_focus(&seat->base, &seat->devices_list);
if (!wl_list_empty(&seat->devices_list))
@@ -425,12 +439,14 @@ udev_input_init(struct udev_input *input, struct weston_compositor *c,
void
udev_input_destroy(struct udev_input *input)
{
- struct udev_seat *seat, *next;
+ struct weston_seat *seat, *next;
if (input->libinput_source)
wl_event_source_remove(input->libinput_source);
- wl_list_for_each_safe(seat, next, &input->compositor->seat_list, base.link)
- udev_seat_destroy(seat);
+ wl_list_for_each_safe(seat, next, &input->compositor->seat_list, link) {
+ if (is_udev_seat(seat))
+ udev_seat_destroy((struct udev_seat *)seat);
+ }
libinput_unref(input->libinput);
}
@@ -531,11 +547,14 @@ udev_seat_destroy(struct udev_seat *seat)
struct udev_seat *
udev_seat_get_named(struct udev_input *input, const char *seat_name)
{
- struct udev_seat *seat;
+ struct weston_seat *seat;
+
+ wl_list_for_each(seat, &input->compositor->seat_list, link) {
+ if (!is_udev_seat(seat))
+ continue;
- wl_list_for_each(seat, &input->compositor->seat_list, base.link) {
- if (strcmp(seat->base.seat_name, seat_name) == 0)
- return seat;
+ if (strcmp(seat->seat_name, seat_name) == 0)
+ return (struct udev_seat *) seat;
}
return udev_seat_create(input, seat_name);
@@ -545,6 +564,7 @@ void
weston_input_bind_output(struct weston_compositor *compositor, const char *output_name, const char *match)
{
struct evdev_device *device;
+ struct weston_seat *seat_base;
struct udev_seat *seat;
const char *sysname, *name;
int len = strlen(match);
@@ -554,7 +574,12 @@ weston_input_bind_output(struct weston_compositor *compositor, const char *outpu
if (len && match[len - 1] == '*')
len--;
- wl_list_for_each(seat, &compositor->seat_list, base.link) {
+ wl_list_for_each(seat_base, &compositor->seat_list, link) {
+ if (!is_udev_seat(seat_base))
+ continue;
+
+ seat = (struct udev_seat *)seat_base;
+
wl_list_for_each(device, &seat->devices_list, link) {
if (clear) {
/* Clear all bounded inputs */
--
2.20.1