1From b44de26492873a65a12a4e0f0059dc11f195a021 Mon Sep 17 00:00:00 2001 2From: Philipp Zabel <p.zabel@pengutronix.de> 3Date: Thu, 6 Oct 2022 16:26:58 +0200 4Subject: [PATCH 85/92] backend-vnc: implement direct key code handling 5 6Allow clients that support the QEMU Extended Key Event Message to send 7keycodes directly. 8 9Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> 10(cherry picked from commit 5cd87ff80188d3a9007a861e165626a03274ac61) 11Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 12--- 13 libweston/backend-vnc/vnc.c | 19 +++++++++++++++++++ 14 1 file changed, 19 insertions(+) 15 16diff --git a/libweston/backend-vnc/vnc.c b/libweston/backend-vnc/vnc.c 17index 8cfad2a..dbcb395 100644 18--- a/libweston/backend-vnc/vnc.c 19+++ b/libweston/backend-vnc/vnc.c 20@@ -333,6 +333,24 @@ vnc_handle_key_event(struct nvnc_client *client, uint32_t keysym, 21 STATE_UPDATE_AUTOMATIC); 22 } 23 24+static void 25+vnc_handle_key_code_event(struct nvnc_client *client, uint32_t key, 26+ bool is_pressed) 27+{ 28+ struct vnc_peer *peer = nvnc_get_userdata(client); 29+ enum wl_keyboard_key_state state; 30+ struct timespec time; 31+ 32+ weston_compositor_get_time(&time); 33+ 34+ if (is_pressed) 35+ state = WL_KEYBOARD_KEY_STATE_PRESSED; 36+ else 37+ state = WL_KEYBOARD_KEY_STATE_RELEASED; 38+ 39+ notify_key(peer->seat, &time, key, state, STATE_UPDATE_AUTOMATIC); 40+} 41+ 42 static void 43 vnc_pointer_event(struct nvnc_client *client, uint16_t x, uint16_t y, 44 enum nvnc_button_mask button_mask) 45@@ -975,6 +993,7 @@ vnc_backend_create(struct weston_compositor *compositor, 46 nvnc_set_new_client_fn(backend->server, vnc_new_client); 47 nvnc_set_pointer_fn(backend->server, vnc_pointer_event); 48 nvnc_set_key_fn(backend->server, vnc_handle_key_event); 49+ nvnc_set_key_code_fn(backend->server, vnc_handle_key_code_event); 50 nvnc_set_userdata(backend->server, backend, NULL); 51 nvnc_set_name(backend->server, "Weston VNC backend"); 52 53-- 542.20.1 55 56