Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37730789
en ru br
Репозитории ALT

Группа :: Эмуляторы
Пакет: pve-qemu

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: 0015-vnc-altgr-emulation.patch
Скачать


From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
Date: Wed, 9 Dec 2015 14:17:38 +0100
Subject: [PATCH] vnc: altgr emulation
---
 ui/vnc.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/ui/vnc.c b/ui/vnc.c
index b0314441c4..f30687884b 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1631,6 +1631,10 @@ static void kbd_leds(void *opaque, int ledstate)
 
 static void do_key_event(VncState *vs, int down, int keycode, int sym)
 {
+    int mods =  keycode & 0xf00;
+
+    keycode &= SCANCODE_KEYMASK;
+
     /* QEMU console switch */
     switch(keycode) {
     case 0x2a:                          /* Left Shift */
@@ -1711,8 +1715,27 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
     }
 
     if (qemu_console_is_graphic(NULL)) {
+
+ 	/* our java vnc client never sends ALTGR, so we create
+	   an artificial up/down event */
+
+	int emul_altgr = (mods & SCANCODE_ALTGR) &&
+	    !vs->modifiers_state[0xb8];
+
+	if (emul_altgr) {
+            reset_keys(vs);
+            qemu_input_event_send_key_number(vs->vd->dcl.con, 0xb8, true);
+            qemu_input_event_send_key_delay(vs->vd->key_delay_ms);
+	}
+
         qemu_input_event_send_key_number(vs->vd->dcl.con, keycode, down);
         qemu_input_event_send_key_delay(vs->vd->key_delay_ms);
+
+	if (emul_altgr) {
+             qemu_input_event_send_key_number(vs->vd->dcl.con, 0xb8, false);
+             qemu_input_event_send_key_delay(vs->vd->key_delay_ms);
+	}
+
     } else {
         bool numlock = vs->modifiers_state[0x45];
         bool control = (vs->modifiers_state[0x1d] ||
@@ -1852,7 +1875,8 @@ static void key_event(VncState *vs, int down, uint32_t sym)
         lsym = lsym - 'A' + 'a';
     }
 
-    keycode = keysym2scancode(vs->vd->kbd_layout, lsym & 0xFFFF) & SCANCODE_KEYMASK;
+    keycode = keysym2scancode(vs->vd->kbd_layout, lsym & 0xFFFF);
+
     trace_vnc_key_event_map(down, sym, keycode, code2name(keycode));
     do_key_event(vs, down, keycode, sym);
 }
-- 
2.11.0
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin