summary refs log tree commit diff stats
path: root/ui/input-linux.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2016-06-16 11:03:19 +0200
committerGerd Hoffmann <kraxel@redhat.com>2016-07-12 09:25:50 +0200
commit2330e9e7cca29346df74b21105a587d9478ff296 (patch)
tree22f72128e998c47fb37155f45a511502f3ecf937 /ui/input-linux.c
parentd4df42c43168873521632836bdffecf2f3a9f9f1 (diff)
downloadfocaccia-qemu-2330e9e7cca29346df74b21105a587d9478ff296.tar.gz
focaccia-qemu-2330e9e7cca29346df74b21105a587d9478ff296.zip
input-linux: factor out input_linux_handle_keyboard
No functional change.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-id: 1466067800-25434-3-git-send-email-kraxel@redhat.com
Diffstat (limited to 'ui/input-linux.c')
-rw-r--r--ui/input-linux.c103
1 files changed, 54 insertions, 49 deletions
diff --git a/ui/input-linux.c b/ui/input-linux.c
index a932290a9f..ffff97f113 100644
--- a/ui/input-linux.c
+++ b/ui/input-linux.c
@@ -188,6 +188,59 @@ static void input_linux_toggle_grab(InputLinux *il)
     }
 }
 
+static void input_linux_handle_keyboard(InputLinux *il,
+                                        struct input_event *event)
+{
+    if (event->type == EV_KEY) {
+        if (event->value > 2 || (event->value > 1 && !il->repeat)) {
+            /*
+             * ignore autorepeat + unknown key events
+             * 0 == up, 1 == down, 2 == autorepeat, other == undefined
+             */
+            return;
+        }
+        if (event->code >= KEY_CNT) {
+            /*
+             * Should not happen.  But better safe than sorry,
+             * and we make Coverity happy too.
+             */
+            return;
+        }
+
+        /* keep track of key state */
+        if (!il->keydown[event->code] && event->value) {
+            il->keydown[event->code] = true;
+            il->keycount++;
+        }
+        if (il->keydown[event->code] && !event->value) {
+            il->keydown[event->code] = false;
+            il->keycount--;
+        }
+
+        /* send event to guest when grab is active */
+        if (il->grab_active) {
+            int qcode = qemu_input_linux_to_qcode(event->code);
+            qemu_input_event_send_key_qcode(NULL, qcode, event->value);
+        }
+
+        /* hotkey -> record switch request ... */
+        if (il->keydown[KEY_LEFTCTRL] &&
+            il->keydown[KEY_RIGHTCTRL]) {
+            il->grab_request = true;
+        }
+
+        /*
+         * ... and do the switch when all keys are lifted, so we
+         * confuse neither guest nor host with keys which seem to
+         * be stuck due to missing key-up events.
+         */
+        if (il->grab_request && !il->keycount) {
+            il->grab_request = false;
+            input_linux_toggle_grab(il);
+        }
+    }
+}
+
 static void input_linux_event_keyboard(void *opaque)
 {
     InputLinux *il = opaque;
@@ -205,55 +258,7 @@ static void input_linux_event_keyboard(void *opaque)
             break;
         }
 
-        switch (event.type) {
-        case EV_KEY:
-            if (event.value > 2 || (event.value > 1 && !il->repeat)) {
-                /*
-                 * ignore autorepeat + unknown key events
-                 * 0 == up, 1 == down, 2 == autorepeat, other == undefined
-                 */
-                continue;
-            }
-            if (event.code >= KEY_CNT) {
-                /*
-                 * Should not happen.  But better safe than sorry,
-                 * and we make Coverity happy too.
-                 */
-                continue;
-            }
-            /* keep track of key state */
-            if (!il->keydown[event.code] && event.value) {
-                il->keydown[event.code] = true;
-                il->keycount++;
-            }
-            if (il->keydown[event.code] && !event.value) {
-                il->keydown[event.code] = false;
-                il->keycount--;
-            }
-
-            /* send event to guest when grab is active */
-            if (il->grab_active) {
-                int qcode = qemu_input_linux_to_qcode(event.code);
-                qemu_input_event_send_key_qcode(NULL, qcode, event.value);
-            }
-
-            /* hotkey -> record switch request ... */
-            if (il->keydown[KEY_LEFTCTRL] &&
-                il->keydown[KEY_RIGHTCTRL]) {
-                il->grab_request = true;
-            }
-
-            /*
-             * ... and do the switch when all keys are lifted, so we
-             * confuse neither guest nor host with keys which seem to
-             * be stuck due to missing key-up events.
-             */
-            if (il->grab_request && !il->keycount) {
-                il->grab_request = false;
-                input_linux_toggle_grab(il);
-            }
-            break;
-        }
+        input_linux_handle_keyboard(il, &event);
     }
 }