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