HYL_OK3568_LINUX/buildroot/package/weston/0085-backend-vnc-implement-direct-key-code-handling.patch
2025-05-10 21:49:39 +08:00

56 lines
1.9 KiB
Diff

From b44de26492873a65a12a4e0f0059dc11f195a021 Mon Sep 17 00:00:00 2001
From: Philipp Zabel <p.zabel@pengutronix.de>
Date: Thu, 6 Oct 2022 16:26:58 +0200
Subject: [PATCH 85/92] backend-vnc: implement direct key code handling
Allow clients that support the QEMU Extended Key Event Message to send
keycodes directly.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
(cherry picked from commit 5cd87ff80188d3a9007a861e165626a03274ac61)
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
libweston/backend-vnc/vnc.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/libweston/backend-vnc/vnc.c b/libweston/backend-vnc/vnc.c
index 8cfad2a..dbcb395 100644
--- a/libweston/backend-vnc/vnc.c
+++ b/libweston/backend-vnc/vnc.c
@@ -333,6 +333,24 @@ vnc_handle_key_event(struct nvnc_client *client, uint32_t keysym,
STATE_UPDATE_AUTOMATIC);
}
+static void
+vnc_handle_key_code_event(struct nvnc_client *client, uint32_t key,
+ bool is_pressed)
+{
+ struct vnc_peer *peer = nvnc_get_userdata(client);
+ enum wl_keyboard_key_state state;
+ struct timespec time;
+
+ weston_compositor_get_time(&time);
+
+ if (is_pressed)
+ state = WL_KEYBOARD_KEY_STATE_PRESSED;
+ else
+ state = WL_KEYBOARD_KEY_STATE_RELEASED;
+
+ notify_key(peer->seat, &time, key, state, STATE_UPDATE_AUTOMATIC);
+}
+
static void
vnc_pointer_event(struct nvnc_client *client, uint16_t x, uint16_t y,
enum nvnc_button_mask button_mask)
@@ -975,6 +993,7 @@ vnc_backend_create(struct weston_compositor *compositor,
nvnc_set_new_client_fn(backend->server, vnc_new_client);
nvnc_set_pointer_fn(backend->server, vnc_pointer_event);
nvnc_set_key_fn(backend->server, vnc_handle_key_event);
+ nvnc_set_key_code_fn(backend->server, vnc_handle_key_code_event);
nvnc_set_userdata(backend->server, backend, NULL);
nvnc_set_name(backend->server, "Weston VNC backend");
--
2.20.1