summary refs log tree commit diff stats
path: root/ui/spice-input.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2013-12-04 12:23:54 +0100
committerGerd Hoffmann <kraxel@redhat.com>2014-03-05 09:50:18 +0100
commitde8f580b2360706d644296c690bb187ece6dc4c1 (patch)
tree93dae5856b7d920309c48afd6a4a33df323064a3 /ui/spice-input.c
parent8d447d10b74e5116ed85ce2b890301b77774ec49 (diff)
downloadfocaccia-qemu-de8f580b2360706d644296c690bb187ece6dc4c1.tar.gz
focaccia-qemu-de8f580b2360706d644296c690bb187ece6dc4c1.zip
input: keyboard: switch spice ui to new core
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui/spice-input.c')
-rw-r--r--ui/spice-input.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/ui/spice-input.c b/ui/spice-input.c
index 3beb8deadb..c9df699062 100644
--- a/ui/spice-input.c
+++ b/ui/spice-input.c
@@ -26,12 +26,15 @@
 #include "qemu-common.h"
 #include "ui/qemu-spice.h"
 #include "ui/console.h"
+#include "ui/keymaps.h"
+#include "ui/input.h"
 
 /* keyboard bits */
 
 typedef struct QemuSpiceKbd {
     SpiceKbdInstance sin;
     int ledstate;
+    bool emul0;
 } QemuSpiceKbd;
 
 static void kbd_push_key(SpiceKbdInstance *sin, uint8_t frag);
@@ -47,9 +50,24 @@ static const SpiceKbdInterface kbd_interface = {
     .get_leds           = kbd_get_leds,
 };
 
-static void kbd_push_key(SpiceKbdInstance *sin, uint8_t frag)
+static void kbd_push_key(SpiceKbdInstance *sin, uint8_t scancode)
 {
-    kbd_put_keycode(frag);
+    QemuSpiceKbd *kbd = container_of(sin, QemuSpiceKbd, sin);
+    int keycode;
+    bool up;
+
+    if (scancode == SCANCODE_EMUL0) {
+        kbd->emul0 = true;
+        return;
+    }
+    keycode = scancode & ~SCANCODE_UP;
+    up = scancode & SCANCODE_UP;
+    if (kbd->emul0) {
+        kbd->emul0 = false;
+        keycode |= SCANCODE_GREY;
+    }
+
+    qemu_input_event_send_key_number(NULL, keycode, !up);
 }
 
 static uint8_t kbd_get_leds(SpiceKbdInstance *sin)