summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--hw/input/ps2.c8
-rw-r--r--qapi-schema.json5
-rw-r--r--ui/input-keymap.c9
-rw-r--r--ui/spice-input.c32
4 files changed, 23 insertions, 31 deletions
diff --git a/hw/input/ps2.c b/hw/input/ps2.c
index 9f057e46ea..77906d5f46 100644
--- a/hw/input/ps2.c
+++ b/hw/input/ps2.c
@@ -239,11 +239,11 @@ static const uint16_t qcode_to_keycode_set1[Q_KEY_CODE__MAX] = {
     [Q_KEY_CODE_MAIL] = 0xe06c,
     [Q_KEY_CODE_CALCULATOR] = 0xe021,
     [Q_KEY_CODE_COMPUTER] = 0xe06b,
-    [Q_KEY_CODE_AC_SEARCH] = 0xe065,
+    [Q_KEY_CODE_FIND] = 0xe065,
     [Q_KEY_CODE_AC_HOME] = 0xe032,
     [Q_KEY_CODE_AC_BACK] = 0xe06a,
     [Q_KEY_CODE_AC_FORWARD] = 0xe069,
-    [Q_KEY_CODE_AC_STOP] = 0xe068,
+    [Q_KEY_CODE_STOP] = 0xe068,
     [Q_KEY_CODE_AC_REFRESH] = 0xe067,
     [Q_KEY_CODE_AC_BOOKMARKS] = 0xe066,
 
@@ -379,11 +379,11 @@ static const uint16_t qcode_to_keycode_set2[Q_KEY_CODE__MAX] = {
     [Q_KEY_CODE_MAIL] = 0xe048,
     [Q_KEY_CODE_CALCULATOR] = 0xe02b,
     [Q_KEY_CODE_COMPUTER] = 0xe040,
-    [Q_KEY_CODE_AC_SEARCH] = 0xe010,
+    [Q_KEY_CODE_FIND] = 0xe010,
     [Q_KEY_CODE_AC_HOME] = 0xe03a,
     [Q_KEY_CODE_AC_BACK] = 0xe038,
     [Q_KEY_CODE_AC_FORWARD] = 0xe030,
-    [Q_KEY_CODE_AC_STOP] = 0xe028,
+    [Q_KEY_CODE_STOP] = 0xe028,
     [Q_KEY_CODE_AC_REFRESH] = 0xe020,
     [Q_KEY_CODE_AC_BOOKMARKS] = 0xe018,
 
diff --git a/qapi-schema.json b/qapi-schema.json
index dcc12c83a9..c96f0a26f6 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -4856,11 +4856,9 @@
 # @mail: since 2.10
 # @calculator: since 2.10
 # @computer: since 2.10
-# @ac_search: since 2.10
 # @ac_home: since 2.10
 # @ac_back: since 2.10
 # @ac_forward: since 2.10
-# @ac_stop: since 2.10
 # @ac_refresh: since 2.10
 # @ac_bookmarks: since 2.10
 # altgr, altgr_r: dropped in 2.10
@@ -4890,8 +4888,7 @@
             'audionext', 'audioprev', 'audiostop', 'audioplay', 'audiomute',
             'volumeup', 'volumedown', 'mediaselect',
             'mail', 'calculator', 'computer',
-            'ac_search', 'ac_home', 'ac_back', 'ac_forward', 'ac_stop',
-            'ac_refresh', 'ac_bookmarks' ] }
+            'ac_home', 'ac_back', 'ac_forward', 'ac_refresh', 'ac_bookmarks' ] }
 
 ##
 # @KeyValue:
diff --git a/ui/input-keymap.c b/ui/input-keymap.c
index 0d9ddde9c9..cf979c2ce9 100644
--- a/ui/input-keymap.c
+++ b/ui/input-keymap.c
@@ -116,6 +116,7 @@ static int linux_to_qcode[KEY_CNT] = {
     [KEY_LEFTMETA]       = Q_KEY_CODE_META_L,
     [KEY_RIGHTMETA]      = Q_KEY_CODE_META_R,
     [KEY_MENU]           = Q_KEY_CODE_MENU,
+    [KEY_PAUSE]          = Q_KEY_CODE_PAUSE,
 
     [KEY_SLEEP]          = Q_KEY_CODE_SLEEP,
     [KEY_WAKEUP]         = Q_KEY_CODE_WAKE,
@@ -123,13 +124,13 @@ static int linux_to_qcode[KEY_CNT] = {
     [KEY_MAIL]           = Q_KEY_CODE_MAIL,
     [KEY_COMPUTER]       = Q_KEY_CODE_COMPUTER,
 
-    [KEY_STOP]           = Q_KEY_CODE_AC_STOP,
+    [KEY_STOP]           = Q_KEY_CODE_STOP,
     [KEY_BOOKMARKS]      = Q_KEY_CODE_AC_BOOKMARKS,
     [KEY_BACK]           = Q_KEY_CODE_AC_BACK,
     [KEY_FORWARD]        = Q_KEY_CODE_AC_FORWARD,
     [KEY_HOMEPAGE]       = Q_KEY_CODE_AC_HOME,
     [KEY_REFRESH]        = Q_KEY_CODE_AC_REFRESH,
-    [KEY_FIND]           = Q_KEY_CODE_AC_SEARCH,
+    [KEY_FIND]           = Q_KEY_CODE_FIND,
 
     [KEY_NEXTSONG]       = Q_KEY_CODE_AUDIONEXT,
     [KEY_PREVIOUSSONG]   = Q_KEY_CODE_AUDIOPREV,
@@ -279,13 +280,13 @@ static const int qcode_to_number[] = {
     [Q_KEY_CODE_MAIL] = 0xec,
     [Q_KEY_CODE_COMPUTER] = 0xeb,
 
-    [Q_KEY_CODE_AC_STOP] = 0xe8,
+    [Q_KEY_CODE_STOP] = 0xe8,
     [Q_KEY_CODE_AC_BOOKMARKS] = 0xe6,
     [Q_KEY_CODE_AC_BACK] = 0xea,
     [Q_KEY_CODE_AC_FORWARD] = 0xe9,
     [Q_KEY_CODE_AC_HOME] = 0xb2,
     [Q_KEY_CODE_AC_REFRESH] = 0xe7,
-    [Q_KEY_CODE_AC_SEARCH] = 0xe5,
+    [Q_KEY_CODE_FIND] = 0xe5,
 
     [Q_KEY_CODE_AUDIONEXT] = 0x99,
     [Q_KEY_CODE_AUDIOPREV] = 0x90,
diff --git a/ui/spice-input.c b/ui/spice-input.c
index cda9976469..3d41aa1831 100644
--- a/ui/spice-input.c
+++ b/ui/spice-input.c
@@ -50,6 +50,7 @@ static const SpiceKbdInterface kbd_interface = {
 
 static void kbd_push_key(SpiceKbdInstance *sin, uint8_t scancode)
 {
+    static const uint8_t pauseseq[] = { 0xe1, 0x1d, 0x45, 0xe1, 0x9d, 0xc5 };
     QemuSpiceKbd *kbd = container_of(sin, QemuSpiceKbd, sin);
     int keycode;
     bool up;
@@ -58,32 +59,25 @@ static void kbd_push_key(SpiceKbdInstance *sin, uint8_t scancode)
         kbd->emul0 = true;
         return;
     }
-    keycode = scancode & ~SCANCODE_UP;
-    up = scancode & SCANCODE_UP;
-    if (kbd->emul0) {
-        kbd->emul0 = false;
-        keycode |= SCANCODE_GREY;
-    }
 
-    if (scancode == SCANCODE_EMUL1) {
+    if (scancode == pauseseq[kbd->pauseseq]) {
         kbd->pauseseq++;
-        return;
-    } else if (kbd->pauseseq == 1) {
-        if (keycode == 0x1d) {
-            kbd->pauseseq++;
-            return;
-        } else {
-            kbd->pauseseq = 0;
-        }
-    } else if (kbd->pauseseq == 2) {
-        if (keycode == 0x45) {
-            qemu_input_event_send_key_qcode(NULL, Q_KEY_CODE_PAUSE, !up);
+        if (kbd->pauseseq == G_N_ELEMENTS(pauseseq)) {
+            qemu_input_event_send_key_qcode(NULL, Q_KEY_CODE_PAUSE, true);
             kbd->pauseseq = 0;
-            return;
         }
+        return;
+    } else {
         kbd->pauseseq = 0;
     }
 
+    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);
 }