From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502789897632795.5510415514273; Tue, 15 Aug 2017 02:38:17 -0700 (PDT) Received: from localhost ([::1]:48699 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYIh-0003ay-VN for importer@patchew.org; Tue, 15 Aug 2017 05:38:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43949) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYGv-0002N9-QN for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYGu-0000o4-69 for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:25 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60566) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYGt-0000nZ-Sr for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:24 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D92A0EC53E for ; Tue, 15 Aug 2017 09:36:22 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id C3B1261341; Tue, 15 Aug 2017 09:36:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D92A0EC53E Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:04 +0100 Message-Id: <20170815093615.16453-2-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 15 Aug 2017 09:36:23 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 01/12] ui: add keycodemapdb repository as a GIT submodule X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The https://gitlab.com/keycodemap/keycodemapdb/ repo contains a data file mapping between all the different scancode/keycode/keysym sets that are known, and a tool to auto-generate lookup tables for different combinations. It is used by GTK-VNC, SPICE-GTK and libvirt for mapping keys. Using it in QEMU will let us replace many hand written lookup tables with auto-generated tables from a master data source, reducing bugs. Adding new QKeyCodes will now only require the master table to be updated, all ~20 other tables will be automatically updated to follow. Signed-off-by: Daniel P. Berrange --- .gitignore | 2 ++ .gitmodules | 3 +++ configure | 2 ++ tests/docker/Makefile.include | 11 +++++++---- tests/docker/run | 4 +++- ui/Makefile.objs | 18 ++++++++++++++++++ ui/keycodemapdb | 1 + 7 files changed, 36 insertions(+), 5 deletions(-) create mode 160000 ui/keycodemapdb diff --git a/.gitignore b/.gitignore index cf65316863..6e5a1202c8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,8 @@ /trace/generated-tcg-tracers.h /ui/shader/texture-blit-frag.h /ui/shader/texture-blit-vert.h +/ui/keycodemap_*.c +/ui/input-keymap-*.c *-timestamp /*-softmmu /*-darwin-user diff --git a/.gitmodules b/.gitmodules index 5b0c212622..369989f19e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -37,3 +37,6 @@ [submodule "roms/QemuMacDrivers"] path =3D roms/QemuMacDrivers url =3D git://git.qemu.org/QemuMacDrivers.git +[submodule "ui/keycodemapdb"] + path =3D ui/keycodemapdb + url =3D https://gitlab.com/keycodemap/keycodemapdb.git diff --git a/configure b/configure index dd73cce62f..bd373ec2b4 100755 --- a/configure +++ b/configure @@ -5258,6 +5258,8 @@ echo_version() { fi } =20 +(cd $source_path && git submodule update --init ui/keycodemapdb) + # prepend pixman and ftd flags after all config tests are done QEMU_CFLAGS=3D"$pixman_cflags $fdt_cflags $QEMU_CFLAGS" libs_softmmu=3D"$pixman_libs $libs_softmmu" diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index aaab1a4208..2920edb79a 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -18,21 +18,24 @@ TESTS ?=3D % IMAGES ?=3D % =20 # Make archive from git repo $1 to tar.gz $2 -make-archive-maybe =3D $(if $(wildcard $1/*), \ - $(call quiet-command, \ +make-archive =3D $(call quiet-command, \ (cd $1; if git diff-index --quiet HEAD -- &>/dev/null; then \ git archive -1 HEAD --format=3Dtar.gz; \ else \ git archive -1 $$(git stash create) --format=3Dtar.gz; \ fi) > $2, \ - "ARCHIVE","$(notdir $2)")) + "ARCHIVE","$(notdir $2)") +make-archive-maybe =3D $(if $(wildcard $1/*), \ + $(call make-archive, $1, $2)) =20 CUR_TIME :=3D $(shell date +%Y-%m-%d-%H.%M.%S.$$$$) DOCKER_SRC_COPY :=3D docker-src.$(CUR_TIME) =20 $(DOCKER_SRC_COPY): @mkdir $@ - $(call make-archive-maybe, $(SRC_PATH), $@/qemu.tgz) + $(call quiet-command, git submodule update --init $(SRC_PATH)/ui/keycodem= apdb, "GIT", "ui/keycodemapdb") + $(call make-archive, $(SRC_PATH), $@/qemu.tgz) + $(call make-archive, $(SRC_PATH)/ui/keycodemapdb, $@/keycodemapdb.tgz) $(call make-archive-maybe, $(SRC_PATH)/dtc, $@/dtc.tgz) $(call make-archive-maybe, $(SRC_PATH)/pixman, $@/pixman.tgz) $(call quiet-command, cp $(SRC_PATH)/tests/docker/run $@/run, \ diff --git a/tests/docker/run b/tests/docker/run index c1e4513bce..c30352df4a 100755 --- a/tests/docker/run +++ b/tests/docker/run @@ -33,13 +33,15 @@ mkdir -p $TEST_DIR/{src,build,install} =20 # Extract the source tarballs tar -C $TEST_DIR/src -xzf $BASE/qemu.tgz -for p in dtc pixman; do +for p in dtc pixman ; do if test -f $BASE/$p.tgz; then tar -C $TEST_DIR/src/$p -xzf $BASE/$p.tgz export FEATURES=3D"$FEATURES $p" fi done =20 +tar -C $TEST_DIR/src/ui/keycodemapdb -xzf $BASE/keycodemapdb.tgz + if test -n "$SHOW_ENV"; then if test -f /packages.txt; then echo "Packages installed:" diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 3369451285..6796a9f98b 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -49,3 +49,21 @@ gtk-egl.o-libs +=3D $(OPENGL_LIBS) shader.o-libs +=3D $(OPENGL_LIBS) console-gl.o-libs +=3D $(OPENGL_LIBS) egl-helpers.o-libs +=3D $(OPENGL_LIBS) + +KEYCODEMAP_GEN =3D $(SRC_PATH)/ui/keycodemapdb/tools/keymap-gen +KEYCODEMAP_CSV =3D $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv + +KEYCODEMAP_FILES =3D \ + $(NULL) + +GENERATED_FILES +=3D $(KEYCODEMAP_FILES) + +ui/input-keymap-%.c: $(KEYCODEMAP_GEN) $(KEYCODEMAP_CSV) $(SRC_PATH)/ui/Ma= kefile.objs + $(call quiet-command,\ + src=3D$$(echo $@ | sed -E -e "s,^ui/input-keymap-(.+)-to-(.+)\.c$$,\1= ,") && \ + dst=3D$$(echo $@ | sed -E -e "s,^ui/input-keymap-(.+)-to-(.+)\.c$$,\2= ,") && \ + $(PYTHON) $(KEYCODEMAP_GEN) \ + --lang glib2 \ + --varname qemu_input_map_$${src}_to_$${dst} \ + code-map $(KEYCODEMAP_CSV) $${src} $${dst} \ + > $@ || rm $@, "GEN", "$@") diff --git a/ui/keycodemapdb b/ui/keycodemapdb new file mode 160000 index 0000000000..56ce5650d2 --- /dev/null +++ b/ui/keycodemapdb @@ -0,0 +1 @@ +Subproject commit 56ce5650d2c6ea216b4580df44b9a6dd3bc92c3b --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502789912602710.2513538607845; Tue, 15 Aug 2017 02:38:32 -0700 (PDT) Received: from localhost ([::1]:48700 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYIv-0003mO-3j for importer@patchew.org; Tue, 15 Aug 2017 05:38:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43975) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYGx-0002OZ-KA for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYGv-0000or-K9 for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:35684) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYGv-0000oM-Ao for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:25 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3989761488 for ; Tue, 15 Aug 2017 09:36:24 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id 28B1460657; Tue, 15 Aug 2017 09:36:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 3989761488 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:05 +0100 Message-Id: <20170815093615.16453-3-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 15 Aug 2017 09:36:24 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 02/12] ui: convert common input code to keycodemapdb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Replace the number_to_qcode, qcode_to_number and linux_to_qcode tables with automatically generated tables. Missing entries in linux_to_qcode now fixed: KEY_LINEFEED -> Q_KEY_CODE_LF KEY_KPEQUAL -> Q_KEY_CODE_KP_EQUALS KEY_COMPOSE -> Q_KEY_CODE_COMPOSE KEY_AGAIN -> Q_KEY_CODE_AGAIN KEY_PROPS -> Q_KEY_CODE_PROPS KEY_UNDO -> Q_KEY_CODE_UNDO KEY_FRONT -> Q_KEY_CODE_FRONT KEY_COPY -> Q_KEY_CODE_COPY KEY_OPEN -> Q_KEY_CODE_OPEN KEY_PASTE -> Q_KEY_CODE_PASTE KEY_CUT -> Q_KEY_CODE_CUT KEY_HELP -> Q_KEY_CODE_HELP KEY_MEDIA -> Q_KEY_CODE_MEDIASELECT In additionsome fixes: - KEY_PLAYPAUSE now maps to Q_KEY_CODE_AUDIOPLAY, instead of KEY_PLAYCD. KEY_PLAYPAUSE is defined across almost all scancodes sets, while KEY_PLAYCD only appears in AT set1, so the former is a more useful mapping. Missing entries in qcode_to_number now fixed: Q_KEY_CODE_AGAIN -> 0x85 Q_KEY_CODE_PROPS -> 0x86 Q_KEY_CODE_UNDO -> 0x87 Q_KEY_CODE_FRONT -> 0x8c Q_KEY_CODE_COPY -> 0xf8 Q_KEY_CODE_OPEN -> 0x64 Q_KEY_CODE_PASTE -> 0x65 Q_KEY_CODE_CUT -> 0xbc Q_KEY_CODE_LF -> 0x5b Q_KEY_CODE_HELP -> 0xf5 Q_KEY_CODE_COMPOSE -> 0xdd Q_KEY_CODE_KP_EQUALS -> 0x59 Q_KEY_CODE_MEDIASELECT -> 0xed In addition some fixes: - Q_KEY_CODE_MENU was incorrectly mapped to the compose scancode (0xdd) and is now mapped to 0x9e - Q_KEY_CODE_FIND was mapped to 0xe065 (Search) instead of to 0xe041 (Find) - Q_KEY_CODE_HIRAGANA was mapped to 0x70 (Katakanahiragana) instead of of 0x77 (Hirigana) - Q_KEY_CODE_PRINT was mapped to 0xb7 which is not a defined scan code in AT set 1, it is now mapped to 0x54 (sysrq) Signed-off-by: Daniel P. Berrange --- include/ui/input.h | 11 +- ui/Makefile.objs | 3 + ui/input-keymap.c | 326 +++----------------------------------------------= ---- 3 files changed, 28 insertions(+), 312 deletions(-) diff --git a/include/ui/input.h b/include/ui/input.h index c488585def..479cc46cfc 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -43,7 +43,7 @@ void qemu_input_event_send_key(QemuConsole *src, KeyValue= *key, bool down); void qemu_input_event_send_key_number(QemuConsole *src, int num, bool down= ); void qemu_input_event_send_key_qcode(QemuConsole *src, QKeyCode q, bool do= wn); void qemu_input_event_send_key_delay(uint32_t delay_ms); -int qemu_input_key_number_to_qcode(uint8_t nr); +int qemu_input_key_number_to_qcode(unsigned int nr); int qemu_input_key_value_to_number(const KeyValue *value); int qemu_input_key_value_to_qcode(const KeyValue *value); int qemu_input_key_value_to_scancode(const KeyValue *value, bool down, @@ -69,4 +69,13 @@ void qemu_input_check_mode_change(void); void qemu_add_mouse_mode_change_notifier(Notifier *notify); void qemu_remove_mouse_mode_change_notifier(Notifier *notify); =20 +extern const guint qemu_input_map_linux_to_qcode_len; +extern const guint16 qemu_input_map_linux_to_qcode[]; + +extern const guint qemu_input_map_qcode_to_qnum_len; +extern const guint16 qemu_input_map_qcode_to_qnum[]; + +extern const guint qemu_input_map_qnum_to_qcode_len; +extern const guint16 qemu_input_map_qnum_to_qcode[]; + #endif /* INPUT_H */ diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 6796a9f98b..8c357b488f 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -54,6 +54,9 @@ KEYCODEMAP_GEN =3D $(SRC_PATH)/ui/keycodemapdb/tools/keym= ap-gen KEYCODEMAP_CSV =3D $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv =20 KEYCODEMAP_FILES =3D \ + ui/input-keymap-linux-to-qcode.c \ + ui/input-keymap-qcode-to-qnum.c \ + ui/input-keymap-qnum-to-qcode.c \ $(NULL) =20 GENERATED_FILES +=3D $(KEYCODEMAP_FILES) diff --git a/ui/input-keymap.c b/ui/input-keymap.c index cf979c2ce9..3a19a169f5 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -5,333 +5,37 @@ =20 #include "standard-headers/linux/input.h" =20 -static int linux_to_qcode[KEY_CNT] =3D { - [KEY_ESC] =3D Q_KEY_CODE_ESC, - [KEY_1] =3D Q_KEY_CODE_1, - [KEY_2] =3D Q_KEY_CODE_2, - [KEY_3] =3D Q_KEY_CODE_3, - [KEY_4] =3D Q_KEY_CODE_4, - [KEY_5] =3D Q_KEY_CODE_5, - [KEY_6] =3D Q_KEY_CODE_6, - [KEY_7] =3D Q_KEY_CODE_7, - [KEY_8] =3D Q_KEY_CODE_8, - [KEY_9] =3D Q_KEY_CODE_9, - [KEY_0] =3D Q_KEY_CODE_0, - [KEY_MINUS] =3D Q_KEY_CODE_MINUS, - [KEY_EQUAL] =3D Q_KEY_CODE_EQUAL, - [KEY_BACKSPACE] =3D Q_KEY_CODE_BACKSPACE, - [KEY_TAB] =3D Q_KEY_CODE_TAB, - [KEY_Q] =3D Q_KEY_CODE_Q, - [KEY_W] =3D Q_KEY_CODE_W, - [KEY_E] =3D Q_KEY_CODE_E, - [KEY_R] =3D Q_KEY_CODE_R, - [KEY_T] =3D Q_KEY_CODE_T, - [KEY_Y] =3D Q_KEY_CODE_Y, - [KEY_U] =3D Q_KEY_CODE_U, - [KEY_I] =3D Q_KEY_CODE_I, - [KEY_O] =3D Q_KEY_CODE_O, - [KEY_P] =3D Q_KEY_CODE_P, - [KEY_LEFTBRACE] =3D Q_KEY_CODE_BRACKET_LEFT, - [KEY_RIGHTBRACE] =3D Q_KEY_CODE_BRACKET_RIGHT, - [KEY_ENTER] =3D Q_KEY_CODE_RET, - [KEY_LEFTCTRL] =3D Q_KEY_CODE_CTRL, - [KEY_A] =3D Q_KEY_CODE_A, - [KEY_S] =3D Q_KEY_CODE_S, - [KEY_D] =3D Q_KEY_CODE_D, - [KEY_F] =3D Q_KEY_CODE_F, - [KEY_G] =3D Q_KEY_CODE_G, - [KEY_H] =3D Q_KEY_CODE_H, - [KEY_J] =3D Q_KEY_CODE_J, - [KEY_K] =3D Q_KEY_CODE_K, - [KEY_L] =3D Q_KEY_CODE_L, - [KEY_SEMICOLON] =3D Q_KEY_CODE_SEMICOLON, - [KEY_APOSTROPHE] =3D Q_KEY_CODE_APOSTROPHE, - [KEY_GRAVE] =3D Q_KEY_CODE_GRAVE_ACCENT, - [KEY_LEFTSHIFT] =3D Q_KEY_CODE_SHIFT, - [KEY_BACKSLASH] =3D Q_KEY_CODE_BACKSLASH, - [KEY_102ND] =3D Q_KEY_CODE_LESS, - [KEY_Z] =3D Q_KEY_CODE_Z, - [KEY_X] =3D Q_KEY_CODE_X, - [KEY_C] =3D Q_KEY_CODE_C, - [KEY_V] =3D Q_KEY_CODE_V, - [KEY_B] =3D Q_KEY_CODE_B, - [KEY_N] =3D Q_KEY_CODE_N, - [KEY_M] =3D Q_KEY_CODE_M, - [KEY_COMMA] =3D Q_KEY_CODE_COMMA, - [KEY_DOT] =3D Q_KEY_CODE_DOT, - [KEY_SLASH] =3D Q_KEY_CODE_SLASH, - [KEY_RIGHTSHIFT] =3D Q_KEY_CODE_SHIFT_R, - [KEY_LEFTALT] =3D Q_KEY_CODE_ALT, - [KEY_SPACE] =3D Q_KEY_CODE_SPC, - [KEY_CAPSLOCK] =3D Q_KEY_CODE_CAPS_LOCK, - [KEY_F1] =3D Q_KEY_CODE_F1, - [KEY_F2] =3D Q_KEY_CODE_F2, - [KEY_F3] =3D Q_KEY_CODE_F3, - [KEY_F4] =3D Q_KEY_CODE_F4, - [KEY_F5] =3D Q_KEY_CODE_F5, - [KEY_F6] =3D Q_KEY_CODE_F6, - [KEY_F7] =3D Q_KEY_CODE_F7, - [KEY_F8] =3D Q_KEY_CODE_F8, - [KEY_F9] =3D Q_KEY_CODE_F9, - [KEY_F10] =3D Q_KEY_CODE_F10, - [KEY_NUMLOCK] =3D Q_KEY_CODE_NUM_LOCK, - [KEY_SCROLLLOCK] =3D Q_KEY_CODE_SCROLL_LOCK, - [KEY_KP0] =3D Q_KEY_CODE_KP_0, - [KEY_KP1] =3D Q_KEY_CODE_KP_1, - [KEY_KP2] =3D Q_KEY_CODE_KP_2, - [KEY_KP3] =3D Q_KEY_CODE_KP_3, - [KEY_KP4] =3D Q_KEY_CODE_KP_4, - [KEY_KP5] =3D Q_KEY_CODE_KP_5, - [KEY_KP6] =3D Q_KEY_CODE_KP_6, - [KEY_KP7] =3D Q_KEY_CODE_KP_7, - [KEY_KP8] =3D Q_KEY_CODE_KP_8, - [KEY_KP9] =3D Q_KEY_CODE_KP_9, - [KEY_KPMINUS] =3D Q_KEY_CODE_KP_SUBTRACT, - [KEY_KPPLUS] =3D Q_KEY_CODE_KP_ADD, - [KEY_KPDOT] =3D Q_KEY_CODE_KP_DECIMAL, - [KEY_KPENTER] =3D Q_KEY_CODE_KP_ENTER, - [KEY_KPSLASH] =3D Q_KEY_CODE_KP_DIVIDE, - [KEY_KPASTERISK] =3D Q_KEY_CODE_KP_MULTIPLY, - [KEY_F11] =3D Q_KEY_CODE_F11, - [KEY_F12] =3D Q_KEY_CODE_F12, - [KEY_RO] =3D Q_KEY_CODE_RO, - [KEY_HIRAGANA] =3D Q_KEY_CODE_HIRAGANA, - [KEY_HENKAN] =3D Q_KEY_CODE_HENKAN, - [KEY_RIGHTCTRL] =3D Q_KEY_CODE_CTRL_R, - [KEY_SYSRQ] =3D Q_KEY_CODE_SYSRQ, - [KEY_RIGHTALT] =3D Q_KEY_CODE_ALT_R, - [KEY_HOME] =3D Q_KEY_CODE_HOME, - [KEY_UP] =3D Q_KEY_CODE_UP, - [KEY_PAGEUP] =3D Q_KEY_CODE_PGUP, - [KEY_LEFT] =3D Q_KEY_CODE_LEFT, - [KEY_RIGHT] =3D Q_KEY_CODE_RIGHT, - [KEY_END] =3D Q_KEY_CODE_END, - [KEY_DOWN] =3D Q_KEY_CODE_DOWN, - [KEY_PAGEDOWN] =3D Q_KEY_CODE_PGDN, - [KEY_INSERT] =3D Q_KEY_CODE_INSERT, - [KEY_DELETE] =3D Q_KEY_CODE_DELETE, - [KEY_POWER] =3D Q_KEY_CODE_POWER, - [KEY_KPCOMMA] =3D Q_KEY_CODE_KP_COMMA, - [KEY_YEN] =3D Q_KEY_CODE_YEN, - [KEY_LEFTMETA] =3D Q_KEY_CODE_META_L, - [KEY_RIGHTMETA] =3D Q_KEY_CODE_META_R, - [KEY_MENU] =3D Q_KEY_CODE_MENU, - [KEY_PAUSE] =3D Q_KEY_CODE_PAUSE, - - [KEY_SLEEP] =3D Q_KEY_CODE_SLEEP, - [KEY_WAKEUP] =3D Q_KEY_CODE_WAKE, - [KEY_CALC] =3D Q_KEY_CODE_CALCULATOR, - [KEY_MAIL] =3D Q_KEY_CODE_MAIL, - [KEY_COMPUTER] =3D Q_KEY_CODE_COMPUTER, - - [KEY_STOP] =3D Q_KEY_CODE_STOP, - [KEY_BOOKMARKS] =3D Q_KEY_CODE_AC_BOOKMARKS, - [KEY_BACK] =3D Q_KEY_CODE_AC_BACK, - [KEY_FORWARD] =3D Q_KEY_CODE_AC_FORWARD, - [KEY_HOMEPAGE] =3D Q_KEY_CODE_AC_HOME, - [KEY_REFRESH] =3D Q_KEY_CODE_AC_REFRESH, - [KEY_FIND] =3D Q_KEY_CODE_FIND, - - [KEY_NEXTSONG] =3D Q_KEY_CODE_AUDIONEXT, - [KEY_PREVIOUSSONG] =3D Q_KEY_CODE_AUDIOPREV, - [KEY_STOPCD] =3D Q_KEY_CODE_AUDIOSTOP, - [KEY_PLAYCD] =3D Q_KEY_CODE_AUDIOPLAY, - [KEY_MUTE] =3D Q_KEY_CODE_AUDIOMUTE, - [KEY_VOLUMEDOWN] =3D Q_KEY_CODE_VOLUMEDOWN, - [KEY_VOLUMEUP] =3D Q_KEY_CODE_VOLUMEUP, -}; - -static const int qcode_to_number[] =3D { - [Q_KEY_CODE_SHIFT] =3D 0x2a, - [Q_KEY_CODE_SHIFT_R] =3D 0x36, - - [Q_KEY_CODE_ALT] =3D 0x38, - [Q_KEY_CODE_ALT_R] =3D 0xb8, - [Q_KEY_CODE_CTRL] =3D 0x1d, - [Q_KEY_CODE_CTRL_R] =3D 0x9d, - - [Q_KEY_CODE_META_L] =3D 0xdb, - [Q_KEY_CODE_META_R] =3D 0xdc, - [Q_KEY_CODE_MENU] =3D 0xdd, - - [Q_KEY_CODE_ESC] =3D 0x01, - - [Q_KEY_CODE_1] =3D 0x02, - [Q_KEY_CODE_2] =3D 0x03, - [Q_KEY_CODE_3] =3D 0x04, - [Q_KEY_CODE_4] =3D 0x05, - [Q_KEY_CODE_5] =3D 0x06, - [Q_KEY_CODE_6] =3D 0x07, - [Q_KEY_CODE_7] =3D 0x08, - [Q_KEY_CODE_8] =3D 0x09, - [Q_KEY_CODE_9] =3D 0x0a, - [Q_KEY_CODE_0] =3D 0x0b, - [Q_KEY_CODE_MINUS] =3D 0x0c, - [Q_KEY_CODE_EQUAL] =3D 0x0d, - [Q_KEY_CODE_BACKSPACE] =3D 0x0e, - - [Q_KEY_CODE_TAB] =3D 0x0f, - [Q_KEY_CODE_Q] =3D 0x10, - [Q_KEY_CODE_W] =3D 0x11, - [Q_KEY_CODE_E] =3D 0x12, - [Q_KEY_CODE_R] =3D 0x13, - [Q_KEY_CODE_T] =3D 0x14, - [Q_KEY_CODE_Y] =3D 0x15, - [Q_KEY_CODE_U] =3D 0x16, - [Q_KEY_CODE_I] =3D 0x17, - [Q_KEY_CODE_O] =3D 0x18, - [Q_KEY_CODE_P] =3D 0x19, - [Q_KEY_CODE_BRACKET_LEFT] =3D 0x1a, - [Q_KEY_CODE_BRACKET_RIGHT] =3D 0x1b, - [Q_KEY_CODE_RET] =3D 0x1c, - - [Q_KEY_CODE_A] =3D 0x1e, - [Q_KEY_CODE_S] =3D 0x1f, - [Q_KEY_CODE_D] =3D 0x20, - [Q_KEY_CODE_F] =3D 0x21, - [Q_KEY_CODE_G] =3D 0x22, - [Q_KEY_CODE_H] =3D 0x23, - [Q_KEY_CODE_J] =3D 0x24, - [Q_KEY_CODE_K] =3D 0x25, - [Q_KEY_CODE_L] =3D 0x26, - [Q_KEY_CODE_SEMICOLON] =3D 0x27, - [Q_KEY_CODE_APOSTROPHE] =3D 0x28, - [Q_KEY_CODE_GRAVE_ACCENT] =3D 0x29, - - [Q_KEY_CODE_BACKSLASH] =3D 0x2b, - [Q_KEY_CODE_Z] =3D 0x2c, - [Q_KEY_CODE_X] =3D 0x2d, - [Q_KEY_CODE_C] =3D 0x2e, - [Q_KEY_CODE_V] =3D 0x2f, - [Q_KEY_CODE_B] =3D 0x30, - [Q_KEY_CODE_N] =3D 0x31, - [Q_KEY_CODE_M] =3D 0x32, - [Q_KEY_CODE_COMMA] =3D 0x33, - [Q_KEY_CODE_DOT] =3D 0x34, - [Q_KEY_CODE_SLASH] =3D 0x35, - - [Q_KEY_CODE_ASTERISK] =3D 0x37, - - [Q_KEY_CODE_SPC] =3D 0x39, - [Q_KEY_CODE_CAPS_LOCK] =3D 0x3a, - [Q_KEY_CODE_F1] =3D 0x3b, - [Q_KEY_CODE_F2] =3D 0x3c, - [Q_KEY_CODE_F3] =3D 0x3d, - [Q_KEY_CODE_F4] =3D 0x3e, - [Q_KEY_CODE_F5] =3D 0x3f, - [Q_KEY_CODE_F6] =3D 0x40, - [Q_KEY_CODE_F7] =3D 0x41, - [Q_KEY_CODE_F8] =3D 0x42, - [Q_KEY_CODE_F9] =3D 0x43, - [Q_KEY_CODE_F10] =3D 0x44, - [Q_KEY_CODE_NUM_LOCK] =3D 0x45, - [Q_KEY_CODE_SCROLL_LOCK] =3D 0x46, - - [Q_KEY_CODE_KP_DIVIDE] =3D 0xb5, - [Q_KEY_CODE_KP_MULTIPLY] =3D 0x37, - [Q_KEY_CODE_KP_SUBTRACT] =3D 0x4a, - [Q_KEY_CODE_KP_ADD] =3D 0x4e, - [Q_KEY_CODE_KP_ENTER] =3D 0x9c, - [Q_KEY_CODE_KP_DECIMAL] =3D 0x53, - [Q_KEY_CODE_SYSRQ] =3D 0x54, - [Q_KEY_CODE_PAUSE] =3D 0xc6, - - [Q_KEY_CODE_KP_0] =3D 0x52, - [Q_KEY_CODE_KP_1] =3D 0x4f, - [Q_KEY_CODE_KP_2] =3D 0x50, - [Q_KEY_CODE_KP_3] =3D 0x51, - [Q_KEY_CODE_KP_4] =3D 0x4b, - [Q_KEY_CODE_KP_5] =3D 0x4c, - [Q_KEY_CODE_KP_6] =3D 0x4d, - [Q_KEY_CODE_KP_7] =3D 0x47, - [Q_KEY_CODE_KP_8] =3D 0x48, - [Q_KEY_CODE_KP_9] =3D 0x49, - - [Q_KEY_CODE_LESS] =3D 0x56, - - [Q_KEY_CODE_F11] =3D 0x57, - [Q_KEY_CODE_F12] =3D 0x58, - - [Q_KEY_CODE_PRINT] =3D 0xb7, - - [Q_KEY_CODE_HOME] =3D 0xc7, - [Q_KEY_CODE_PGUP] =3D 0xc9, - [Q_KEY_CODE_PGDN] =3D 0xd1, - [Q_KEY_CODE_END] =3D 0xcf, - - [Q_KEY_CODE_LEFT] =3D 0xcb, - [Q_KEY_CODE_UP] =3D 0xc8, - [Q_KEY_CODE_DOWN] =3D 0xd0, - [Q_KEY_CODE_RIGHT] =3D 0xcd, - - [Q_KEY_CODE_INSERT] =3D 0xd2, - [Q_KEY_CODE_DELETE] =3D 0xd3, - - [Q_KEY_CODE_RO] =3D 0x73, - [Q_KEY_CODE_HIRAGANA] =3D 0x70, - [Q_KEY_CODE_HENKAN] =3D 0x79, - [Q_KEY_CODE_POWER] =3D 0xde, - [Q_KEY_CODE_YEN] =3D 0x7d, - [Q_KEY_CODE_KP_COMMA] =3D 0x7e, - - [Q_KEY_CODE_SLEEP] =3D 0xdf, - [Q_KEY_CODE_WAKE] =3D 0xe3, - [Q_KEY_CODE_CALCULATOR] =3D 0xa1, - [Q_KEY_CODE_MAIL] =3D 0xec, - [Q_KEY_CODE_COMPUTER] =3D 0xeb, - - [Q_KEY_CODE_STOP] =3D 0xe8, - [Q_KEY_CODE_AC_BOOKMARKS] =3D 0xe6, - [Q_KEY_CODE_AC_BACK] =3D 0xea, - [Q_KEY_CODE_AC_FORWARD] =3D 0xe9, - [Q_KEY_CODE_AC_HOME] =3D 0xb2, - [Q_KEY_CODE_AC_REFRESH] =3D 0xe7, - [Q_KEY_CODE_FIND] =3D 0xe5, - - [Q_KEY_CODE_AUDIONEXT] =3D 0x99, - [Q_KEY_CODE_AUDIOPREV] =3D 0x90, - [Q_KEY_CODE_AUDIOSTOP] =3D 0xa4, - [Q_KEY_CODE_AUDIOPLAY] =3D 0xa2, - [Q_KEY_CODE_AUDIOMUTE] =3D 0xa0, - [Q_KEY_CODE_VOLUMEDOWN] =3D 0xae, - [Q_KEY_CODE_VOLUMEUP] =3D 0xb0, - - [Q_KEY_CODE__MAX] =3D 0, -}; - -static int number_to_qcode[0x100]; +#include "ui/input-keymap-linux-to-qcode.c" +#include "ui/input-keymap-qcode-to-qnum.c" +#include "ui/input-keymap-qnum-to-qcode.c" =20 int qemu_input_linux_to_qcode(unsigned int lnx) { - assert(lnx < KEY_CNT); - return linux_to_qcode[lnx]; + if (lnx >=3D qemu_input_map_linux_to_qcode_len) { + return 0; + } + return qemu_input_map_linux_to_qcode[lnx]; } =20 int qemu_input_key_value_to_number(const KeyValue *value) { if (value->type =3D=3D KEY_VALUE_KIND_QCODE) { - return qcode_to_number[value->u.qcode.data]; + if (value->u.qcode.data >=3D qemu_input_map_qcode_to_qnum_len) { + return 0; + } + return qemu_input_map_qcode_to_qnum[value->u.qcode.data]; } else { assert(value->type =3D=3D KEY_VALUE_KIND_NUMBER); return value->u.number.data; } } =20 -int qemu_input_key_number_to_qcode(uint8_t nr) +int qemu_input_key_number_to_qcode(unsigned int nr) { - static int first =3D true; - - if (first) { - int qcode, number; - first =3D false; - for (qcode =3D 0; qcode < Q_KEY_CODE__MAX; qcode++) { - number =3D qcode_to_number[qcode]; - assert(number < ARRAY_SIZE(number_to_qcode)); - number_to_qcode[number] =3D qcode; - } + if (nr >=3D qemu_input_map_qnum_to_qcode_len) { + return 0; } - - return number_to_qcode[nr]; + return qemu_input_map_qnum_to_qcode[nr]; } =20 int qemu_input_key_value_to_qcode(const KeyValue *value) --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150279005882338.57874149501106; Tue, 15 Aug 2017 02:40:58 -0700 (PDT) Received: from localhost ([::1]:48720 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYLJ-00068K-EP for importer@patchew.org; Tue, 15 Aug 2017 05:40:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43976) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYGx-0002Oc-KS for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYGw-0000pX-PE for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:57712) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYGw-0000p9-JU for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:26 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 921317EBD3 for ; Tue, 15 Aug 2017 09:36:25 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id 76C7161341; Tue, 15 Aug 2017 09:36:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 921317EBD3 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:06 +0100 Message-Id: <20170815093615.16453-4-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 15 Aug 2017 09:36:25 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 03/12] ui: convert key events to QKeyCodes immediately X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Always use QKeyCode in the InputKeyEvent struct, by converting key numbers to QKeyCode at the time the event is created. Signed-off-by: Daniel P. Berrange --- ui/input.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ui/input.c b/ui/input.c index af05f06368..64e9103a61 100644 --- a/ui/input.c +++ b/ui/input.c @@ -400,10 +400,8 @@ void qemu_input_event_send_key(QemuConsole *src, KeyVa= lue *key, bool down) =20 void qemu_input_event_send_key_number(QemuConsole *src, int num, bool down) { - KeyValue *key =3D g_new0(KeyValue, 1); - key->type =3D KEY_VALUE_KIND_NUMBER; - key->u.number.data =3D num; - qemu_input_event_send_key(src, key, down); + QKeyCode code =3D qemu_input_key_number_to_qcode(num); + qemu_input_event_send_key_qcode(src, code, down); } =20 void qemu_input_event_send_key_qcode(QemuConsole *src, QKeyCode q, bool do= wn) --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502790054163814.3133122491936; Tue, 15 Aug 2017 02:40:54 -0700 (PDT) Received: from localhost ([::1]:48719 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYLF-00064p-0l for importer@patchew.org; Tue, 15 Aug 2017 05:40:53 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44010) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYH2-0002Sa-07 for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYGy-0000qc-3O for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:32 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59942) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYGx-0000q0-T9 for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:28 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CB71E68829 for ; Tue, 15 Aug 2017 09:36:26 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id D5CB460657; Tue, 15 Aug 2017 09:36:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CB71E68829 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:07 +0100 Message-Id: <20170815093615.16453-5-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 15 Aug 2017 09:36:27 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 04/12] ui: don't export qemu_input_event_new_key X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" All public code should use qemu_input_event_send_key* functions instead of creating an event directly. Signed-off-by: Daniel P. Berrange --- include/ui/input.h | 1 - ui/input.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/include/ui/input.h b/include/ui/input.h index 479cc46cfc..f8cee43f65 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -38,7 +38,6 @@ void qemu_input_event_send_impl(QemuConsole *src, InputEv= ent *evt); void qemu_input_event_sync(void); void qemu_input_event_sync_impl(void); =20 -InputEvent *qemu_input_event_new_key(KeyValue *key, bool down); void qemu_input_event_send_key(QemuConsole *src, KeyValue *key, bool down); void qemu_input_event_send_key_number(QemuConsole *src, int num, bool down= ); void qemu_input_event_send_key_qcode(QemuConsole *src, QKeyCode q, bool do= wn); diff --git a/ui/input.c b/ui/input.c index 64e9103a61..ba85bf01a9 100644 --- a/ui/input.c +++ b/ui/input.c @@ -374,7 +374,7 @@ void qemu_input_event_sync(void) replay_input_sync_event(); } =20 -InputEvent *qemu_input_event_new_key(KeyValue *key, bool down) +static InputEvent *qemu_input_event_new_key(KeyValue *key, bool down) { InputEvent *evt =3D g_new0(InputEvent, 1); evt->u.key.data =3D g_new0(InputKeyEvent, 1); --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502790075366641.2474247370759; Tue, 15 Aug 2017 02:41:15 -0700 (PDT) Received: from localhost ([::1]:48721 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYLa-0006Lg-4L for importer@patchew.org; Tue, 15 Aug 2017 05:41:14 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44013) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYH2-0002Si-1g for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYGz-0000rM-Ap for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:32 -0400 Received: from mx1.redhat.com ([209.132.183.28]:39826) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYGz-0000qu-1S for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:29 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0FC9DC003401 for ; Tue, 15 Aug 2017 09:36:28 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1ECA361341; Tue, 15 Aug 2017 09:36:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0FC9DC003401 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:08 +0100 Message-Id: <20170815093615.16453-6-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 15 Aug 2017 09:36:28 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 05/12] input: convert virtio-input-hid device to keycodemapdb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Replace the keymap_qcode table with automatically generated tables. Missing entries in keymap_qcode now fixed: Q_KEY_CODE_ASTERISK -> KEY_KPASTERISK Q_KEY_CODE_KP_MULTIPLY -> KEY_KPASTERISK Q_KEY_CODE_STOP -> KEY_STOP Q_KEY_CODE_AGAIN -> KEY_AGAIN Q_KEY_CODE_PROPS -> KEY_PROPS Q_KEY_CODE_UNDO -> KEY_UNDO Q_KEY_CODE_FRONT -> KEY_FRONT Q_KEY_CODE_COPY -> KEY_COPY Q_KEY_CODE_OPEN -> KEY_OPEN Q_KEY_CODE_PASTE -> KEY_PASTE Q_KEY_CODE_FIND -> KEY_FIND Q_KEY_CODE_CUT -> KEY_CUT Q_KEY_CODE_LF -> KEY_LINEFEED Q_KEY_CODE_HELP -> KEY_HELP Q_KEY_CODE_COMPOSE -> KEY_COMPOSE Q_KEY_CODE_RO -> KEY_RO Q_KEY_CODE_HIRAGANA -> KEY_HIRAGANA Q_KEY_CODE_HENKAN -> KEY_HENKAN Q_KEY_CODE_YEN -> KEY_YEN Q_KEY_CODE_KP_COMMA -> KEY_KPCOMMA Q_KEY_CODE_KP_EQUALS -> KEY_KPEQUAL Q_KEY_CODE_POWER -> KEY_POWER Q_KEY_CODE_SLEEP -> KEY_SLEEP Q_KEY_CODE_WAKE -> KEY_WAKEUP Q_KEY_CODE_AUDIONEXT -> KEY_NEXTSONG Q_KEY_CODE_AUDIOPREV -> KEY_PREVIOUSSONG Q_KEY_CODE_AUDIOSTOP -> KEY_STOPCD Q_KEY_CODE_AUDIOPLAY -> KEY_PLAYPAUSE Q_KEY_CODE_AUDIOMUTE -> KEY_MUTE Q_KEY_CODE_VOLUMEUP -> KEY_VOLUMEUP Q_KEY_CODE_VOLUMEDOWN -> KEY_VOLUMEDOWN Q_KEY_CODE_MEDIASELECT -> KEY_MEDIA Q_KEY_CODE_MAIL -> KEY_MAIL Q_KEY_CODE_CALCULATOR -> KEY_CALC Q_KEY_CODE_COMPUTER -> KEY_COMPUTER Q_KEY_CODE_AC_HOME -> KEY_HOMEPAGE Q_KEY_CODE_AC_BACK -> KEY_BACK Q_KEY_CODE_AC_FORWARD -> KEY_FORWARD Q_KEY_CODE_AC_REFRESH -> KEY_REFRESH Q_KEY_CODE_AC_BOOKMARKS -> KEY_BOOKMARKS Signed-off-by: Daniel P. Berrange --- hw/input/virtio-input-hid.c | 136 +++-------------------------------------= ---- include/ui/input.h | 3 + ui/Makefile.objs | 1 + ui/input-keymap.c | 1 + 4 files changed, 14 insertions(+), 127 deletions(-) diff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c index 46c038110c..3e5a2051ed 100644 --- a/hw/input/virtio-input-hid.c +++ b/hw/input/virtio-input-hid.c @@ -22,126 +22,7 @@ =20 /* ----------------------------------------------------------------- */ =20 -static const unsigned int keymap_qcode[Q_KEY_CODE__MAX] =3D { - [Q_KEY_CODE_ESC] =3D KEY_ESC, - [Q_KEY_CODE_1] =3D KEY_1, - [Q_KEY_CODE_2] =3D KEY_2, - [Q_KEY_CODE_3] =3D KEY_3, - [Q_KEY_CODE_4] =3D KEY_4, - [Q_KEY_CODE_5] =3D KEY_5, - [Q_KEY_CODE_6] =3D KEY_6, - [Q_KEY_CODE_7] =3D KEY_7, - [Q_KEY_CODE_8] =3D KEY_8, - [Q_KEY_CODE_9] =3D KEY_9, - [Q_KEY_CODE_0] =3D KEY_0, - [Q_KEY_CODE_MINUS] =3D KEY_MINUS, - [Q_KEY_CODE_EQUAL] =3D KEY_EQUAL, - [Q_KEY_CODE_BACKSPACE] =3D KEY_BACKSPACE, - - [Q_KEY_CODE_TAB] =3D KEY_TAB, - [Q_KEY_CODE_Q] =3D KEY_Q, - [Q_KEY_CODE_W] =3D KEY_W, - [Q_KEY_CODE_E] =3D KEY_E, - [Q_KEY_CODE_R] =3D KEY_R, - [Q_KEY_CODE_T] =3D KEY_T, - [Q_KEY_CODE_Y] =3D KEY_Y, - [Q_KEY_CODE_U] =3D KEY_U, - [Q_KEY_CODE_I] =3D KEY_I, - [Q_KEY_CODE_O] =3D KEY_O, - [Q_KEY_CODE_P] =3D KEY_P, - [Q_KEY_CODE_BRACKET_LEFT] =3D KEY_LEFTBRACE, - [Q_KEY_CODE_BRACKET_RIGHT] =3D KEY_RIGHTBRACE, - [Q_KEY_CODE_RET] =3D KEY_ENTER, - - [Q_KEY_CODE_CTRL] =3D KEY_LEFTCTRL, - [Q_KEY_CODE_A] =3D KEY_A, - [Q_KEY_CODE_S] =3D KEY_S, - [Q_KEY_CODE_D] =3D KEY_D, - [Q_KEY_CODE_F] =3D KEY_F, - [Q_KEY_CODE_G] =3D KEY_G, - [Q_KEY_CODE_H] =3D KEY_H, - [Q_KEY_CODE_J] =3D KEY_J, - [Q_KEY_CODE_K] =3D KEY_K, - [Q_KEY_CODE_L] =3D KEY_L, - [Q_KEY_CODE_SEMICOLON] =3D KEY_SEMICOLON, - [Q_KEY_CODE_APOSTROPHE] =3D KEY_APOSTROPHE, - [Q_KEY_CODE_GRAVE_ACCENT] =3D KEY_GRAVE, - - [Q_KEY_CODE_SHIFT] =3D KEY_LEFTSHIFT, - [Q_KEY_CODE_BACKSLASH] =3D KEY_BACKSLASH, - [Q_KEY_CODE_LESS] =3D KEY_102ND, - [Q_KEY_CODE_Z] =3D KEY_Z, - [Q_KEY_CODE_X] =3D KEY_X, - [Q_KEY_CODE_C] =3D KEY_C, - [Q_KEY_CODE_V] =3D KEY_V, - [Q_KEY_CODE_B] =3D KEY_B, - [Q_KEY_CODE_N] =3D KEY_N, - [Q_KEY_CODE_M] =3D KEY_M, - [Q_KEY_CODE_COMMA] =3D KEY_COMMA, - [Q_KEY_CODE_DOT] =3D KEY_DOT, - [Q_KEY_CODE_SLASH] =3D KEY_SLASH, - [Q_KEY_CODE_SHIFT_R] =3D KEY_RIGHTSHIFT, - - [Q_KEY_CODE_ALT] =3D KEY_LEFTALT, - [Q_KEY_CODE_SPC] =3D KEY_SPACE, - [Q_KEY_CODE_CAPS_LOCK] =3D KEY_CAPSLOCK, - - [Q_KEY_CODE_F1] =3D KEY_F1, - [Q_KEY_CODE_F2] =3D KEY_F2, - [Q_KEY_CODE_F3] =3D KEY_F3, - [Q_KEY_CODE_F4] =3D KEY_F4, - [Q_KEY_CODE_F5] =3D KEY_F5, - [Q_KEY_CODE_F6] =3D KEY_F6, - [Q_KEY_CODE_F7] =3D KEY_F7, - [Q_KEY_CODE_F8] =3D KEY_F8, - [Q_KEY_CODE_F9] =3D KEY_F9, - [Q_KEY_CODE_F10] =3D KEY_F10, - [Q_KEY_CODE_NUM_LOCK] =3D KEY_NUMLOCK, - [Q_KEY_CODE_SCROLL_LOCK] =3D KEY_SCROLLLOCK, - - [Q_KEY_CODE_KP_0] =3D KEY_KP0, - [Q_KEY_CODE_KP_1] =3D KEY_KP1, - [Q_KEY_CODE_KP_2] =3D KEY_KP2, - [Q_KEY_CODE_KP_3] =3D KEY_KP3, - [Q_KEY_CODE_KP_4] =3D KEY_KP4, - [Q_KEY_CODE_KP_5] =3D KEY_KP5, - [Q_KEY_CODE_KP_6] =3D KEY_KP6, - [Q_KEY_CODE_KP_7] =3D KEY_KP7, - [Q_KEY_CODE_KP_8] =3D KEY_KP8, - [Q_KEY_CODE_KP_9] =3D KEY_KP9, - [Q_KEY_CODE_KP_SUBTRACT] =3D KEY_KPMINUS, - [Q_KEY_CODE_KP_ADD] =3D KEY_KPPLUS, - [Q_KEY_CODE_KP_DECIMAL] =3D KEY_KPDOT, - [Q_KEY_CODE_KP_ENTER] =3D KEY_KPENTER, - [Q_KEY_CODE_KP_DIVIDE] =3D KEY_KPSLASH, - [Q_KEY_CODE_KP_MULTIPLY] =3D KEY_KPASTERISK, - - [Q_KEY_CODE_F11] =3D KEY_F11, - [Q_KEY_CODE_F12] =3D KEY_F12, - - [Q_KEY_CODE_CTRL_R] =3D KEY_RIGHTCTRL, - [Q_KEY_CODE_SYSRQ] =3D KEY_SYSRQ, - [Q_KEY_CODE_PRINT] =3D KEY_SYSRQ, - [Q_KEY_CODE_PAUSE] =3D KEY_PAUSE, - [Q_KEY_CODE_ALT_R] =3D KEY_RIGHTALT, - - [Q_KEY_CODE_HOME] =3D KEY_HOME, - [Q_KEY_CODE_UP] =3D KEY_UP, - [Q_KEY_CODE_PGUP] =3D KEY_PAGEUP, - [Q_KEY_CODE_LEFT] =3D KEY_LEFT, - [Q_KEY_CODE_RIGHT] =3D KEY_RIGHT, - [Q_KEY_CODE_END] =3D KEY_END, - [Q_KEY_CODE_DOWN] =3D KEY_DOWN, - [Q_KEY_CODE_PGDN] =3D KEY_PAGEDOWN, - [Q_KEY_CODE_INSERT] =3D KEY_INSERT, - [Q_KEY_CODE_DELETE] =3D KEY_DELETE, - - [Q_KEY_CODE_META_L] =3D KEY_LEFTMETA, - [Q_KEY_CODE_META_R] =3D KEY_RIGHTMETA, - [Q_KEY_CODE_MENU] =3D KEY_MENU, -}; - -static const unsigned int keymap_button[INPUT_BUTTON__MAX] =3D { +static const unsigned short keymap_button[INPUT_BUTTON__MAX] =3D { [INPUT_BUTTON_LEFT] =3D BTN_LEFT, [INPUT_BUTTON_RIGHT] =3D BTN_RIGHT, [INPUT_BUTTON_MIDDLE] =3D BTN_MIDDLE, @@ -149,12 +30,12 @@ static const unsigned int keymap_button[INPUT_BUTTON__= MAX] =3D { [INPUT_BUTTON_WHEEL_DOWN] =3D BTN_GEAR_DOWN, }; =20 -static const unsigned int axismap_rel[INPUT_AXIS__MAX] =3D { +static const unsigned short axismap_rel[INPUT_AXIS__MAX] =3D { [INPUT_AXIS_X] =3D REL_X, [INPUT_AXIS_Y] =3D REL_Y, }; =20 -static const unsigned int axismap_abs[INPUT_AXIS__MAX] =3D { +static const unsigned short axismap_abs[INPUT_AXIS__MAX] =3D { [INPUT_AXIS_X] =3D ABS_X, [INPUT_AXIS_Y] =3D ABS_Y, }; @@ -162,7 +43,7 @@ static const unsigned int axismap_abs[INPUT_AXIS__MAX] = =3D { /* ----------------------------------------------------------------- */ =20 static void virtio_input_key_config(VirtIOInput *vinput, - const unsigned int *keymap, + const unsigned short *keymap, size_t mapsize) { virtio_input_config keys; @@ -201,9 +82,10 @@ static void virtio_input_handle_event(DeviceState *dev,= QemuConsole *src, case INPUT_EVENT_KIND_KEY: key =3D evt->u.key.data; qcode =3D qemu_input_key_value_to_qcode(key->key); - if (qcode && keymap_qcode[qcode]) { + if (qcode < qemu_input_map_qcode_to_linux_len && + qemu_input_map_qcode_to_linux[qcode]) { event.type =3D cpu_to_le16(EV_KEY); - event.code =3D cpu_to_le16(keymap_qcode[qcode]); + event.code =3D cpu_to_le16(qemu_input_map_qcode_to_linux[qcod= e]); event.value =3D cpu_to_le32(key->down ? 1 : 0); virtio_input_send(vinput, &event); } else { @@ -387,8 +269,8 @@ static void virtio_keyboard_init(Object *obj) =20 vhid->handler =3D &virtio_keyboard_handler; virtio_input_init_config(vinput, virtio_keyboard_config); - virtio_input_key_config(vinput, keymap_qcode, - ARRAY_SIZE(keymap_qcode)); + virtio_input_key_config(vinput, qemu_input_map_qcode_to_linux, + qemu_input_map_qcode_to_linux_len); } =20 static const TypeInfo virtio_keyboard_info =3D { diff --git a/include/ui/input.h b/include/ui/input.h index f8cee43f65..6f56d868c7 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -71,6 +71,9 @@ void qemu_remove_mouse_mode_change_notifier(Notifier *not= ify); extern const guint qemu_input_map_linux_to_qcode_len; extern const guint16 qemu_input_map_linux_to_qcode[]; =20 +extern const guint qemu_input_map_qcode_to_linux_len; +extern const guint16 qemu_input_map_qcode_to_linux[]; + extern const guint qemu_input_map_qcode_to_qnum_len; extern const guint16 qemu_input_map_qcode_to_qnum[]; =20 diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 8c357b488f..11915a9bb4 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -55,6 +55,7 @@ KEYCODEMAP_CSV =3D $(SRC_PATH)/ui/keycodemapdb/data/keyma= ps.csv =20 KEYCODEMAP_FILES =3D \ ui/input-keymap-linux-to-qcode.c \ + ui/input-keymap-qcode-to-linux.c \ ui/input-keymap-qcode-to-qnum.c \ ui/input-keymap-qnum-to-qcode.c \ $(NULL) diff --git a/ui/input-keymap.c b/ui/input-keymap.c index 3a19a169f5..6e543d651f 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -6,6 +6,7 @@ #include "standard-headers/linux/input.h" =20 #include "ui/input-keymap-linux-to-qcode.c" +#include "ui/input-keymap-qcode-to-linux.c" #include "ui/input-keymap-qcode-to-qnum.c" #include "ui/input-keymap-qnum-to-qcode.c" =20 --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502789912744602.6954054713633; Tue, 15 Aug 2017 02:38:32 -0700 (PDT) Received: from localhost ([::1]:48703 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYIx-0003nW-GS for importer@patchew.org; Tue, 15 Aug 2017 05:38:31 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44030) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYH3-0002UA-Bc for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYH0-0000sE-RI for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58646) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYH0-0000rj-Hr for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:30 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8B2407975A for ; Tue, 15 Aug 2017 09:36:29 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id 517A460657; Tue, 15 Aug 2017 09:36:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8B2407975A Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:09 +0100 Message-Id: <20170815093615.16453-7-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 15 Aug 2017 09:36:29 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 06/12] input: convert ps2 device to keycodemapdb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Replace the qcode_to_keycode_set1, qcode_to_keycode_set2, and qcode_to_keycode_set3 tables with automatically generated tables. Missing entries in qcode_to_keycode_set1 now fixed: - Q_KEY_CODE_SYSRQ -> 0x54 - Q_KEY_CODE_PRINT -> 0x54 (NB ignored due to special case) - Q_KEY_CODE_AGAIN -> 0xe005 - Q_KEY_CODE_PROPS -> 0xe006 - Q_KEY_CODE_UNDO -> 0xe007 - Q_KEY_CODE_FRONT -> 0xe00c - Q_KEY_CODE_COPY -> 0xe078 - Q_KEY_CODE_OPEN -> 0x64 - Q_KEY_CODE_PASTE -> 0x65 - Q_KEY_CODE_CUT -> 0xe03c - Q_KEY_CODE_LF -> 0x5b - Q_KEY_CODE_HELP -> 0xe075 - Q_KEY_CODE_COMPOSE -> 0xe05d - Q_KEY_CODE_PAUSE -> 0xe046 - Q_KEY_CODE_KP_EQUALS -> 0x59 And some mistakes corrected: - Q_KEY_CODE_HIRAGANA was mapped to 0x70 (Katakanahiragana) instead of of 0x77 (Hirigana) - Q_KEY_CODE_MENU was incorrectly mapped to the compose scancode (0xe05d) and is now mapped to 0xe01e - Q_KEY_CODE_FIND was mapped to 0xe065 (Search) instead of to 0xe041 (Find) - Q_KEY_CODE_POWER, SLEEP & WAKE had 0x0e instead of 0xe0 as the prefix Missing entries in qcode_to_keycode_set2 now fixed: - Q_KEY_CODE_PRINT -> 0x7f (NB ignored due to special case) - Q_KEY_CODE_COMPOSE -> 0xe02f - Q_KEY_CODE_PAUSE -> 0xe077 - Q_KEY_CODE_KP_EQUALS -> 0x0f And some mistakes corrected: - Q_KEY_CODE_HIRAGANA was mapped to 0x13 (Katakanahiragana) instead of of 0x62 (Hirigana) - Q_KEY_CODE_MENU was incorrectly mapped to the compose scancode (0xe02f) and is now not mapped - Q_KEY_CODE_FIND was mapped to 0xe010 (Search) and is now not mapped. - Q_KEY_CODE_POWER, SLEEP & WAKE had 0x0e instead of 0xe0 as the prefix Missing entries in qcode_to_keycode_set3 now fixed: - Q_KEY_CODE_ASTERISK -> 0x7e - Q_KEY_CODE_SYSRQ -> 0x57 - Q_KEY_CODE_LESS -> 0x13 - Q_KEY_CODE_STOP -> 0x0a - Q_KEY_CODE_AGAIN -> 0x0b - Q_KEY_CODE_PROPS -> 0x0c - Q_KEY_CODE_UNDO -> 0x10 - Q_KEY_CODE_COPY -> 0x18 - Q_KEY_CODE_OPEN -> 0x20 - Q_KEY_CODE_PASTE -> 0x28 - Q_KEY_CODE_FIND -> 0x30 - Q_KEY_CODE_CUT -> 0x38 - Q_KEY_CODE_HELP -> 0x09 - Q_KEY_CODE_COMPOSE -> 0x8d - Q_KEY_CODE_AUDIONEXT -> 0x93 - Q_KEY_CODE_AUDIOPREV -> 0x94 - Q_KEY_CODE_AUDIOSTOP -> 0x98 - Q_KEY_CODE_AUDIOMUTE -> 0x9c - Q_KEY_CODE_VOLUMEUP -> 0x95 - Q_KEY_CODE_VOLUMEDOWN -> 0x9d - Q_KEY_CODE_CALCULATOR -> 0xa3 - Q_KEY_CODE_AC_HOME -> 0x97 And some mistakes corrected: - Q_KEY_CODE_MENU was incorrectly mapped to the compose scancode (0x8d) and is now 0x91 Signed-off-by: Daniel P. Berrange --- hw/input/ps2.c | 406 +------------------------------------------------= ---- include/ui/input.h | 9 ++ ui/Makefile.objs | 3 + ui/input-keymap.c | 3 + 4 files changed, 22 insertions(+), 399 deletions(-) diff --git a/hw/input/ps2.c b/hw/input/ps2.c index 77906d5f46..7eeadc144d 100644 --- a/hw/input/ps2.c +++ b/hw/input/ps2.c @@ -115,401 +115,6 @@ typedef struct { uint8_t mouse_buttons; } PS2MouseState; =20 -/* Table to convert from QEMU codes to scancodes. */ -static const uint16_t qcode_to_keycode_set1[Q_KEY_CODE__MAX] =3D { - [0 ... Q_KEY_CODE__MAX - 1] =3D 0, - - [Q_KEY_CODE_A] =3D 0x1e, - [Q_KEY_CODE_B] =3D 0x30, - [Q_KEY_CODE_C] =3D 0x2e, - [Q_KEY_CODE_D] =3D 0x20, - [Q_KEY_CODE_E] =3D 0x12, - [Q_KEY_CODE_F] =3D 0x21, - [Q_KEY_CODE_G] =3D 0x22, - [Q_KEY_CODE_H] =3D 0x23, - [Q_KEY_CODE_I] =3D 0x17, - [Q_KEY_CODE_J] =3D 0x24, - [Q_KEY_CODE_K] =3D 0x25, - [Q_KEY_CODE_L] =3D 0x26, - [Q_KEY_CODE_M] =3D 0x32, - [Q_KEY_CODE_N] =3D 0x31, - [Q_KEY_CODE_O] =3D 0x18, - [Q_KEY_CODE_P] =3D 0x19, - [Q_KEY_CODE_Q] =3D 0x10, - [Q_KEY_CODE_R] =3D 0x13, - [Q_KEY_CODE_S] =3D 0x1f, - [Q_KEY_CODE_T] =3D 0x14, - [Q_KEY_CODE_U] =3D 0x16, - [Q_KEY_CODE_V] =3D 0x2f, - [Q_KEY_CODE_W] =3D 0x11, - [Q_KEY_CODE_X] =3D 0x2d, - [Q_KEY_CODE_Y] =3D 0x15, - [Q_KEY_CODE_Z] =3D 0x2c, - [Q_KEY_CODE_0] =3D 0x0b, - [Q_KEY_CODE_1] =3D 0x02, - [Q_KEY_CODE_2] =3D 0x03, - [Q_KEY_CODE_3] =3D 0x04, - [Q_KEY_CODE_4] =3D 0x05, - [Q_KEY_CODE_5] =3D 0x06, - [Q_KEY_CODE_6] =3D 0x07, - [Q_KEY_CODE_7] =3D 0x08, - [Q_KEY_CODE_8] =3D 0x09, - [Q_KEY_CODE_9] =3D 0x0a, - [Q_KEY_CODE_GRAVE_ACCENT] =3D 0x29, - [Q_KEY_CODE_MINUS] =3D 0x0c, - [Q_KEY_CODE_EQUAL] =3D 0x0d, - [Q_KEY_CODE_BACKSLASH] =3D 0x2b, - [Q_KEY_CODE_BACKSPACE] =3D 0x0e, - [Q_KEY_CODE_SPC] =3D 0x39, - [Q_KEY_CODE_TAB] =3D 0x0f, - [Q_KEY_CODE_CAPS_LOCK] =3D 0x3a, - [Q_KEY_CODE_SHIFT] =3D 0x2a, - [Q_KEY_CODE_CTRL] =3D 0x1d, - [Q_KEY_CODE_META_L] =3D 0xe05b, - [Q_KEY_CODE_ALT] =3D 0x38, - [Q_KEY_CODE_SHIFT_R] =3D 0x36, - [Q_KEY_CODE_CTRL_R] =3D 0xe01d, - [Q_KEY_CODE_META_R] =3D 0xe05c, - [Q_KEY_CODE_ALT_R] =3D 0xe038, - [Q_KEY_CODE_MENU] =3D 0xe05d, - [Q_KEY_CODE_RET] =3D 0x1c, - [Q_KEY_CODE_ESC] =3D 0x01, - [Q_KEY_CODE_F1] =3D 0x3b, - [Q_KEY_CODE_F2] =3D 0x3c, - [Q_KEY_CODE_F3] =3D 0x3d, - [Q_KEY_CODE_F4] =3D 0x3e, - [Q_KEY_CODE_F5] =3D 0x3f, - [Q_KEY_CODE_F6] =3D 0x40, - [Q_KEY_CODE_F7] =3D 0x41, - [Q_KEY_CODE_F8] =3D 0x42, - [Q_KEY_CODE_F9] =3D 0x43, - [Q_KEY_CODE_F10] =3D 0x44, - [Q_KEY_CODE_F11] =3D 0x57, - [Q_KEY_CODE_F12] =3D 0x58, - /* special handling for Q_KEY_CODE_PRINT */ - [Q_KEY_CODE_SCROLL_LOCK] =3D 0x46, - /* special handling for Q_KEY_CODE_PAUSE */ - [Q_KEY_CODE_BRACKET_LEFT] =3D 0x1a, - [Q_KEY_CODE_INSERT] =3D 0xe052, - [Q_KEY_CODE_HOME] =3D 0xe047, - [Q_KEY_CODE_PGUP] =3D 0xe049, - [Q_KEY_CODE_DELETE] =3D 0xe053, - [Q_KEY_CODE_END] =3D 0xe04f, - [Q_KEY_CODE_PGDN] =3D 0xe051, - [Q_KEY_CODE_UP] =3D 0xe048, - [Q_KEY_CODE_LEFT] =3D 0xe04b, - [Q_KEY_CODE_DOWN] =3D 0xe050, - [Q_KEY_CODE_RIGHT] =3D 0xe04d, - [Q_KEY_CODE_NUM_LOCK] =3D 0x45, - [Q_KEY_CODE_KP_DIVIDE] =3D 0xe035, - [Q_KEY_CODE_KP_MULTIPLY] =3D 0x37, - [Q_KEY_CODE_KP_SUBTRACT] =3D 0x4a, - [Q_KEY_CODE_KP_ADD] =3D 0x4e, - [Q_KEY_CODE_KP_ENTER] =3D 0xe01c, - [Q_KEY_CODE_KP_DECIMAL] =3D 0x53, - [Q_KEY_CODE_KP_0] =3D 0x52, - [Q_KEY_CODE_KP_1] =3D 0x4f, - [Q_KEY_CODE_KP_2] =3D 0x50, - [Q_KEY_CODE_KP_3] =3D 0x51, - [Q_KEY_CODE_KP_4] =3D 0x4b, - [Q_KEY_CODE_KP_5] =3D 0x4c, - [Q_KEY_CODE_KP_6] =3D 0x4d, - [Q_KEY_CODE_KP_7] =3D 0x47, - [Q_KEY_CODE_KP_8] =3D 0x48, - [Q_KEY_CODE_KP_9] =3D 0x49, - [Q_KEY_CODE_BRACKET_RIGHT] =3D 0x1b, - [Q_KEY_CODE_SEMICOLON] =3D 0x27, - [Q_KEY_CODE_APOSTROPHE] =3D 0x28, - [Q_KEY_CODE_COMMA] =3D 0x33, - [Q_KEY_CODE_DOT] =3D 0x34, - [Q_KEY_CODE_SLASH] =3D 0x35, - - [Q_KEY_CODE_POWER] =3D 0x0e5e, - [Q_KEY_CODE_SLEEP] =3D 0x0e5f, - [Q_KEY_CODE_WAKE] =3D 0x0e63, - - [Q_KEY_CODE_AUDIONEXT] =3D 0xe019, - [Q_KEY_CODE_AUDIOPREV] =3D 0xe010, - [Q_KEY_CODE_AUDIOSTOP] =3D 0xe024, - [Q_KEY_CODE_AUDIOPLAY] =3D 0xe022, - [Q_KEY_CODE_AUDIOMUTE] =3D 0xe020, - [Q_KEY_CODE_VOLUMEUP] =3D 0xe030, - [Q_KEY_CODE_VOLUMEDOWN] =3D 0xe02e, - [Q_KEY_CODE_MEDIASELECT] =3D 0xe06d, - [Q_KEY_CODE_MAIL] =3D 0xe06c, - [Q_KEY_CODE_CALCULATOR] =3D 0xe021, - [Q_KEY_CODE_COMPUTER] =3D 0xe06b, - [Q_KEY_CODE_FIND] =3D 0xe065, - [Q_KEY_CODE_AC_HOME] =3D 0xe032, - [Q_KEY_CODE_AC_BACK] =3D 0xe06a, - [Q_KEY_CODE_AC_FORWARD] =3D 0xe069, - [Q_KEY_CODE_STOP] =3D 0xe068, - [Q_KEY_CODE_AC_REFRESH] =3D 0xe067, - [Q_KEY_CODE_AC_BOOKMARKS] =3D 0xe066, - - [Q_KEY_CODE_ASTERISK] =3D 0x37, - [Q_KEY_CODE_LESS] =3D 0x56, - [Q_KEY_CODE_RO] =3D 0x73, - [Q_KEY_CODE_HIRAGANA] =3D 0x70, - [Q_KEY_CODE_HENKAN] =3D 0x79, - [Q_KEY_CODE_YEN] =3D 0x7d, - [Q_KEY_CODE_KP_COMMA] =3D 0x7e, -}; - -static const uint16_t qcode_to_keycode_set2[Q_KEY_CODE__MAX] =3D { - [0 ... Q_KEY_CODE__MAX - 1] =3D 0, - - [Q_KEY_CODE_A] =3D 0x1c, - [Q_KEY_CODE_B] =3D 0x32, - [Q_KEY_CODE_C] =3D 0x21, - [Q_KEY_CODE_D] =3D 0x23, - [Q_KEY_CODE_E] =3D 0x24, - [Q_KEY_CODE_F] =3D 0x2b, - [Q_KEY_CODE_G] =3D 0x34, - [Q_KEY_CODE_H] =3D 0x33, - [Q_KEY_CODE_I] =3D 0x43, - [Q_KEY_CODE_J] =3D 0x3b, - [Q_KEY_CODE_K] =3D 0x42, - [Q_KEY_CODE_L] =3D 0x4b, - [Q_KEY_CODE_M] =3D 0x3a, - [Q_KEY_CODE_N] =3D 0x31, - [Q_KEY_CODE_O] =3D 0x44, - [Q_KEY_CODE_P] =3D 0x4d, - [Q_KEY_CODE_Q] =3D 0x15, - [Q_KEY_CODE_R] =3D 0x2d, - [Q_KEY_CODE_S] =3D 0x1b, - [Q_KEY_CODE_T] =3D 0x2c, - [Q_KEY_CODE_U] =3D 0x3c, - [Q_KEY_CODE_V] =3D 0x2a, - [Q_KEY_CODE_W] =3D 0x1d, - [Q_KEY_CODE_X] =3D 0x22, - [Q_KEY_CODE_Y] =3D 0x35, - [Q_KEY_CODE_Z] =3D 0x1a, - [Q_KEY_CODE_0] =3D 0x45, - [Q_KEY_CODE_1] =3D 0x16, - [Q_KEY_CODE_2] =3D 0x1e, - [Q_KEY_CODE_3] =3D 0x26, - [Q_KEY_CODE_4] =3D 0x25, - [Q_KEY_CODE_5] =3D 0x2e, - [Q_KEY_CODE_6] =3D 0x36, - [Q_KEY_CODE_7] =3D 0x3d, - [Q_KEY_CODE_8] =3D 0x3e, - [Q_KEY_CODE_9] =3D 0x46, - [Q_KEY_CODE_GRAVE_ACCENT] =3D 0x0e, - [Q_KEY_CODE_MINUS] =3D 0x4e, - [Q_KEY_CODE_EQUAL] =3D 0x55, - [Q_KEY_CODE_BACKSLASH] =3D 0x5d, - [Q_KEY_CODE_BACKSPACE] =3D 0x66, - [Q_KEY_CODE_SPC] =3D 0x29, - [Q_KEY_CODE_TAB] =3D 0x0d, - [Q_KEY_CODE_CAPS_LOCK] =3D 0x58, - [Q_KEY_CODE_SHIFT] =3D 0x12, - [Q_KEY_CODE_CTRL] =3D 0x14, - [Q_KEY_CODE_META_L] =3D 0xe01f, - [Q_KEY_CODE_ALT] =3D 0x11, - [Q_KEY_CODE_SHIFT_R] =3D 0x59, - [Q_KEY_CODE_CTRL_R] =3D 0xe014, - [Q_KEY_CODE_META_R] =3D 0xe027, - [Q_KEY_CODE_ALT_R] =3D 0xe011, - [Q_KEY_CODE_MENU] =3D 0xe02f, - [Q_KEY_CODE_RET] =3D 0x5a, - [Q_KEY_CODE_ESC] =3D 0x76, - [Q_KEY_CODE_F1] =3D 0x05, - [Q_KEY_CODE_F2] =3D 0x06, - [Q_KEY_CODE_F3] =3D 0x04, - [Q_KEY_CODE_F4] =3D 0x0c, - [Q_KEY_CODE_F5] =3D 0x03, - [Q_KEY_CODE_F6] =3D 0x0b, - [Q_KEY_CODE_F7] =3D 0x83, - [Q_KEY_CODE_F8] =3D 0x0a, - [Q_KEY_CODE_F9] =3D 0x01, - [Q_KEY_CODE_F10] =3D 0x09, - [Q_KEY_CODE_F11] =3D 0x78, - [Q_KEY_CODE_F12] =3D 0x07, - /* special handling for Q_KEY_CODE_PRINT */ - [Q_KEY_CODE_SCROLL_LOCK] =3D 0x7e, - /* special handling for Q_KEY_CODE_PAUSE */ - [Q_KEY_CODE_BRACKET_LEFT] =3D 0x54, - [Q_KEY_CODE_INSERT] =3D 0xe070, - [Q_KEY_CODE_HOME] =3D 0xe06c, - [Q_KEY_CODE_PGUP] =3D 0xe07d, - [Q_KEY_CODE_DELETE] =3D 0xe071, - [Q_KEY_CODE_END] =3D 0xe069, - [Q_KEY_CODE_PGDN] =3D 0xe07a, - [Q_KEY_CODE_UP] =3D 0xe075, - [Q_KEY_CODE_LEFT] =3D 0xe06b, - [Q_KEY_CODE_DOWN] =3D 0xe072, - [Q_KEY_CODE_RIGHT] =3D 0xe074, - [Q_KEY_CODE_NUM_LOCK] =3D 0x77, - [Q_KEY_CODE_KP_DIVIDE] =3D 0xe04a, - [Q_KEY_CODE_KP_MULTIPLY] =3D 0x7c, - [Q_KEY_CODE_KP_SUBTRACT] =3D 0x7b, - [Q_KEY_CODE_KP_ADD] =3D 0x79, - [Q_KEY_CODE_KP_ENTER] =3D 0xe05a, - [Q_KEY_CODE_KP_DECIMAL] =3D 0x71, - [Q_KEY_CODE_KP_0] =3D 0x70, - [Q_KEY_CODE_KP_1] =3D 0x69, - [Q_KEY_CODE_KP_2] =3D 0x72, - [Q_KEY_CODE_KP_3] =3D 0x7a, - [Q_KEY_CODE_KP_4] =3D 0x6b, - [Q_KEY_CODE_KP_5] =3D 0x73, - [Q_KEY_CODE_KP_6] =3D 0x74, - [Q_KEY_CODE_KP_7] =3D 0x6c, - [Q_KEY_CODE_KP_8] =3D 0x75, - [Q_KEY_CODE_KP_9] =3D 0x7d, - [Q_KEY_CODE_BRACKET_RIGHT] =3D 0x5b, - [Q_KEY_CODE_SEMICOLON] =3D 0x4c, - [Q_KEY_CODE_APOSTROPHE] =3D 0x52, - [Q_KEY_CODE_COMMA] =3D 0x41, - [Q_KEY_CODE_DOT] =3D 0x49, - [Q_KEY_CODE_SLASH] =3D 0x4a, - - [Q_KEY_CODE_POWER] =3D 0x0e37, - [Q_KEY_CODE_SLEEP] =3D 0x0e3f, - [Q_KEY_CODE_WAKE] =3D 0x0e5e, - - [Q_KEY_CODE_AUDIONEXT] =3D 0xe04d, - [Q_KEY_CODE_AUDIOPREV] =3D 0xe015, - [Q_KEY_CODE_AUDIOSTOP] =3D 0xe03b, - [Q_KEY_CODE_AUDIOPLAY] =3D 0xe034, - [Q_KEY_CODE_AUDIOMUTE] =3D 0xe023, - [Q_KEY_CODE_VOLUMEUP] =3D 0xe032, - [Q_KEY_CODE_VOLUMEDOWN] =3D 0xe021, - [Q_KEY_CODE_MEDIASELECT] =3D 0xe050, - [Q_KEY_CODE_MAIL] =3D 0xe048, - [Q_KEY_CODE_CALCULATOR] =3D 0xe02b, - [Q_KEY_CODE_COMPUTER] =3D 0xe040, - [Q_KEY_CODE_FIND] =3D 0xe010, - [Q_KEY_CODE_AC_HOME] =3D 0xe03a, - [Q_KEY_CODE_AC_BACK] =3D 0xe038, - [Q_KEY_CODE_AC_FORWARD] =3D 0xe030, - [Q_KEY_CODE_STOP] =3D 0xe028, - [Q_KEY_CODE_AC_REFRESH] =3D 0xe020, - [Q_KEY_CODE_AC_BOOKMARKS] =3D 0xe018, - - [Q_KEY_CODE_ASTERISK] =3D 0x7c, - [Q_KEY_CODE_LESS] =3D 0x61, - [Q_KEY_CODE_SYSRQ] =3D 0x7f, - [Q_KEY_CODE_RO] =3D 0x51, - [Q_KEY_CODE_HIRAGANA] =3D 0x13, - [Q_KEY_CODE_HENKAN] =3D 0x64, - [Q_KEY_CODE_YEN] =3D 0x6a, - [Q_KEY_CODE_KP_COMMA] =3D 0x6d, -}; - -static const uint16_t qcode_to_keycode_set3[Q_KEY_CODE__MAX] =3D { - [0 ... Q_KEY_CODE__MAX - 1] =3D 0, - - [Q_KEY_CODE_A] =3D 0x1c, - [Q_KEY_CODE_B] =3D 0x32, - [Q_KEY_CODE_C] =3D 0x21, - [Q_KEY_CODE_D] =3D 0x23, - [Q_KEY_CODE_E] =3D 0x24, - [Q_KEY_CODE_F] =3D 0x2b, - [Q_KEY_CODE_G] =3D 0x34, - [Q_KEY_CODE_H] =3D 0x33, - [Q_KEY_CODE_I] =3D 0x43, - [Q_KEY_CODE_J] =3D 0x3b, - [Q_KEY_CODE_K] =3D 0x42, - [Q_KEY_CODE_L] =3D 0x4b, - [Q_KEY_CODE_M] =3D 0x3a, - [Q_KEY_CODE_N] =3D 0x31, - [Q_KEY_CODE_O] =3D 0x44, - [Q_KEY_CODE_P] =3D 0x4d, - [Q_KEY_CODE_Q] =3D 0x15, - [Q_KEY_CODE_R] =3D 0x2d, - [Q_KEY_CODE_S] =3D 0x1b, - [Q_KEY_CODE_T] =3D 0x2c, - [Q_KEY_CODE_U] =3D 0x3c, - [Q_KEY_CODE_V] =3D 0x2a, - [Q_KEY_CODE_W] =3D 0x1d, - [Q_KEY_CODE_X] =3D 0x22, - [Q_KEY_CODE_Y] =3D 0x35, - [Q_KEY_CODE_Z] =3D 0x1a, - [Q_KEY_CODE_0] =3D 0x45, - [Q_KEY_CODE_1] =3D 0x16, - [Q_KEY_CODE_2] =3D 0x1e, - [Q_KEY_CODE_3] =3D 0x26, - [Q_KEY_CODE_4] =3D 0x25, - [Q_KEY_CODE_5] =3D 0x2e, - [Q_KEY_CODE_6] =3D 0x36, - [Q_KEY_CODE_7] =3D 0x3d, - [Q_KEY_CODE_8] =3D 0x3e, - [Q_KEY_CODE_9] =3D 0x46, - [Q_KEY_CODE_GRAVE_ACCENT] =3D 0x0e, - [Q_KEY_CODE_MINUS] =3D 0x4e, - [Q_KEY_CODE_EQUAL] =3D 0x55, - [Q_KEY_CODE_BACKSLASH] =3D 0x5c, - [Q_KEY_CODE_BACKSPACE] =3D 0x66, - [Q_KEY_CODE_SPC] =3D 0x29, - [Q_KEY_CODE_TAB] =3D 0x0d, - [Q_KEY_CODE_CAPS_LOCK] =3D 0x14, - [Q_KEY_CODE_SHIFT] =3D 0x12, - [Q_KEY_CODE_CTRL] =3D 0x11, - [Q_KEY_CODE_META_L] =3D 0x8b, - [Q_KEY_CODE_ALT] =3D 0x19, - [Q_KEY_CODE_SHIFT_R] =3D 0x59, - [Q_KEY_CODE_CTRL_R] =3D 0x58, - [Q_KEY_CODE_META_R] =3D 0x8c, - [Q_KEY_CODE_ALT_R] =3D 0x39, - [Q_KEY_CODE_MENU] =3D 0x8d, - [Q_KEY_CODE_RET] =3D 0x5a, - [Q_KEY_CODE_ESC] =3D 0x08, - [Q_KEY_CODE_F1] =3D 0x07, - [Q_KEY_CODE_F2] =3D 0x0f, - [Q_KEY_CODE_F3] =3D 0x17, - [Q_KEY_CODE_F4] =3D 0x1f, - [Q_KEY_CODE_F5] =3D 0x27, - [Q_KEY_CODE_F6] =3D 0x2f, - [Q_KEY_CODE_F7] =3D 0x37, - [Q_KEY_CODE_F8] =3D 0x3f, - [Q_KEY_CODE_F9] =3D 0x47, - [Q_KEY_CODE_F10] =3D 0x4f, - [Q_KEY_CODE_F11] =3D 0x56, - [Q_KEY_CODE_F12] =3D 0x5e, - [Q_KEY_CODE_PRINT] =3D 0x57, - [Q_KEY_CODE_SCROLL_LOCK] =3D 0x5f, - [Q_KEY_CODE_PAUSE] =3D 0x62, - [Q_KEY_CODE_BRACKET_LEFT] =3D 0x54, - [Q_KEY_CODE_INSERT] =3D 0x67, - [Q_KEY_CODE_HOME] =3D 0x6e, - [Q_KEY_CODE_PGUP] =3D 0x6f, - [Q_KEY_CODE_DELETE] =3D 0x64, - [Q_KEY_CODE_END] =3D 0x65, - [Q_KEY_CODE_PGDN] =3D 0x6d, - [Q_KEY_CODE_UP] =3D 0x63, - [Q_KEY_CODE_LEFT] =3D 0x61, - [Q_KEY_CODE_DOWN] =3D 0x60, - [Q_KEY_CODE_RIGHT] =3D 0x6a, - [Q_KEY_CODE_NUM_LOCK] =3D 0x76, - [Q_KEY_CODE_KP_DIVIDE] =3D 0x4a, - [Q_KEY_CODE_KP_MULTIPLY] =3D 0x7e, - [Q_KEY_CODE_KP_SUBTRACT] =3D 0x4e, - [Q_KEY_CODE_KP_ADD] =3D 0x7c, - [Q_KEY_CODE_KP_ENTER] =3D 0x79, - [Q_KEY_CODE_KP_DECIMAL] =3D 0x71, - [Q_KEY_CODE_KP_0] =3D 0x70, - [Q_KEY_CODE_KP_1] =3D 0x69, - [Q_KEY_CODE_KP_2] =3D 0x72, - [Q_KEY_CODE_KP_3] =3D 0x7a, - [Q_KEY_CODE_KP_4] =3D 0x6b, - [Q_KEY_CODE_KP_5] =3D 0x73, - [Q_KEY_CODE_KP_6] =3D 0x74, - [Q_KEY_CODE_KP_7] =3D 0x6c, - [Q_KEY_CODE_KP_8] =3D 0x75, - [Q_KEY_CODE_KP_9] =3D 0x7d, - [Q_KEY_CODE_BRACKET_RIGHT] =3D 0x5b, - [Q_KEY_CODE_SEMICOLON] =3D 0x4c, - [Q_KEY_CODE_APOSTROPHE] =3D 0x52, - [Q_KEY_CODE_COMMA] =3D 0x41, - [Q_KEY_CODE_DOT] =3D 0x49, - [Q_KEY_CODE_SLASH] =3D 0x4a, - - [Q_KEY_CODE_HIRAGANA] =3D 0x87, - [Q_KEY_CODE_HENKAN] =3D 0x86, - [Q_KEY_CODE_YEN] =3D 0x5d, -}; - static uint8_t translate_table[256] =3D { 0xff, 0x43, 0x41, 0x3f, 0x3d, 0x3b, 0x3c, 0x58, 0x64, 0x44, 0x42, 0x40, 0x3e, 0x0f, 0x29, 0x59, @@ -595,7 +200,7 @@ static void ps2_keyboard_event(DeviceState *dev, QemuCo= nsole *src, PS2KbdState *s =3D (PS2KbdState *)dev; InputKeyEvent *key =3D evt->u.key.data; int qcode; - uint16_t keycode; + uint16_t keycode =3D 0; =20 qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER); assert(evt->type =3D=3D INPUT_EVENT_KIND_KEY); @@ -624,7 +229,8 @@ static void ps2_keyboard_event(DeviceState *dev, QemuCo= nsole *src, ps2_put_keycode(s, 0xaa); } } else { - keycode =3D qcode_to_keycode_set1[qcode]; + if (qcode < qemu_input_map_qcode_to_atset1_len) + keycode =3D qemu_input_map_qcode_to_atset1[qcode]; if (keycode) { if (keycode & 0xff00) { ps2_put_keycode(s, keycode >> 8); @@ -665,7 +271,8 @@ static void ps2_keyboard_event(DeviceState *dev, QemuCo= nsole *src, ps2_put_keycode(s, 0x12); } } else { - keycode =3D qcode_to_keycode_set2[qcode]; + if (qcode < qemu_input_map_qcode_to_atset2_len) + keycode =3D qemu_input_map_qcode_to_atset2[qcode]; if (keycode) { if (keycode & 0xff00) { ps2_put_keycode(s, keycode >> 8); @@ -680,7 +287,8 @@ static void ps2_keyboard_event(DeviceState *dev, QemuCo= nsole *src, } } } else if (s->scancode_set =3D=3D 3) { - keycode =3D qcode_to_keycode_set3[qcode]; + if (qcode < qemu_input_map_qcode_to_atset3_len) + keycode =3D qemu_input_map_qcode_to_atset3[qcode]; if (keycode) { /* FIXME: break code should be configured on a key by key basi= s */ if (!key->down) { diff --git a/include/ui/input.h b/include/ui/input.h index 6f56d868c7..76235ba97a 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -71,6 +71,15 @@ void qemu_remove_mouse_mode_change_notifier(Notifier *no= tify); extern const guint qemu_input_map_linux_to_qcode_len; extern const guint16 qemu_input_map_linux_to_qcode[]; =20 +extern const guint qemu_input_map_qcode_to_atset1_len; +extern const guint16 qemu_input_map_qcode_to_atset1[]; + +extern const guint qemu_input_map_qcode_to_atset2_len; +extern const guint16 qemu_input_map_qcode_to_atset2[]; + +extern const guint qemu_input_map_qcode_to_atset3_len; +extern const guint16 qemu_input_map_qcode_to_atset3[]; + extern const guint qemu_input_map_qcode_to_linux_len; extern const guint16 qemu_input_map_qcode_to_linux[]; =20 diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 11915a9bb4..b92d49ccc8 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -55,6 +55,9 @@ KEYCODEMAP_CSV =3D $(SRC_PATH)/ui/keycodemapdb/data/keyma= ps.csv =20 KEYCODEMAP_FILES =3D \ ui/input-keymap-linux-to-qcode.c \ + ui/input-keymap-qcode-to-atset1.c \ + ui/input-keymap-qcode-to-atset2.c \ + ui/input-keymap-qcode-to-atset3.c \ ui/input-keymap-qcode-to-linux.c \ ui/input-keymap-qcode-to-qnum.c \ ui/input-keymap-qnum-to-qcode.c \ diff --git a/ui/input-keymap.c b/ui/input-keymap.c index 6e543d651f..d90f6a16f7 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -6,6 +6,9 @@ #include "standard-headers/linux/input.h" =20 #include "ui/input-keymap-linux-to-qcode.c" +#include "ui/input-keymap-qcode-to-atset1.c" +#include "ui/input-keymap-qcode-to-atset2.c" +#include "ui/input-keymap-qcode-to-atset3.c" #include "ui/input-keymap-qcode-to-linux.c" #include "ui/input-keymap-qcode-to-qnum.c" #include "ui/input-keymap-qnum-to-qcode.c" --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502790077973698.8458934637309; Tue, 15 Aug 2017 02:41:17 -0700 (PDT) Received: from localhost ([::1]:48722 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYLc-0006OU-Pq for importer@patchew.org; Tue, 15 Aug 2017 05:41:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44045) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYH4-0002VS-Dz for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYH2-0000t3-A5 for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:34 -0400 Received: from mx1.redhat.com ([209.132.183.28]:35910) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYH2-0000sS-1G for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:32 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F123561B80 for ; Tue, 15 Aug 2017 09:36:30 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id CC35161341; Tue, 15 Aug 2017 09:36:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com F123561B80 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:10 +0100 Message-Id: <20170815093615.16453-8-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 15 Aug 2017 09:36:31 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 07/12] input: convert the adb device to keycodemapdb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Replace the qcode_to_adb_keycode table with automatically generated tables. Missing entries in qcode_to_adb_keycode now fixed: - Q_KEY_CODE_KP_COMMA -> 0x47 Signed-off-by: Daniel P. Berrange --- hw/input/adb.c | 124 +------------------------------------- include/hw/input/adb-keys.h | 141 ----------------------------------------= ---- include/ui/input.h | 3 + ui/Makefile.objs | 1 + ui/input-keymap.c | 1 + 5 files changed, 7 insertions(+), 263 deletions(-) delete mode 100644 include/hw/input/adb-keys.h diff --git a/hw/input/adb.c b/hw/input/adb.c index fcca3a8eb9..1fe5d298a3 100644 --- a/hw/input/adb.c +++ b/hw/input/adb.c @@ -25,7 +25,6 @@ #include "hw/hw.h" #include "hw/input/adb.h" #include "ui/console.h" -#include "include/hw/input/adb-keys.h" #include "ui/input.h" #include "sysemu/sysemu.h" =20 @@ -193,125 +192,6 @@ typedef struct ADBKeyboardClass { DeviceRealize parent_realize; } ADBKeyboardClass; =20 -int qcode_to_adb_keycode[] =3D { - /* Make sure future additions are automatically set to NO_KEY */ - [0 ... 0xff] =3D NO_KEY, - - [Q_KEY_CODE_SHIFT] =3D ADB_KEY_LEFT_SHIFT, - [Q_KEY_CODE_SHIFT_R] =3D ADB_KEY_RIGHT_SHIFT, - [Q_KEY_CODE_ALT] =3D ADB_KEY_LEFT_OPTION, - [Q_KEY_CODE_ALT_R] =3D ADB_KEY_RIGHT_OPTION, - [Q_KEY_CODE_CTRL] =3D ADB_KEY_LEFT_CONTROL, - [Q_KEY_CODE_CTRL_R] =3D ADB_KEY_RIGHT_CONTROL, - [Q_KEY_CODE_META_L] =3D ADB_KEY_COMMAND, - [Q_KEY_CODE_META_R] =3D ADB_KEY_COMMAND, - [Q_KEY_CODE_SPC] =3D ADB_KEY_SPACEBAR, - - [Q_KEY_CODE_ESC] =3D ADB_KEY_ESC, - [Q_KEY_CODE_1] =3D ADB_KEY_1, - [Q_KEY_CODE_2] =3D ADB_KEY_2, - [Q_KEY_CODE_3] =3D ADB_KEY_3, - [Q_KEY_CODE_4] =3D ADB_KEY_4, - [Q_KEY_CODE_5] =3D ADB_KEY_5, - [Q_KEY_CODE_6] =3D ADB_KEY_6, - [Q_KEY_CODE_7] =3D ADB_KEY_7, - [Q_KEY_CODE_8] =3D ADB_KEY_8, - [Q_KEY_CODE_9] =3D ADB_KEY_9, - [Q_KEY_CODE_0] =3D ADB_KEY_0, - [Q_KEY_CODE_MINUS] =3D ADB_KEY_MINUS, - [Q_KEY_CODE_EQUAL] =3D ADB_KEY_EQUAL, - [Q_KEY_CODE_BACKSPACE] =3D ADB_KEY_DELETE, - [Q_KEY_CODE_TAB] =3D ADB_KEY_TAB, - [Q_KEY_CODE_Q] =3D ADB_KEY_Q, - [Q_KEY_CODE_W] =3D ADB_KEY_W, - [Q_KEY_CODE_E] =3D ADB_KEY_E, - [Q_KEY_CODE_R] =3D ADB_KEY_R, - [Q_KEY_CODE_T] =3D ADB_KEY_T, - [Q_KEY_CODE_Y] =3D ADB_KEY_Y, - [Q_KEY_CODE_U] =3D ADB_KEY_U, - [Q_KEY_CODE_I] =3D ADB_KEY_I, - [Q_KEY_CODE_O] =3D ADB_KEY_O, - [Q_KEY_CODE_P] =3D ADB_KEY_P, - [Q_KEY_CODE_BRACKET_LEFT] =3D ADB_KEY_LEFT_BRACKET, - [Q_KEY_CODE_BRACKET_RIGHT] =3D ADB_KEY_RIGHT_BRACKET, - [Q_KEY_CODE_RET] =3D ADB_KEY_RETURN, - [Q_KEY_CODE_A] =3D ADB_KEY_A, - [Q_KEY_CODE_S] =3D ADB_KEY_S, - [Q_KEY_CODE_D] =3D ADB_KEY_D, - [Q_KEY_CODE_F] =3D ADB_KEY_F, - [Q_KEY_CODE_G] =3D ADB_KEY_G, - [Q_KEY_CODE_H] =3D ADB_KEY_H, - [Q_KEY_CODE_J] =3D ADB_KEY_J, - [Q_KEY_CODE_K] =3D ADB_KEY_K, - [Q_KEY_CODE_L] =3D ADB_KEY_L, - [Q_KEY_CODE_SEMICOLON] =3D ADB_KEY_SEMICOLON, - [Q_KEY_CODE_APOSTROPHE] =3D ADB_KEY_APOSTROPHE, - [Q_KEY_CODE_GRAVE_ACCENT] =3D ADB_KEY_GRAVE_ACCENT, - [Q_KEY_CODE_BACKSLASH] =3D ADB_KEY_BACKSLASH, - [Q_KEY_CODE_Z] =3D ADB_KEY_Z, - [Q_KEY_CODE_X] =3D ADB_KEY_X, - [Q_KEY_CODE_C] =3D ADB_KEY_C, - [Q_KEY_CODE_V] =3D ADB_KEY_V, - [Q_KEY_CODE_B] =3D ADB_KEY_B, - [Q_KEY_CODE_N] =3D ADB_KEY_N, - [Q_KEY_CODE_M] =3D ADB_KEY_M, - [Q_KEY_CODE_COMMA] =3D ADB_KEY_COMMA, - [Q_KEY_CODE_DOT] =3D ADB_KEY_PERIOD, - [Q_KEY_CODE_SLASH] =3D ADB_KEY_FORWARD_SLASH, - [Q_KEY_CODE_ASTERISK] =3D ADB_KEY_KP_MULTIPLY, - [Q_KEY_CODE_CAPS_LOCK] =3D ADB_KEY_CAPS_LOCK, - - [Q_KEY_CODE_F1] =3D ADB_KEY_F1, - [Q_KEY_CODE_F2] =3D ADB_KEY_F2, - [Q_KEY_CODE_F3] =3D ADB_KEY_F3, - [Q_KEY_CODE_F4] =3D ADB_KEY_F4, - [Q_KEY_CODE_F5] =3D ADB_KEY_F5, - [Q_KEY_CODE_F6] =3D ADB_KEY_F6, - [Q_KEY_CODE_F7] =3D ADB_KEY_F7, - [Q_KEY_CODE_F8] =3D ADB_KEY_F8, - [Q_KEY_CODE_F9] =3D ADB_KEY_F9, - [Q_KEY_CODE_F10] =3D ADB_KEY_F10, - [Q_KEY_CODE_F11] =3D ADB_KEY_F11, - [Q_KEY_CODE_F12] =3D ADB_KEY_F12, - [Q_KEY_CODE_PRINT] =3D ADB_KEY_F13, - [Q_KEY_CODE_SYSRQ] =3D ADB_KEY_F13, - [Q_KEY_CODE_SCROLL_LOCK] =3D ADB_KEY_F14, - [Q_KEY_CODE_PAUSE] =3D ADB_KEY_F15, - - [Q_KEY_CODE_NUM_LOCK] =3D ADB_KEY_KP_CLEAR, - [Q_KEY_CODE_KP_EQUALS] =3D ADB_KEY_KP_EQUAL, - [Q_KEY_CODE_KP_DIVIDE] =3D ADB_KEY_KP_DIVIDE, - [Q_KEY_CODE_KP_MULTIPLY] =3D ADB_KEY_KP_MULTIPLY, - [Q_KEY_CODE_KP_SUBTRACT] =3D ADB_KEY_KP_SUBTRACT, - [Q_KEY_CODE_KP_ADD] =3D ADB_KEY_KP_PLUS, - [Q_KEY_CODE_KP_ENTER] =3D ADB_KEY_KP_ENTER, - [Q_KEY_CODE_KP_DECIMAL] =3D ADB_KEY_KP_PERIOD, - [Q_KEY_CODE_KP_0] =3D ADB_KEY_KP_0, - [Q_KEY_CODE_KP_1] =3D ADB_KEY_KP_1, - [Q_KEY_CODE_KP_2] =3D ADB_KEY_KP_2, - [Q_KEY_CODE_KP_3] =3D ADB_KEY_KP_3, - [Q_KEY_CODE_KP_4] =3D ADB_KEY_KP_4, - [Q_KEY_CODE_KP_5] =3D ADB_KEY_KP_5, - [Q_KEY_CODE_KP_6] =3D ADB_KEY_KP_6, - [Q_KEY_CODE_KP_7] =3D ADB_KEY_KP_7, - [Q_KEY_CODE_KP_8] =3D ADB_KEY_KP_8, - [Q_KEY_CODE_KP_9] =3D ADB_KEY_KP_9, - - [Q_KEY_CODE_UP] =3D ADB_KEY_UP, - [Q_KEY_CODE_DOWN] =3D ADB_KEY_DOWN, - [Q_KEY_CODE_LEFT] =3D ADB_KEY_LEFT, - [Q_KEY_CODE_RIGHT] =3D ADB_KEY_RIGHT, - - [Q_KEY_CODE_HELP] =3D ADB_KEY_HELP, - [Q_KEY_CODE_INSERT] =3D ADB_KEY_HELP, - [Q_KEY_CODE_DELETE] =3D ADB_KEY_FORWARD_DELETE, - [Q_KEY_CODE_HOME] =3D ADB_KEY_HOME, - [Q_KEY_CODE_END] =3D ADB_KEY_END, - [Q_KEY_CODE_PGUP] =3D ADB_KEY_PAGE_UP, - [Q_KEY_CODE_PGDN] =3D ADB_KEY_PAGE_DOWN, - - [Q_KEY_CODE_POWER] =3D ADB_KEY_POWER -}; =20 static void adb_kbd_put_keycode(void *opaque, int keycode) { @@ -439,11 +319,11 @@ static void adb_keyboard_event(DeviceState *dev, Qemu= Console *src, int qcode, keycode; =20 qcode =3D qemu_input_key_value_to_qcode(evt->u.key.data->key); - if (qcode >=3D ARRAY_SIZE(qcode_to_adb_keycode)) { + if (qcode >=3D qemu_input_map_qcode_to_adb_len) { return; } /* FIXME: take handler into account when translating qcode */ - keycode =3D qcode_to_adb_keycode[qcode]; + keycode =3D qemu_input_map_qcode_to_adb[qcode]; if (keycode =3D=3D NO_KEY) { /* We don't want to send this to the gue= st */ ADB_DPRINTF("Ignoring NO_KEY\n"); return; diff --git a/include/hw/input/adb-keys.h b/include/hw/input/adb-keys.h deleted file mode 100644 index 525fba8a61..0000000000 --- a/include/hw/input/adb-keys.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * QEMU System Emulator - * - * Copyright (c) 2016 John Arbuckle - * - * This work is licensed under the terms of the GNU GPL, version 2 or late= r. - * See the COPYING file in the top-level directory. - */ - -/* - * adb-keys.h - * - * Provides an enum of all the Macintosh keycodes. - * Additional information: http://www.archive.org/stream/apple-guide-maci= ntosh-family-hardware/Apple_Guide_to_the_Macintosh_Family_Hardware_2e#page/= n345/mode/2up - * page 308 - */ - -#ifndef ADB_KEYS_H -#define ADB_KEYS_H - -enum { - ADB_KEY_A =3D 0x00, - ADB_KEY_B =3D 0x0b, - ADB_KEY_C =3D 0x08, - ADB_KEY_D =3D 0x02, - ADB_KEY_E =3D 0x0e, - ADB_KEY_F =3D 0x03, - ADB_KEY_G =3D 0x05, - ADB_KEY_H =3D 0x04, - ADB_KEY_I =3D 0x22, - ADB_KEY_J =3D 0x26, - ADB_KEY_K =3D 0x28, - ADB_KEY_L =3D 0x25, - ADB_KEY_M =3D 0x2e, - ADB_KEY_N =3D 0x2d, - ADB_KEY_O =3D 0x1f, - ADB_KEY_P =3D 0x23, - ADB_KEY_Q =3D 0x0c, - ADB_KEY_R =3D 0x0f, - ADB_KEY_S =3D 0x01, - ADB_KEY_T =3D 0x11, - ADB_KEY_U =3D 0x20, - ADB_KEY_V =3D 0x09, - ADB_KEY_W =3D 0x0d, - ADB_KEY_X =3D 0x07, - ADB_KEY_Y =3D 0x10, - ADB_KEY_Z =3D 0x06, - - ADB_KEY_0 =3D 0x1d, - ADB_KEY_1 =3D 0x12, - ADB_KEY_2 =3D 0x13, - ADB_KEY_3 =3D 0x14, - ADB_KEY_4 =3D 0x15, - ADB_KEY_5 =3D 0x17, - ADB_KEY_6 =3D 0x16, - ADB_KEY_7 =3D 0x1a, - ADB_KEY_8 =3D 0x1c, - ADB_KEY_9 =3D 0x19, - - ADB_KEY_GRAVE_ACCENT =3D 0x32, - ADB_KEY_MINUS =3D 0x1b, - ADB_KEY_EQUAL =3D 0x18, - ADB_KEY_DELETE =3D 0x33, - ADB_KEY_CAPS_LOCK =3D 0x39, - ADB_KEY_TAB =3D 0x30, - ADB_KEY_RETURN =3D 0x24, - ADB_KEY_LEFT_BRACKET =3D 0x21, - ADB_KEY_RIGHT_BRACKET =3D 0x1e, - ADB_KEY_BACKSLASH =3D 0x2a, - ADB_KEY_SEMICOLON =3D 0x29, - ADB_KEY_APOSTROPHE =3D 0x27, - ADB_KEY_COMMA =3D 0x2b, - ADB_KEY_PERIOD =3D 0x2f, - ADB_KEY_FORWARD_SLASH =3D 0x2c, - ADB_KEY_LEFT_SHIFT =3D 0x38, - ADB_KEY_RIGHT_SHIFT =3D 0x7b, - ADB_KEY_SPACEBAR =3D 0x31, - ADB_KEY_LEFT_CONTROL =3D 0x36, - ADB_KEY_RIGHT_CONTROL =3D 0x7d, - ADB_KEY_LEFT_OPTION =3D 0x3a, - ADB_KEY_RIGHT_OPTION =3D 0x7c, - ADB_KEY_COMMAND =3D 0x37, - - ADB_KEY_KP_0 =3D 0x52, - ADB_KEY_KP_1 =3D 0x53, - ADB_KEY_KP_2 =3D 0x54, - ADB_KEY_KP_3 =3D 0x55, - ADB_KEY_KP_4 =3D 0x56, - ADB_KEY_KP_5 =3D 0x57, - ADB_KEY_KP_6 =3D 0x58, - ADB_KEY_KP_7 =3D 0x59, - ADB_KEY_KP_8 =3D 0x5b, - ADB_KEY_KP_9 =3D 0x5c, - ADB_KEY_KP_PERIOD =3D 0x41, - ADB_KEY_KP_ENTER =3D 0x4c, - ADB_KEY_KP_PLUS =3D 0x45, - ADB_KEY_KP_SUBTRACT =3D 0x4e, - ADB_KEY_KP_MULTIPLY =3D 0x43, - ADB_KEY_KP_DIVIDE =3D 0x4b, - ADB_KEY_KP_EQUAL =3D 0x51, - ADB_KEY_KP_CLEAR =3D 0x47, - - ADB_KEY_UP =3D 0x3e, - ADB_KEY_DOWN =3D 0x3d, - ADB_KEY_LEFT =3D 0x3b, - ADB_KEY_RIGHT =3D 0x3c, - - ADB_KEY_HELP =3D 0x72, - ADB_KEY_HOME =3D 0x73, - ADB_KEY_PAGE_UP =3D 0x74, - ADB_KEY_PAGE_DOWN =3D 0x79, - ADB_KEY_END =3D 0x77, - ADB_KEY_FORWARD_DELETE =3D 0x75, - - ADB_KEY_ESC =3D 0x35, - ADB_KEY_F1 =3D 0x7a, - ADB_KEY_F2 =3D 0x78, - ADB_KEY_F3 =3D 0x63, - ADB_KEY_F4 =3D 0x76, - ADB_KEY_F5 =3D 0x60, - ADB_KEY_F6 =3D 0x61, - ADB_KEY_F7 =3D 0x62, - ADB_KEY_F8 =3D 0x64, - ADB_KEY_F9 =3D 0x65, - ADB_KEY_F10 =3D 0x6d, - ADB_KEY_F11 =3D 0x67, - ADB_KEY_F12 =3D 0x6f, - ADB_KEY_F13 =3D 0x69, - ADB_KEY_F14 =3D 0x6b, - ADB_KEY_F15 =3D 0x71, - - ADB_KEY_VOLUME_UP =3D 0x48, - ADB_KEY_VOLUME_DOWN =3D 0x49, - ADB_KEY_VOLUME_MUTE =3D 0x4a, - ADB_KEY_POWER =3D 0x7f7f -}; - -/* Could not find the value for this key. */ -/* #define ADB_KEY_EJECT */ - -#endif /* ADB_KEYS_H */ diff --git a/include/ui/input.h b/include/ui/input.h index 76235ba97a..4aa5655a0b 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -71,6 +71,9 @@ void qemu_remove_mouse_mode_change_notifier(Notifier *not= ify); extern const guint qemu_input_map_linux_to_qcode_len; extern const guint16 qemu_input_map_linux_to_qcode[]; =20 +extern const guint qemu_input_map_qcode_to_adb_len; +extern const guint16 qemu_input_map_qcode_to_adb[]; + extern const guint qemu_input_map_qcode_to_atset1_len; extern const guint16 qemu_input_map_qcode_to_atset1[]; =20 diff --git a/ui/Makefile.objs b/ui/Makefile.objs index b92d49ccc8..3e16fc7304 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -55,6 +55,7 @@ KEYCODEMAP_CSV =3D $(SRC_PATH)/ui/keycodemapdb/data/keyma= ps.csv =20 KEYCODEMAP_FILES =3D \ ui/input-keymap-linux-to-qcode.c \ + ui/input-keymap-qcode-to-adb.c \ ui/input-keymap-qcode-to-atset1.c \ ui/input-keymap-qcode-to-atset2.c \ ui/input-keymap-qcode-to-atset3.c \ diff --git a/ui/input-keymap.c b/ui/input-keymap.c index d90f6a16f7..5d97a38c42 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -6,6 +6,7 @@ #include "standard-headers/linux/input.h" =20 #include "ui/input-keymap-linux-to-qcode.c" +#include "ui/input-keymap-qcode-to-adb.c" #include "ui/input-keymap-qcode-to-atset1.c" #include "ui/input-keymap-qcode-to-atset2.c" #include "ui/input-keymap-qcode-to-atset3.c" --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502790206620568.9419271687714; Tue, 15 Aug 2017 02:43:26 -0700 (PDT) Received: from localhost ([::1]:48731 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYNh-0008Sl-0W for importer@patchew.org; Tue, 15 Aug 2017 05:43:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44049) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYH4-0002Vl-OB for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYH3-0000te-Ks for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:34 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58734) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYH3-0000tE-CG for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:33 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 416E4859FA for ; Tue, 15 Aug 2017 09:36:32 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3C7B460657; Tue, 15 Aug 2017 09:36:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 416E4859FA Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:11 +0100 Message-Id: <20170815093615.16453-9-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 15 Aug 2017 09:36:32 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 08/12] char: convert the escc device to keycodemapdb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Replace the qcode_to_keycode table with automatically generated tables. Missing entries in qcode_to_keycode now fixed: - Q_KEY_CODE_KP_COMMA -> 0x2d Signed-off-by: Daniel P. Berrange --- hw/char/escc.c | 126 +++----------------------------------------------= ---- include/ui/input.h | 3 ++ ui/Makefile.objs | 1 + ui/input-keymap.c | 1 + 4 files changed, 10 insertions(+), 121 deletions(-) diff --git a/hw/char/escc.c b/hw/char/escc.c index 1aca564e33..05665d85e7 100644 --- a/hw/char/escc.c +++ b/hw/char/escc.c @@ -717,126 +717,6 @@ MemoryRegion *escc_init(hwaddr base, qemu_irq irqA, q= emu_irq irqB, return &d->mmio; } =20 -static const uint8_t qcode_to_keycode[Q_KEY_CODE__MAX] =3D { - [Q_KEY_CODE_SHIFT] =3D 99, - [Q_KEY_CODE_SHIFT_R] =3D 110, - [Q_KEY_CODE_ALT] =3D 19, - [Q_KEY_CODE_ALT_R] =3D 13, - [Q_KEY_CODE_CTRL] =3D 76, - [Q_KEY_CODE_CTRL_R] =3D 76, - [Q_KEY_CODE_ESC] =3D 29, - [Q_KEY_CODE_1] =3D 30, - [Q_KEY_CODE_2] =3D 31, - [Q_KEY_CODE_3] =3D 32, - [Q_KEY_CODE_4] =3D 33, - [Q_KEY_CODE_5] =3D 34, - [Q_KEY_CODE_6] =3D 35, - [Q_KEY_CODE_7] =3D 36, - [Q_KEY_CODE_8] =3D 37, - [Q_KEY_CODE_9] =3D 38, - [Q_KEY_CODE_0] =3D 39, - [Q_KEY_CODE_MINUS] =3D 40, - [Q_KEY_CODE_EQUAL] =3D 41, - [Q_KEY_CODE_BACKSPACE] =3D 43, - [Q_KEY_CODE_TAB] =3D 53, - [Q_KEY_CODE_Q] =3D 54, - [Q_KEY_CODE_W] =3D 55, - [Q_KEY_CODE_E] =3D 56, - [Q_KEY_CODE_R] =3D 57, - [Q_KEY_CODE_T] =3D 58, - [Q_KEY_CODE_Y] =3D 59, - [Q_KEY_CODE_U] =3D 60, - [Q_KEY_CODE_I] =3D 61, - [Q_KEY_CODE_O] =3D 62, - [Q_KEY_CODE_P] =3D 63, - [Q_KEY_CODE_BRACKET_LEFT] =3D 64, - [Q_KEY_CODE_BRACKET_RIGHT] =3D 65, - [Q_KEY_CODE_RET] =3D 89, - [Q_KEY_CODE_A] =3D 77, - [Q_KEY_CODE_S] =3D 78, - [Q_KEY_CODE_D] =3D 79, - [Q_KEY_CODE_F] =3D 80, - [Q_KEY_CODE_G] =3D 81, - [Q_KEY_CODE_H] =3D 82, - [Q_KEY_CODE_J] =3D 83, - [Q_KEY_CODE_K] =3D 84, - [Q_KEY_CODE_L] =3D 85, - [Q_KEY_CODE_SEMICOLON] =3D 86, - [Q_KEY_CODE_APOSTROPHE] =3D 87, - [Q_KEY_CODE_GRAVE_ACCENT] =3D 42, - [Q_KEY_CODE_BACKSLASH] =3D 88, - [Q_KEY_CODE_Z] =3D 100, - [Q_KEY_CODE_X] =3D 101, - [Q_KEY_CODE_C] =3D 102, - [Q_KEY_CODE_V] =3D 103, - [Q_KEY_CODE_B] =3D 104, - [Q_KEY_CODE_N] =3D 105, - [Q_KEY_CODE_M] =3D 106, - [Q_KEY_CODE_COMMA] =3D 107, - [Q_KEY_CODE_DOT] =3D 108, - [Q_KEY_CODE_SLASH] =3D 109, - [Q_KEY_CODE_ASTERISK] =3D 47, - [Q_KEY_CODE_SPC] =3D 121, - [Q_KEY_CODE_CAPS_LOCK] =3D 119, - [Q_KEY_CODE_F1] =3D 5, - [Q_KEY_CODE_F2] =3D 6, - [Q_KEY_CODE_F3] =3D 8, - [Q_KEY_CODE_F4] =3D 10, - [Q_KEY_CODE_F5] =3D 12, - [Q_KEY_CODE_F6] =3D 14, - [Q_KEY_CODE_F7] =3D 16, - [Q_KEY_CODE_F8] =3D 17, - [Q_KEY_CODE_F9] =3D 18, - [Q_KEY_CODE_F10] =3D 7, - [Q_KEY_CODE_NUM_LOCK] =3D 98, - [Q_KEY_CODE_SCROLL_LOCK] =3D 23, - [Q_KEY_CODE_KP_DIVIDE] =3D 46, - [Q_KEY_CODE_KP_MULTIPLY] =3D 47, - [Q_KEY_CODE_KP_SUBTRACT] =3D 71, - [Q_KEY_CODE_KP_ADD] =3D 125, - [Q_KEY_CODE_KP_ENTER] =3D 90, - [Q_KEY_CODE_KP_DECIMAL] =3D 50, - [Q_KEY_CODE_KP_0] =3D 94, - [Q_KEY_CODE_KP_1] =3D 112, - [Q_KEY_CODE_KP_2] =3D 113, - [Q_KEY_CODE_KP_3] =3D 114, - [Q_KEY_CODE_KP_4] =3D 91, - [Q_KEY_CODE_KP_5] =3D 92, - [Q_KEY_CODE_KP_6] =3D 93, - [Q_KEY_CODE_KP_7] =3D 68, - [Q_KEY_CODE_KP_8] =3D 69, - [Q_KEY_CODE_KP_9] =3D 70, - [Q_KEY_CODE_LESS] =3D 124, - [Q_KEY_CODE_F11] =3D 9, - [Q_KEY_CODE_F12] =3D 11, - [Q_KEY_CODE_HOME] =3D 52, - [Q_KEY_CODE_PGUP] =3D 96, - [Q_KEY_CODE_PGDN] =3D 123, - [Q_KEY_CODE_END] =3D 74, - [Q_KEY_CODE_LEFT] =3D 24, - [Q_KEY_CODE_UP] =3D 20, - [Q_KEY_CODE_DOWN] =3D 27, - [Q_KEY_CODE_RIGHT] =3D 28, - [Q_KEY_CODE_INSERT] =3D 44, - [Q_KEY_CODE_DELETE] =3D 66, - [Q_KEY_CODE_STOP] =3D 1, - [Q_KEY_CODE_AGAIN] =3D 3, - [Q_KEY_CODE_PROPS] =3D 25, - [Q_KEY_CODE_UNDO] =3D 26, - [Q_KEY_CODE_FRONT] =3D 49, - [Q_KEY_CODE_COPY] =3D 51, - [Q_KEY_CODE_OPEN] =3D 72, - [Q_KEY_CODE_PASTE] =3D 73, - [Q_KEY_CODE_FIND] =3D 95, - [Q_KEY_CODE_CUT] =3D 97, - [Q_KEY_CODE_LF] =3D 111, - [Q_KEY_CODE_HELP] =3D 118, - [Q_KEY_CODE_META_L] =3D 120, - [Q_KEY_CODE_META_R] =3D 122, - [Q_KEY_CODE_COMPOSE] =3D 67, - [Q_KEY_CODE_PRINT] =3D 22, - [Q_KEY_CODE_SYSRQ] =3D 21, -}; =20 static void sunkbd_handle_event(DeviceState *dev, QemuConsole *src, InputEvent *evt) @@ -879,7 +759,11 @@ static void sunkbd_handle_event(DeviceState *dev, Qemu= Console *src, } } =20 - keycode =3D qcode_to_keycode[qcode]; + if (qcode > qemu_input_map_qcode_to_sun_len) { + return; + } + + keycode =3D qemu_input_map_qcode_to_sun[qcode]; if (!key->down) { keycode |=3D 0x80; } diff --git a/include/ui/input.h b/include/ui/input.h index 4aa5655a0b..4ba7340b7b 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -89,6 +89,9 @@ extern const guint16 qemu_input_map_qcode_to_linux[]; extern const guint qemu_input_map_qcode_to_qnum_len; extern const guint16 qemu_input_map_qcode_to_qnum[]; =20 +extern const guint qemu_input_map_qcode_to_sun_len; +extern const guint16 qemu_input_map_qcode_to_sun[]; + extern const guint qemu_input_map_qnum_to_qcode_len; extern const guint16 qemu_input_map_qnum_to_qcode[]; =20 diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 3e16fc7304..478a039398 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -61,6 +61,7 @@ KEYCODEMAP_FILES =3D \ ui/input-keymap-qcode-to-atset3.c \ ui/input-keymap-qcode-to-linux.c \ ui/input-keymap-qcode-to-qnum.c \ + ui/input-keymap-qcode-to-sun.c \ ui/input-keymap-qnum-to-qcode.c \ $(NULL) =20 diff --git a/ui/input-keymap.c b/ui/input-keymap.c index 5d97a38c42..1b53cb4d0a 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -12,6 +12,7 @@ #include "ui/input-keymap-qcode-to-atset3.c" #include "ui/input-keymap-qcode-to-linux.c" #include "ui/input-keymap-qcode-to-qnum.c" +#include "ui/input-keymap-qcode-to-sun.c" #include "ui/input-keymap-qnum-to-qcode.c" =20 int qemu_input_linux_to_qcode(unsigned int lnx) --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502790210570529.3976724904464; Tue, 15 Aug 2017 02:43:30 -0700 (PDT) Received: from localhost ([::1]:48753 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYNl-00004x-9S for importer@patchew.org; Tue, 15 Aug 2017 05:43:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44079) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYH5-0002X1-St for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYH4-0000uL-KX for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:35 -0400 Received: from mx1.redhat.com ([209.132.183.28]:39908) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYH4-0000tm-Bx for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:34 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 65CB2C0467C6 for ; Tue, 15 Aug 2017 09:36:33 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id 77BFA60481; Tue, 15 Aug 2017 09:36:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 65CB2C0467C6 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:12 +0100 Message-Id: <20170815093615.16453-10-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 15 Aug 2017 09:36:33 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 09/12] ui: convert cocoa frontend to keycodemapdb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Replace the mac_to_qkeycode_map table with automatically generated table. Signed-off-by: Daniel P. Berrange --- include/ui/input.h | 3 ++ ui/Makefile.objs | 1 + ui/cocoa.m | 129 +------------------------------------------------= ---- ui/input-keymap.c | 1 + 4 files changed, 7 insertions(+), 127 deletions(-) diff --git a/include/ui/input.h b/include/ui/input.h index 4ba7340b7b..df3eb439bf 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -71,6 +71,9 @@ void qemu_remove_mouse_mode_change_notifier(Notifier *not= ify); extern const guint qemu_input_map_linux_to_qcode_len; extern const guint16 qemu_input_map_linux_to_qcode[]; =20 +extern const guint qemu_input_map_osx_to_qcode_len; +extern const guint16 qemu_input_map_osx_to_qcode[]; + extern const guint qemu_input_map_qcode_to_adb_len; extern const guint16 qemu_input_map_qcode_to_adb[]; =20 diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 478a039398..d35634cdc7 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -55,6 +55,7 @@ KEYCODEMAP_CSV =3D $(SRC_PATH)/ui/keycodemapdb/data/keyma= ps.csv =20 KEYCODEMAP_FILES =3D \ ui/input-keymap-linux-to-qcode.c \ + ui/input-keymap-osx-to-qcode.c \ ui/input-keymap-qcode-to-adb.c \ ui/input-keymap-qcode-to-atset1.c \ ui/input-keymap-qcode-to-atset2.c \ diff --git a/ui/cocoa.m b/ui/cocoa.m index 93e56d0518..e966605914 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -106,139 +106,14 @@ bool stretch_video; NSTextField *pauseLabel; NSArray * supportedImageFileTypes; =20 -// Mac to QKeyCode conversion -const int mac_to_qkeycode_map[] =3D { - [kVK_ANSI_A] =3D Q_KEY_CODE_A, - [kVK_ANSI_B] =3D Q_KEY_CODE_B, - [kVK_ANSI_C] =3D Q_KEY_CODE_C, - [kVK_ANSI_D] =3D Q_KEY_CODE_D, - [kVK_ANSI_E] =3D Q_KEY_CODE_E, - [kVK_ANSI_F] =3D Q_KEY_CODE_F, - [kVK_ANSI_G] =3D Q_KEY_CODE_G, - [kVK_ANSI_H] =3D Q_KEY_CODE_H, - [kVK_ANSI_I] =3D Q_KEY_CODE_I, - [kVK_ANSI_J] =3D Q_KEY_CODE_J, - [kVK_ANSI_K] =3D Q_KEY_CODE_K, - [kVK_ANSI_L] =3D Q_KEY_CODE_L, - [kVK_ANSI_M] =3D Q_KEY_CODE_M, - [kVK_ANSI_N] =3D Q_KEY_CODE_N, - [kVK_ANSI_O] =3D Q_KEY_CODE_O, - [kVK_ANSI_P] =3D Q_KEY_CODE_P, - [kVK_ANSI_Q] =3D Q_KEY_CODE_Q, - [kVK_ANSI_R] =3D Q_KEY_CODE_R, - [kVK_ANSI_S] =3D Q_KEY_CODE_S, - [kVK_ANSI_T] =3D Q_KEY_CODE_T, - [kVK_ANSI_U] =3D Q_KEY_CODE_U, - [kVK_ANSI_V] =3D Q_KEY_CODE_V, - [kVK_ANSI_W] =3D Q_KEY_CODE_W, - [kVK_ANSI_X] =3D Q_KEY_CODE_X, - [kVK_ANSI_Y] =3D Q_KEY_CODE_Y, - [kVK_ANSI_Z] =3D Q_KEY_CODE_Z, - - [kVK_ANSI_0] =3D Q_KEY_CODE_0, - [kVK_ANSI_1] =3D Q_KEY_CODE_1, - [kVK_ANSI_2] =3D Q_KEY_CODE_2, - [kVK_ANSI_3] =3D Q_KEY_CODE_3, - [kVK_ANSI_4] =3D Q_KEY_CODE_4, - [kVK_ANSI_5] =3D Q_KEY_CODE_5, - [kVK_ANSI_6] =3D Q_KEY_CODE_6, - [kVK_ANSI_7] =3D Q_KEY_CODE_7, - [kVK_ANSI_8] =3D Q_KEY_CODE_8, - [kVK_ANSI_9] =3D Q_KEY_CODE_9, - - [kVK_ANSI_Grave] =3D Q_KEY_CODE_GRAVE_ACCENT, - [kVK_ANSI_Minus] =3D Q_KEY_CODE_MINUS, - [kVK_ANSI_Equal] =3D Q_KEY_CODE_EQUAL, - [kVK_Delete] =3D Q_KEY_CODE_BACKSPACE, - [kVK_CapsLock] =3D Q_KEY_CODE_CAPS_LOCK, - [kVK_Tab] =3D Q_KEY_CODE_TAB, - [kVK_Return] =3D Q_KEY_CODE_RET, - [kVK_ANSI_LeftBracket] =3D Q_KEY_CODE_BRACKET_LEFT, - [kVK_ANSI_RightBracket] =3D Q_KEY_CODE_BRACKET_RIGHT, - [kVK_ANSI_Backslash] =3D Q_KEY_CODE_BACKSLASH, - [kVK_ANSI_Semicolon] =3D Q_KEY_CODE_SEMICOLON, - [kVK_ANSI_Quote] =3D Q_KEY_CODE_APOSTROPHE, - [kVK_ANSI_Comma] =3D Q_KEY_CODE_COMMA, - [kVK_ANSI_Period] =3D Q_KEY_CODE_DOT, - [kVK_ANSI_Slash] =3D Q_KEY_CODE_SLASH, - [kVK_Shift] =3D Q_KEY_CODE_SHIFT, - [kVK_RightShift] =3D Q_KEY_CODE_SHIFT_R, - [kVK_Control] =3D Q_KEY_CODE_CTRL, - [kVK_RightControl] =3D Q_KEY_CODE_CTRL_R, - [kVK_Option] =3D Q_KEY_CODE_ALT, - [kVK_RightOption] =3D Q_KEY_CODE_ALT_R, - [kVK_Command] =3D Q_KEY_CODE_META_L, - [0x36] =3D Q_KEY_CODE_META_R, /* There is no kVK_RightCommand */ - [kVK_Space] =3D Q_KEY_CODE_SPC, - - [kVK_ANSI_Keypad0] =3D Q_KEY_CODE_KP_0, - [kVK_ANSI_Keypad1] =3D Q_KEY_CODE_KP_1, - [kVK_ANSI_Keypad2] =3D Q_KEY_CODE_KP_2, - [kVK_ANSI_Keypad3] =3D Q_KEY_CODE_KP_3, - [kVK_ANSI_Keypad4] =3D Q_KEY_CODE_KP_4, - [kVK_ANSI_Keypad5] =3D Q_KEY_CODE_KP_5, - [kVK_ANSI_Keypad6] =3D Q_KEY_CODE_KP_6, - [kVK_ANSI_Keypad7] =3D Q_KEY_CODE_KP_7, - [kVK_ANSI_Keypad8] =3D Q_KEY_CODE_KP_8, - [kVK_ANSI_Keypad9] =3D Q_KEY_CODE_KP_9, - [kVK_ANSI_KeypadDecimal] =3D Q_KEY_CODE_KP_DECIMAL, - [kVK_ANSI_KeypadEnter] =3D Q_KEY_CODE_KP_ENTER, - [kVK_ANSI_KeypadPlus] =3D Q_KEY_CODE_KP_ADD, - [kVK_ANSI_KeypadMinus] =3D Q_KEY_CODE_KP_SUBTRACT, - [kVK_ANSI_KeypadMultiply] =3D Q_KEY_CODE_KP_MULTIPLY, - [kVK_ANSI_KeypadDivide] =3D Q_KEY_CODE_KP_DIVIDE, - [kVK_ANSI_KeypadEquals] =3D Q_KEY_CODE_KP_EQUALS, - [kVK_ANSI_KeypadClear] =3D Q_KEY_CODE_NUM_LOCK, - - [kVK_UpArrow] =3D Q_KEY_CODE_UP, - [kVK_DownArrow] =3D Q_KEY_CODE_DOWN, - [kVK_LeftArrow] =3D Q_KEY_CODE_LEFT, - [kVK_RightArrow] =3D Q_KEY_CODE_RIGHT, - - [kVK_Help] =3D Q_KEY_CODE_INSERT, - [kVK_Home] =3D Q_KEY_CODE_HOME, - [kVK_PageUp] =3D Q_KEY_CODE_PGUP, - [kVK_PageDown] =3D Q_KEY_CODE_PGDN, - [kVK_End] =3D Q_KEY_CODE_END, - [kVK_ForwardDelete] =3D Q_KEY_CODE_DELETE, - - [kVK_Escape] =3D Q_KEY_CODE_ESC, - - /* The Power key can't be used directly because the operating system u= ses - * it. This key can be emulated by using it in place of another key su= ch as - * F1. Don't forget to disable the real key binding. - */ - /* [kVK_F1] =3D Q_KEY_CODE_POWER, */ - - [kVK_F1] =3D Q_KEY_CODE_F1, - [kVK_F2] =3D Q_KEY_CODE_F2, - [kVK_F3] =3D Q_KEY_CODE_F3, - [kVK_F4] =3D Q_KEY_CODE_F4, - [kVK_F5] =3D Q_KEY_CODE_F5, - [kVK_F6] =3D Q_KEY_CODE_F6, - [kVK_F7] =3D Q_KEY_CODE_F7, - [kVK_F8] =3D Q_KEY_CODE_F8, - [kVK_F9] =3D Q_KEY_CODE_F9, - [kVK_F10] =3D Q_KEY_CODE_F10, - [kVK_F11] =3D Q_KEY_CODE_F11, - [kVK_F12] =3D Q_KEY_CODE_F12, - [kVK_F13] =3D Q_KEY_CODE_PRINT, - [kVK_F14] =3D Q_KEY_CODE_SCROLL_LOCK, - [kVK_F15] =3D Q_KEY_CODE_PAUSE, - - /* - * The eject and volume keys can't be used here because they are handl= ed at - * a lower level than what an Application can see. - */ -}; =20 static int cocoa_keycode_to_qemu(int keycode) { - if (ARRAY_SIZE(mac_to_qkeycode_map) <=3D keycode) { + if (keycode >=3D qemu_input_map_osx_to_qcode_len) { fprintf(stderr, "(cocoa) warning unknown keycode 0x%x\n", keycode); return 0; } - return mac_to_qkeycode_map[keycode]; + return qemu_input_map_osx_to_qcode[keycode]; } =20 /* Displays an alert dialog box with the specified message */ diff --git a/ui/input-keymap.c b/ui/input-keymap.c index 1b53cb4d0a..de11205dca 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -6,6 +6,7 @@ #include "standard-headers/linux/input.h" =20 #include "ui/input-keymap-linux-to-qcode.c" +#include "ui/input-keymap-osx-to-qcode.c" #include "ui/input-keymap-qcode-to-adb.c" #include "ui/input-keymap-qcode-to-atset1.c" #include "ui/input-keymap-qcode-to-atset2.c" --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15027903349471018.3765182354678; Tue, 15 Aug 2017 02:45:34 -0700 (PDT) Received: from localhost ([::1]:48950 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYPl-00021s-PG for importer@patchew.org; Tue, 15 Aug 2017 05:45:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44101) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYH8-0002ZN-35 for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYH6-0000vN-53 for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60874) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYH5-0000un-S2 for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:36 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C65A1EE591 for ; Tue, 15 Aug 2017 09:36:34 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id AD81A61341; Tue, 15 Aug 2017 09:36:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C65A1EE591 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:13 +0100 Message-Id: <20170815093615.16453-11-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 15 Aug 2017 09:36:34 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 10/12] ui: convert the SDL2 frontend to keycodemapdb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The SDL2 scancodes are conveniently identical to the USB scancodes. Replace the sdl2_scancode_to_qcode table with an automatically generated table. Missing entries in sdl2_scancode_to_qcode now fixed: - 0x32 -> Q_KEY_CODE_BACKSLASH - 0x66 -> Q_KEY_CODE_POWER - 0x67 -> Q_KEY_CODE_KP_EQUALS - 0x74 -> Q_KEY_CODE_OPEN - 0x77 -> Q_KEY_CODE_FRONT - 0x7f -> Q_KEY_CODE_AUDIOMUTE - 0x80 -> Q_KEY_CODE_VOLUMEUP - 0x81 -> Q_KEY_CODE_VOLUMEDOWN - 0x85 -> Q_KEY_CODE_KP_COMMA - 0x87 -> Q_KEY_CODE_RO - 0x89 -> Q_KEY_CODE_YEN - 0x8a -> Q_KEY_CODE_HENKAN - 0x93 -> Q_KEY_CODE_HIRAGANA - 0xe8 -> Q_KEY_CODE_AUDIOPLAY - 0xe9 -> Q_KEY_CODE_AUDIOSTOP - 0xea -> Q_KEY_CODE_AUDIOPREV - 0xeb -> Q_KEY_CODE_AUDIONEXT - 0xed -> Q_KEY_CODE_VOLUMEUP - 0xee -> Q_KEY_CODE_VOLUMEDOWN - 0xef -> Q_KEY_CODE_AUDIOMUTE - 0xf1 -> Q_KEY_CODE_AC_BACK - 0xf2 -> Q_KEY_CODE_AC_FORWARD - 0xf3 -> Q_KEY_CODE_STOP - 0xf4 -> Q_KEY_CODE_FIND - 0xf8 -> Q_KEY_CODE_SLEEP - 0xfa -> Q_KEY_CODE_AC_REFRESH - 0xfb -> Q_KEY_CODE_CALCULATOR And some mistakes corrected: - 0x65 -> Q_KEY_CODE_COMPOSE, not duplicating Q_KEY_CODE_MENU Signed-off-by: Daniel P. Berrange --- include/ui/input.h | 3 + ui/Makefile.objs | 1 + ui/input-keymap.c | 1 + ui/sdl2-input.c | 16 +++- ui/sdl2-keymap.h | 267 -------------------------------------------------= ---- 5 files changed, 16 insertions(+), 272 deletions(-) delete mode 100644 ui/sdl2-keymap.h diff --git a/include/ui/input.h b/include/ui/input.h index df3eb439bf..dcf7e0e731 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -98,4 +98,7 @@ extern const guint16 qemu_input_map_qcode_to_sun[]; extern const guint qemu_input_map_qnum_to_qcode_len; extern const guint16 qemu_input_map_qnum_to_qcode[]; =20 +extern const guint qemu_input_map_usb_to_qcode_len; +extern const guint16 qemu_input_map_usb_to_qcode[]; + #endif /* INPUT_H */ diff --git a/ui/Makefile.objs b/ui/Makefile.objs index d35634cdc7..0e5821f6eb 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -64,6 +64,7 @@ KEYCODEMAP_FILES =3D \ ui/input-keymap-qcode-to-qnum.c \ ui/input-keymap-qcode-to-sun.c \ ui/input-keymap-qnum-to-qcode.c \ + ui/input-keymap-usb-to-qcode.c \ $(NULL) =20 GENERATED_FILES +=3D $(KEYCODEMAP_FILES) diff --git a/ui/input-keymap.c b/ui/input-keymap.c index de11205dca..ad98b153cf 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -15,6 +15,7 @@ #include "ui/input-keymap-qcode-to-qnum.c" #include "ui/input-keymap-qcode-to-sun.c" #include "ui/input-keymap-qnum-to-qcode.c" +#include "ui/input-keymap-usb-to-qcode.c" =20 int qemu_input_linux_to_qcode(unsigned int lnx) { diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c index 6e315ae800..605d781971 100644 --- a/ui/sdl2-input.c +++ b/ui/sdl2-input.c @@ -30,8 +30,6 @@ #include "ui/sdl2.h" #include "sysemu/sysemu.h" =20 -#include "sdl2-keymap.h" - static uint8_t modifiers_state[SDL_NUM_SCANCODES]; =20 void sdl2_reset_keys(struct sdl2_console *scon) @@ -39,9 +37,11 @@ void sdl2_reset_keys(struct sdl2_console *scon) QemuConsole *con =3D scon ? scon->dcl.con : NULL; int i; =20 - for (i =3D 0; i < SDL_NUM_SCANCODES; i++) { + for (i =3D 0 ; + i < SDL_NUM_SCANCODES && i < qemu_input_map_usb_to_qcode_len ; + i++) { if (modifiers_state[i]) { - int qcode =3D sdl2_scancode_to_qcode[i]; + int qcode =3D qemu_input_map_usb_to_qcode[i]; qemu_input_event_send_key_qcode(con, qcode, false); modifiers_state[i] =3D 0; } @@ -51,9 +51,15 @@ void sdl2_reset_keys(struct sdl2_console *scon) void sdl2_process_key(struct sdl2_console *scon, SDL_KeyboardEvent *ev) { - int qcode =3D sdl2_scancode_to_qcode[ev->keysym.scancode]; + int qcode; QemuConsole *con =3D scon ? scon->dcl.con : NULL; =20 + if (ev->keysym.scancode >=3D qemu_input_map_usb_to_qcode_len) { + return; + } + + qcode =3D qemu_input_map_usb_to_qcode[ev->keysym.scancode]; + if (!qemu_console_is_graphic(con)) { if (ev->type =3D=3D SDL_KEYDOWN) { switch (ev->keysym.scancode) { diff --git a/ui/sdl2-keymap.h b/ui/sdl2-keymap.h deleted file mode 100644 index cbedaa477d..0000000000 --- a/ui/sdl2-keymap.h +++ /dev/null @@ -1,267 +0,0 @@ - -/* map SDL2 scancodes to QKeyCode */ - -static const int sdl2_scancode_to_qcode[SDL_NUM_SCANCODES] =3D { - [SDL_SCANCODE_A] =3D Q_KEY_CODE_A, - [SDL_SCANCODE_B] =3D Q_KEY_CODE_B, - [SDL_SCANCODE_C] =3D Q_KEY_CODE_C, - [SDL_SCANCODE_D] =3D Q_KEY_CODE_D, - [SDL_SCANCODE_E] =3D Q_KEY_CODE_E, - [SDL_SCANCODE_F] =3D Q_KEY_CODE_F, - [SDL_SCANCODE_G] =3D Q_KEY_CODE_G, - [SDL_SCANCODE_H] =3D Q_KEY_CODE_H, - [SDL_SCANCODE_I] =3D Q_KEY_CODE_I, - [SDL_SCANCODE_J] =3D Q_KEY_CODE_J, - [SDL_SCANCODE_K] =3D Q_KEY_CODE_K, - [SDL_SCANCODE_L] =3D Q_KEY_CODE_L, - [SDL_SCANCODE_M] =3D Q_KEY_CODE_M, - [SDL_SCANCODE_N] =3D Q_KEY_CODE_N, - [SDL_SCANCODE_O] =3D Q_KEY_CODE_O, - [SDL_SCANCODE_P] =3D Q_KEY_CODE_P, - [SDL_SCANCODE_Q] =3D Q_KEY_CODE_Q, - [SDL_SCANCODE_R] =3D Q_KEY_CODE_R, - [SDL_SCANCODE_S] =3D Q_KEY_CODE_S, - [SDL_SCANCODE_T] =3D Q_KEY_CODE_T, - [SDL_SCANCODE_U] =3D Q_KEY_CODE_U, - [SDL_SCANCODE_V] =3D Q_KEY_CODE_V, - [SDL_SCANCODE_W] =3D Q_KEY_CODE_W, - [SDL_SCANCODE_X] =3D Q_KEY_CODE_X, - [SDL_SCANCODE_Y] =3D Q_KEY_CODE_Y, - [SDL_SCANCODE_Z] =3D Q_KEY_CODE_Z, - - [SDL_SCANCODE_1] =3D Q_KEY_CODE_1, - [SDL_SCANCODE_2] =3D Q_KEY_CODE_2, - [SDL_SCANCODE_3] =3D Q_KEY_CODE_3, - [SDL_SCANCODE_4] =3D Q_KEY_CODE_4, - [SDL_SCANCODE_5] =3D Q_KEY_CODE_5, - [SDL_SCANCODE_6] =3D Q_KEY_CODE_6, - [SDL_SCANCODE_7] =3D Q_KEY_CODE_7, - [SDL_SCANCODE_8] =3D Q_KEY_CODE_8, - [SDL_SCANCODE_9] =3D Q_KEY_CODE_9, - [SDL_SCANCODE_0] =3D Q_KEY_CODE_0, - - [SDL_SCANCODE_RETURN] =3D Q_KEY_CODE_RET, - [SDL_SCANCODE_ESCAPE] =3D Q_KEY_CODE_ESC, - [SDL_SCANCODE_BACKSPACE] =3D Q_KEY_CODE_BACKSPACE, - [SDL_SCANCODE_TAB] =3D Q_KEY_CODE_TAB, - [SDL_SCANCODE_SPACE] =3D Q_KEY_CODE_SPC, - [SDL_SCANCODE_MINUS] =3D Q_KEY_CODE_MINUS, - [SDL_SCANCODE_EQUALS] =3D Q_KEY_CODE_EQUAL, - [SDL_SCANCODE_LEFTBRACKET] =3D Q_KEY_CODE_BRACKET_LEFT, - [SDL_SCANCODE_RIGHTBRACKET] =3D Q_KEY_CODE_BRACKET_RIGHT, - [SDL_SCANCODE_BACKSLASH] =3D Q_KEY_CODE_BACKSLASH, -#if 0 - [SDL_SCANCODE_NONUSHASH] =3D Q_KEY_CODE_NONUSHASH, -#endif - [SDL_SCANCODE_SEMICOLON] =3D Q_KEY_CODE_SEMICOLON, - [SDL_SCANCODE_APOSTROPHE] =3D Q_KEY_CODE_APOSTROPHE, - [SDL_SCANCODE_GRAVE] =3D Q_KEY_CODE_GRAVE_ACCENT, - [SDL_SCANCODE_COMMA] =3D Q_KEY_CODE_COMMA, - [SDL_SCANCODE_PERIOD] =3D Q_KEY_CODE_DOT, - [SDL_SCANCODE_SLASH] =3D Q_KEY_CODE_SLASH, - [SDL_SCANCODE_CAPSLOCK] =3D Q_KEY_CODE_CAPS_LOCK, - - [SDL_SCANCODE_F1] =3D Q_KEY_CODE_F1, - [SDL_SCANCODE_F2] =3D Q_KEY_CODE_F2, - [SDL_SCANCODE_F3] =3D Q_KEY_CODE_F3, - [SDL_SCANCODE_F4] =3D Q_KEY_CODE_F4, - [SDL_SCANCODE_F5] =3D Q_KEY_CODE_F5, - [SDL_SCANCODE_F6] =3D Q_KEY_CODE_F6, - [SDL_SCANCODE_F7] =3D Q_KEY_CODE_F7, - [SDL_SCANCODE_F8] =3D Q_KEY_CODE_F8, - [SDL_SCANCODE_F9] =3D Q_KEY_CODE_F9, - [SDL_SCANCODE_F10] =3D Q_KEY_CODE_F10, - [SDL_SCANCODE_F11] =3D Q_KEY_CODE_F11, - [SDL_SCANCODE_F12] =3D Q_KEY_CODE_F12, - - [SDL_SCANCODE_PRINTSCREEN] =3D Q_KEY_CODE_PRINT, - [SDL_SCANCODE_SCROLLLOCK] =3D Q_KEY_CODE_SCROLL_LOCK, - [SDL_SCANCODE_PAUSE] =3D Q_KEY_CODE_PAUSE, - [SDL_SCANCODE_INSERT] =3D Q_KEY_CODE_INSERT, - [SDL_SCANCODE_HOME] =3D Q_KEY_CODE_HOME, - [SDL_SCANCODE_PAGEUP] =3D Q_KEY_CODE_PGUP, - [SDL_SCANCODE_DELETE] =3D Q_KEY_CODE_DELETE, - [SDL_SCANCODE_END] =3D Q_KEY_CODE_END, - [SDL_SCANCODE_PAGEDOWN] =3D Q_KEY_CODE_PGDN, - [SDL_SCANCODE_RIGHT] =3D Q_KEY_CODE_RIGHT, - [SDL_SCANCODE_LEFT] =3D Q_KEY_CODE_LEFT, - [SDL_SCANCODE_DOWN] =3D Q_KEY_CODE_DOWN, - [SDL_SCANCODE_UP] =3D Q_KEY_CODE_UP, - [SDL_SCANCODE_NUMLOCKCLEAR] =3D Q_KEY_CODE_NUM_LOCK, - - [SDL_SCANCODE_KP_DIVIDE] =3D Q_KEY_CODE_KP_DIVIDE, - [SDL_SCANCODE_KP_MULTIPLY] =3D Q_KEY_CODE_KP_MULTIPLY, - [SDL_SCANCODE_KP_MINUS] =3D Q_KEY_CODE_KP_SUBTRACT, - [SDL_SCANCODE_KP_PLUS] =3D Q_KEY_CODE_KP_ADD, - [SDL_SCANCODE_KP_ENTER] =3D Q_KEY_CODE_KP_ENTER, - [SDL_SCANCODE_KP_1] =3D Q_KEY_CODE_KP_1, - [SDL_SCANCODE_KP_2] =3D Q_KEY_CODE_KP_2, - [SDL_SCANCODE_KP_3] =3D Q_KEY_CODE_KP_3, - [SDL_SCANCODE_KP_4] =3D Q_KEY_CODE_KP_4, - [SDL_SCANCODE_KP_5] =3D Q_KEY_CODE_KP_5, - [SDL_SCANCODE_KP_6] =3D Q_KEY_CODE_KP_6, - [SDL_SCANCODE_KP_7] =3D Q_KEY_CODE_KP_7, - [SDL_SCANCODE_KP_8] =3D Q_KEY_CODE_KP_8, - [SDL_SCANCODE_KP_9] =3D Q_KEY_CODE_KP_9, - [SDL_SCANCODE_KP_0] =3D Q_KEY_CODE_KP_0, - [SDL_SCANCODE_KP_PERIOD] =3D Q_KEY_CODE_KP_DECIMAL, - - [SDL_SCANCODE_NONUSBACKSLASH] =3D Q_KEY_CODE_LESS, - [SDL_SCANCODE_APPLICATION] =3D Q_KEY_CODE_MENU, -#if 0 - [SDL_SCANCODE_POWER] =3D Q_KEY_CODE_POWER, - [SDL_SCANCODE_KP_EQUALS] =3D Q_KEY_CODE_KP_EQUALS, - - [SDL_SCANCODE_F13] =3D Q_KEY_CODE_F13, - [SDL_SCANCODE_F14] =3D Q_KEY_CODE_F14, - [SDL_SCANCODE_F15] =3D Q_KEY_CODE_F15, - [SDL_SCANCODE_F16] =3D Q_KEY_CODE_F16, - [SDL_SCANCODE_F17] =3D Q_KEY_CODE_F17, - [SDL_SCANCODE_F18] =3D Q_KEY_CODE_F18, - [SDL_SCANCODE_F19] =3D Q_KEY_CODE_F19, - [SDL_SCANCODE_F20] =3D Q_KEY_CODE_F20, - [SDL_SCANCODE_F21] =3D Q_KEY_CODE_F21, - [SDL_SCANCODE_F22] =3D Q_KEY_CODE_F22, - [SDL_SCANCODE_F23] =3D Q_KEY_CODE_F23, - [SDL_SCANCODE_F24] =3D Q_KEY_CODE_F24, - - [SDL_SCANCODE_EXECUTE] =3D Q_KEY_CODE_EXECUTE, -#endif - [SDL_SCANCODE_HELP] =3D Q_KEY_CODE_HELP, - [SDL_SCANCODE_MENU] =3D Q_KEY_CODE_MENU, -#if 0 - [SDL_SCANCODE_SELECT] =3D Q_KEY_CODE_SELECT, -#endif - [SDL_SCANCODE_STOP] =3D Q_KEY_CODE_STOP, - [SDL_SCANCODE_AGAIN] =3D Q_KEY_CODE_AGAIN, - [SDL_SCANCODE_UNDO] =3D Q_KEY_CODE_UNDO, - [SDL_SCANCODE_CUT] =3D Q_KEY_CODE_CUT, - [SDL_SCANCODE_COPY] =3D Q_KEY_CODE_COPY, - [SDL_SCANCODE_PASTE] =3D Q_KEY_CODE_PASTE, - [SDL_SCANCODE_FIND] =3D Q_KEY_CODE_FIND, -#if 0 - [SDL_SCANCODE_MUTE] =3D Q_KEY_CODE_MUTE, - [SDL_SCANCODE_VOLUMEUP] =3D Q_KEY_CODE_VOLUMEUP, - [SDL_SCANCODE_VOLUMEDOWN] =3D Q_KEY_CODE_VOLUMEDOWN, - - [SDL_SCANCODE_KP_COMMA] =3D Q_KEY_CODE_KP_COMMA, - [SDL_SCANCODE_KP_EQUALSAS400] =3D Q_KEY_CODE_KP_EQUALSAS400, - - [SDL_SCANCODE_INTERNATIONAL1] =3D Q_KEY_CODE_INTERNATIONAL1, - [SDL_SCANCODE_INTERNATIONAL2] =3D Q_KEY_CODE_INTERNATIONAL2, - [SDL_SCANCODE_INTERNATIONAL3] =3D Q_KEY_CODE_INTERNATIONAL3, - [SDL_SCANCODE_INTERNATIONAL4] =3D Q_KEY_CODE_INTERNATIONAL4, - [SDL_SCANCODE_INTERNATIONAL5] =3D Q_KEY_CODE_INTERNATIONAL5, - [SDL_SCANCODE_INTERNATIONAL6] =3D Q_KEY_CODE_INTERNATIONAL6, - [SDL_SCANCODE_INTERNATIONAL7] =3D Q_KEY_CODE_INTERNATIONAL7, - [SDL_SCANCODE_INTERNATIONAL8] =3D Q_KEY_CODE_INTERNATIONAL8, - [SDL_SCANCODE_INTERNATIONAL9] =3D Q_KEY_CODE_INTERNATIONAL9, - [SDL_SCANCODE_LANG1] =3D Q_KEY_CODE_LANG1, - [SDL_SCANCODE_LANG2] =3D Q_KEY_CODE_LANG2, - [SDL_SCANCODE_LANG3] =3D Q_KEY_CODE_LANG3, - [SDL_SCANCODE_LANG4] =3D Q_KEY_CODE_LANG4, - [SDL_SCANCODE_LANG5] =3D Q_KEY_CODE_LANG5, - [SDL_SCANCODE_LANG6] =3D Q_KEY_CODE_LANG6, - [SDL_SCANCODE_LANG7] =3D Q_KEY_CODE_LANG7, - [SDL_SCANCODE_LANG8] =3D Q_KEY_CODE_LANG8, - [SDL_SCANCODE_LANG9] =3D Q_KEY_CODE_LANG9, - [SDL_SCANCODE_ALTERASE] =3D Q_KEY_CODE_ALTERASE, -#endif - [SDL_SCANCODE_SYSREQ] =3D Q_KEY_CODE_SYSRQ, -#if 0 - [SDL_SCANCODE_CANCEL] =3D Q_KEY_CODE_CANCEL, - [SDL_SCANCODE_CLEAR] =3D Q_KEY_CODE_CLEAR, - [SDL_SCANCODE_PRIOR] =3D Q_KEY_CODE_PRIOR, - [SDL_SCANCODE_RETURN2] =3D Q_KEY_CODE_RETURN2, - [SDL_SCANCODE_SEPARATOR] =3D Q_KEY_CODE_SEPARATOR, - [SDL_SCANCODE_OUT] =3D Q_KEY_CODE_OUT, - [SDL_SCANCODE_OPER] =3D Q_KEY_CODE_OPER, - [SDL_SCANCODE_CLEARAGAIN] =3D Q_KEY_CODE_CLEARAGAIN, - [SDL_SCANCODE_CRSEL] =3D Q_KEY_CODE_CRSEL, - [SDL_SCANCODE_EXSEL] =3D Q_KEY_CODE_EXSEL, - [SDL_SCANCODE_KP_00] =3D Q_KEY_CODE_KP_00, - [SDL_SCANCODE_KP_000] =3D Q_KEY_CODE_KP_000, - [SDL_SCANCODE_THOUSANDSSEPARATOR] =3D Q_KEY_CODE_THOUSANDSSEPARATOR, - [SDL_SCANCODE_DECIMALSEPARATOR] =3D Q_KEY_CODE_DECIMALSEPARATOR, - [SDL_SCANCODE_CURRENCYUNIT] =3D Q_KEY_CODE_CURRENCYUNIT, - [SDL_SCANCODE_CURRENCYSUBUNIT] =3D Q_KEY_CODE_CURRENCYSUBUNIT, - [SDL_SCANCODE_KP_LEFTPAREN] =3D Q_KEY_CODE_KP_LEFTPAREN, - [SDL_SCANCODE_KP_RIGHTPAREN] =3D Q_KEY_CODE_KP_RIGHTPAREN, - [SDL_SCANCODE_KP_LEFTBRACE] =3D Q_KEY_CODE_KP_LEFTBRACE, - [SDL_SCANCODE_KP_RIGHTBRACE] =3D Q_KEY_CODE_KP_RIGHTBRACE, - [SDL_SCANCODE_KP_TAB] =3D Q_KEY_CODE_KP_TAB, - [SDL_SCANCODE_KP_BACKSPACE] =3D Q_KEY_CODE_KP_BACKSPACE, - [SDL_SCANCODE_KP_A] =3D Q_KEY_CODE_KP_A, - [SDL_SCANCODE_KP_B] =3D Q_KEY_CODE_KP_B, - [SDL_SCANCODE_KP_C] =3D Q_KEY_CODE_KP_C, - [SDL_SCANCODE_KP_D] =3D Q_KEY_CODE_KP_D, - [SDL_SCANCODE_KP_E] =3D Q_KEY_CODE_KP_E, - [SDL_SCANCODE_KP_F] =3D Q_KEY_CODE_KP_F, - [SDL_SCANCODE_KP_XOR] =3D Q_KEY_CODE_KP_XOR, - [SDL_SCANCODE_KP_POWER] =3D Q_KEY_CODE_KP_POWER, - [SDL_SCANCODE_KP_PERCENT] =3D Q_KEY_CODE_KP_PERCENT, - [SDL_SCANCODE_KP_LESS] =3D Q_KEY_CODE_KP_LESS, - [SDL_SCANCODE_KP_GREATER] =3D Q_KEY_CODE_KP_GREATER, - [SDL_SCANCODE_KP_AMPERSAND] =3D Q_KEY_CODE_KP_AMPERSAND, - [SDL_SCANCODE_KP_DBLAMPERSAND] =3D Q_KEY_CODE_KP_DBLAMPERSAND, - [SDL_SCANCODE_KP_VERTICALBAR] =3D Q_KEY_CODE_KP_VERTICALBAR, - [SDL_SCANCODE_KP_DBLVERTICALBAR] =3D Q_KEY_CODE_KP_DBLVERTICALBAR, - [SDL_SCANCODE_KP_COLON] =3D Q_KEY_CODE_KP_COLON, - [SDL_SCANCODE_KP_HASH] =3D Q_KEY_CODE_KP_HASH, - [SDL_SCANCODE_KP_SPACE] =3D Q_KEY_CODE_KP_SPACE, - [SDL_SCANCODE_KP_AT] =3D Q_KEY_CODE_KP_AT, - [SDL_SCANCODE_KP_EXCLAM] =3D Q_KEY_CODE_KP_EXCLAM, - [SDL_SCANCODE_KP_MEMSTORE] =3D Q_KEY_CODE_KP_MEMSTORE, - [SDL_SCANCODE_KP_MEMRECALL] =3D Q_KEY_CODE_KP_MEMRECALL, - [SDL_SCANCODE_KP_MEMCLEAR] =3D Q_KEY_CODE_KP_MEMCLEAR, - [SDL_SCANCODE_KP_MEMADD] =3D Q_KEY_CODE_KP_MEMADD, - [SDL_SCANCODE_KP_MEMSUBTRACT] =3D Q_KEY_CODE_KP_MEMSUBTRACT, - [SDL_SCANCODE_KP_MEMMULTIPLY] =3D Q_KEY_CODE_KP_MEMMULTIPLY, - [SDL_SCANCODE_KP_MEMDIVIDE] =3D Q_KEY_CODE_KP_MEMDIVIDE, - [SDL_SCANCODE_KP_PLUSMINUS] =3D Q_KEY_CODE_KP_PLUSMINUS, - [SDL_SCANCODE_KP_CLEAR] =3D Q_KEY_CODE_KP_CLEAR, - [SDL_SCANCODE_KP_CLEARENTRY] =3D Q_KEY_CODE_KP_CLEARENTRY, - [SDL_SCANCODE_KP_BINARY] =3D Q_KEY_CODE_KP_BINARY, - [SDL_SCANCODE_KP_OCTAL] =3D Q_KEY_CODE_KP_OCTAL, - [SDL_SCANCODE_KP_DECIMAL] =3D Q_KEY_CODE_KP_DECIMAL, - [SDL_SCANCODE_KP_HEXADECIMAL] =3D Q_KEY_CODE_KP_HEXADECIMAL, -#endif - [SDL_SCANCODE_LCTRL] =3D Q_KEY_CODE_CTRL, - [SDL_SCANCODE_LSHIFT] =3D Q_KEY_CODE_SHIFT, - [SDL_SCANCODE_LALT] =3D Q_KEY_CODE_ALT, - [SDL_SCANCODE_LGUI] =3D Q_KEY_CODE_META_L, - [SDL_SCANCODE_RCTRL] =3D Q_KEY_CODE_CTRL_R, - [SDL_SCANCODE_RSHIFT] =3D Q_KEY_CODE_SHIFT_R, - [SDL_SCANCODE_RALT] =3D Q_KEY_CODE_ALT_R, - [SDL_SCANCODE_RGUI] =3D Q_KEY_CODE_META_R, -#if 0 - [SDL_SCANCODE_MODE] =3D Q_KEY_CODE_MODE, - [SDL_SCANCODE_AUDIONEXT] =3D Q_KEY_CODE_AUDIONEXT, - [SDL_SCANCODE_AUDIOPREV] =3D Q_KEY_CODE_AUDIOPREV, - [SDL_SCANCODE_AUDIOSTOP] =3D Q_KEY_CODE_AUDIOSTOP, - [SDL_SCANCODE_AUDIOPLAY] =3D Q_KEY_CODE_AUDIOPLAY, - [SDL_SCANCODE_AUDIOMUTE] =3D Q_KEY_CODE_AUDIOMUTE, - [SDL_SCANCODE_MEDIASELECT] =3D Q_KEY_CODE_MEDIASELECT, - [SDL_SCANCODE_WWW] =3D Q_KEY_CODE_WWW, - [SDL_SCANCODE_MAIL] =3D Q_KEY_CODE_MAIL, - [SDL_SCANCODE_CALCULATOR] =3D Q_KEY_CODE_CALCULATOR, - [SDL_SCANCODE_COMPUTER] =3D Q_KEY_CODE_COMPUTER, - [SDL_SCANCODE_AC_SEARCH] =3D Q_KEY_CODE_AC_SEARCH, - [SDL_SCANCODE_AC_HOME] =3D Q_KEY_CODE_AC_HOME, - [SDL_SCANCODE_AC_BACK] =3D Q_KEY_CODE_AC_BACK, - [SDL_SCANCODE_AC_FORWARD] =3D Q_KEY_CODE_AC_FORWARD, - [SDL_SCANCODE_AC_STOP] =3D Q_KEY_CODE_AC_STOP, - [SDL_SCANCODE_AC_REFRESH] =3D Q_KEY_CODE_AC_REFRESH, - [SDL_SCANCODE_AC_BOOKMARKS] =3D Q_KEY_CODE_AC_BOOKMARKS, - [SDL_SCANCODE_BRIGHTNESSDOWN] =3D Q_KEY_CODE_BRIGHTNESSDOWN, - [SDL_SCANCODE_BRIGHTNESSUP] =3D Q_KEY_CODE_BRIGHTNESSUP, - [SDL_SCANCODE_DISPLAYSWITCH] =3D Q_KEY_CODE_DISPLAYSWITCH, - [SDL_SCANCODE_KBDILLUMTOGGLE] =3D Q_KEY_CODE_KBDILLUMTOGGLE, - [SDL_SCANCODE_KBDILLUMDOWN] =3D Q_KEY_CODE_KBDILLUMDOWN, - [SDL_SCANCODE_KBDILLUMUP] =3D Q_KEY_CODE_KBDILLUMUP, - [SDL_SCANCODE_EJECT] =3D Q_KEY_CODE_EJECT, - [SDL_SCANCODE_SLEEP] =3D Q_KEY_CODE_SLEEP, - [SDL_SCANCODE_APP1] =3D Q_KEY_CODE_APP1, - [SDL_SCANCODE_APP2] =3D Q_KEY_CODE_APP2, -#endif -}; --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502790232370475.52020654011903; Tue, 15 Aug 2017 02:43:52 -0700 (PDT) Received: from localhost ([::1]:48817 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYO6-0000Sy-Ja for importer@patchew.org; Tue, 15 Aug 2017 05:43:50 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44133) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYHC-0002dj-6R for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYH7-0000wA-TE for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:42 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58058) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYH7-0000vj-Fs for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:37 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 75BF36E5D2 for ; Tue, 15 Aug 2017 09:36:36 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id 15FFE60657; Tue, 15 Aug 2017 09:36:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 75BF36E5D2 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:14 +0100 Message-Id: <20170815093615.16453-12-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 15 Aug 2017 09:36:36 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 11/12] ui: convert GTK and SDL1 frontends to keycodemapdb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The x_keycode_to_pc_keycode and evdev_keycode_to_pc_keycode tables are replaced with automatically generated tables. In addition the X11 heuristics are improved to detect running on XQuartz and XWin X11 servers, to activate the correct OS-X and Win32 keycode maps. Signed-off-by: Daniel P. Berrange --- include/ui/input.h | 21 +++++ ui/Makefile.objs | 12 ++- ui/gtk.c | 205 +++++++++++++++++++++++++------------------ ui/input-keymap.c | 7 ++ ui/sdl.c | 105 +++++++--------------- ui/trace-events | 9 +- ui/x_keymap.c | 250 ++++++++++++++++++++-----------------------------= ---- ui/x_keymap.h | 8 +- 8 files changed, 300 insertions(+), 317 deletions(-) diff --git a/include/ui/input.h b/include/ui/input.h index dcf7e0e731..1c1731ef18 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -68,6 +68,9 @@ void qemu_input_check_mode_change(void); void qemu_add_mouse_mode_change_notifier(Notifier *notify); void qemu_remove_mouse_mode_change_notifier(Notifier *notify); =20 +extern const guint qemu_input_map_atset1_to_qcode_len; +extern const guint16 qemu_input_map_atset1_to_qcode[]; + extern const guint qemu_input_map_linux_to_qcode_len; extern const guint16 qemu_input_map_linux_to_qcode[]; =20 @@ -101,4 +104,22 @@ extern const guint16 qemu_input_map_qnum_to_qcode[]; extern const guint qemu_input_map_usb_to_qcode_len; extern const guint16 qemu_input_map_usb_to_qcode[]; =20 +extern const guint qemu_input_map_win32_to_qcode_len; +extern const guint16 qemu_input_map_win32_to_qcode[]; + +extern const guint qemu_input_map_x11_to_qcode_len; +extern const guint16 qemu_input_map_x11_to_qcode[]; + +extern const guint qemu_input_map_xorgevdev_to_qcode_len; +extern const guint16 qemu_input_map_xorgevdev_to_qcode[]; + +extern const guint qemu_input_map_xorgkbd_to_qcode_len; +extern const guint16 qemu_input_map_xorgkbd_to_qcode[]; + +extern const guint qemu_input_map_xorgxquartz_to_qcode_len; +extern const guint16 qemu_input_map_xorgxquartz_to_qcode[]; + +extern const guint qemu_input_map_xorgxwin_to_qcode_len; +extern const guint16 qemu_input_map_xorgxwin_to_qcode[]; + #endif /* INPUT_H */ diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 0e5821f6eb..6cd39bf49d 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -11,11 +11,12 @@ common-obj-y +=3D keymaps.o console.o cursor.o qemu-pix= man.o common-obj-y +=3D input.o input-keymap.o input-legacy.o common-obj-$(CONFIG_LINUX) +=3D input-linux.o common-obj-$(CONFIG_SPICE) +=3D spice-core.o spice-input.o spice-display.o -common-obj-$(CONFIG_SDL) +=3D sdl.mo x_keymap.o +common-obj-$(CONFIG_SDL) +=3D sdl.mo common-obj-$(CONFIG_COCOA) +=3D cocoa.o common-obj-$(CONFIG_CURSES) +=3D curses.o common-obj-$(CONFIG_VNC) +=3D $(vnc-obj-y) -common-obj-$(CONFIG_GTK) +=3D gtk.o x_keymap.o +common-obj-$(CONFIG_GTK) +=3D gtk.o +common-obj-$(if $(CONFIG_WIN32),n,$(if $(CONFIG_SDL),y,$(CONFIG_GTK))) += =3D x_keymap.o =20 ifeq ($(CONFIG_SDLABI),1.2) sdl.mo-objs :=3D sdl.o sdl_zoom.o @@ -54,6 +55,7 @@ KEYCODEMAP_GEN =3D $(SRC_PATH)/ui/keycodemapdb/tools/keym= ap-gen KEYCODEMAP_CSV =3D $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv =20 KEYCODEMAP_FILES =3D \ + ui/input-keymap-atset1-to-qcode.c \ ui/input-keymap-linux-to-qcode.c \ ui/input-keymap-osx-to-qcode.c \ ui/input-keymap-qcode-to-adb.c \ @@ -65,6 +67,12 @@ KEYCODEMAP_FILES =3D \ ui/input-keymap-qcode-to-sun.c \ ui/input-keymap-qnum-to-qcode.c \ ui/input-keymap-usb-to-qcode.c \ + ui/input-keymap-win32-to-qcode.c \ + ui/input-keymap-x11-to-qcode.c \ + ui/input-keymap-xorgevdev-to-qcode.c \ + ui/input-keymap-xorgkbd-to-qcode.c \ + ui/input-keymap-xorgxquartz-to-qcode.c \ + ui/input-keymap-xorgxwin-to-qcode.c \ $(NULL) =20 GENERATED_FILES +=3D $(KEYCODEMAP_FILES) diff --git a/ui/gtk.c b/ui/gtk.c index 5bd87c265a..398f3aad81 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -52,7 +52,6 @@ #include "ui/input.h" #include "sysemu/sysemu.h" #include "qmp-commands.h" -#include "x_keymap.h" #include "keymaps.h" #include "chardev/char.h" #include "qom/object.h" @@ -65,6 +64,48 @@ #define VC_SCALE_MIN 0.25 #define VC_SCALE_STEP 0.25 =20 +#ifdef GDK_WINDOWING_X11 +#include "ui/x_keymap.h" + +/* Gtk2 compat */ +#ifndef GDK_IS_X11_DISPLAY +#define GDK_IS_X11_DISPLAY(dpy) (dpy !=3D NULL) +#endif +#endif + + +#ifdef GDK_WINDOWING_WAYLAND +/* Gtk2 compat */ +#ifndef GDK_IS_WAYLAND_DISPLAY +#define GDK_IS_WAYLAND_DISPLAY(dpy) (dpy !=3D NULL) +#endif +#endif + + +#ifdef GDK_WINDOWING_WIN32 +/* Gtk2 compat */ +#ifndef GDK_IS_WIN32_DISPLAY +#define GDK_IS_WIN32_DISPLAY(dpy) (dpy !=3D NULL) +#endif +#endif + + +#ifdef GDK_WINDOWING_BROADWAY +/* Gtk2 compat */ +#ifndef GDK_IS_BROADWAY_DISPLAY +#define GDK_IS_BROADWAY_DISPLAY(dpy) (dpy !=3D NULL) +#endif +#endif + + +#ifdef GDK_WINDOWING_QUARTZ +/* Gtk2 compat */ +#ifndef GDK_IS_QUARTZ_DISPLAY +#define GDK_IS_QUARTZ_DISPLAY(dpy) (dpy !=3D NULL) +#endif +#endif + + #if !defined(CONFIG_VTE) # define VTE_CHECK_VERSION(a, b, c) 0 #endif @@ -123,10 +164,19 @@ #define HOTKEY_MODIFIERS (GDK_CONTROL_MASK | GDK_MOD1_MASK) =20 static const int modifier_keycode[] =3D { - /* shift, control, alt keys, meta keys, both left & right */ - 0x2a, 0x36, 0x1d, 0x9d, 0x38, 0xb8, 0xdb, 0xdd, + Q_KEY_CODE_SHIFT, + Q_KEY_CODE_SHIFT_R, + Q_KEY_CODE_CTRL, + Q_KEY_CODE_CTRL_R, + Q_KEY_CODE_ALT, + Q_KEY_CODE_ALT_R, + Q_KEY_CODE_META_L, + Q_KEY_CODE_META_R, }; =20 +static const guint16 *keycode_map; +static size_t keycode_maplen; + struct GtkDisplayState { GtkWidget *window; =20 @@ -178,7 +228,6 @@ struct GtkDisplayState { bool external_pause_update; =20 bool modifier_pressed[ARRAY_SIZE(modifier_keycode)]; - bool has_evdev; bool ignore_keys; }; =20 @@ -412,18 +461,18 @@ static void gd_update_full_redraw(VirtualConsole *vc) static void gtk_release_modifiers(GtkDisplayState *s) { VirtualConsole *vc =3D gd_vc_find_current(s); - int i, keycode; + int i, qcode; =20 if (vc->type !=3D GD_VC_GFX || !qemu_console_is_graphic(vc->gfx.dcl.con)) { return; } for (i =3D 0; i < ARRAY_SIZE(modifier_keycode); i++) { - keycode =3D modifier_keycode[i]; + qcode =3D modifier_keycode[i]; if (!s->modifier_pressed[i]) { continue; } - qemu_input_event_send_key_number(vc->gfx.dcl.con, keycode, false); + qemu_input_event_send_key_qcode(vc->gfx.dcl.con, qcode, false); s->modifier_pressed[i] =3D false; } } @@ -1057,47 +1106,75 @@ static gboolean gd_scroll_event(GtkWidget *widget, = GdkEventScroll *scroll, return TRUE; } =20 -static int gd_map_keycode(GtkDisplayState *s, GdkDisplay *dpy, int gdk_key= code) + +static const guint16 *gd_get_keymap(size_t *maplen) { - int qemu_keycode; + GdkDisplay *dpy =3D gdk_display_get_default(); + +#ifdef GDK_WINDOWING_X11 + if (GDK_IS_X11_DISPLAY(dpy)) { + trace_gd_keymap_windowing("x11"); + return qemu_xkeymap_mapping_table( + gdk_x11_display_get_xdisplay(dpy), maplen); + } +#endif + +#ifdef GDK_WINDOWING_WAYLAND + if (GDK_IS_WAYLAND_DISPLAY(dpy)) { + trace_gd_keymap_windowing("wayland"); + *maplen =3D qemu_input_map_xorgevdev_to_qcode_len; + return qemu_input_map_xorgevdev_to_qcode; + } +#endif =20 #ifdef GDK_WINDOWING_WIN32 if (GDK_IS_WIN32_DISPLAY(dpy)) { - qemu_keycode =3D MapVirtualKey(gdk_keycode, MAPVK_VK_TO_VSC); - switch (qemu_keycode) { - case 103: /* alt gr */ - qemu_keycode =3D 56 | SCANCODE_GREY; - break; - } - return qemu_keycode; + trace_gd_keymap_windowing("win32"); + *maplen =3D qemu_input_map_win32_to_qcode_len; + return qemu_input_map_win32_to_qcode; } #endif =20 - if (gdk_keycode < 9) { - qemu_keycode =3D 0; - } else if (gdk_keycode < 97) { - qemu_keycode =3D gdk_keycode - 8; -#ifdef GDK_WINDOWING_X11 - } else if (GDK_IS_X11_DISPLAY(dpy) && gdk_keycode < 158) { - if (s->has_evdev) { - qemu_keycode =3D translate_evdev_keycode(gdk_keycode - 97); - } else { - qemu_keycode =3D translate_xfree86_keycode(gdk_keycode - 97); - } +#ifdef GDK_WINDOWING_QUARTZ + if (GDK_IS_QUARTZ_DISPLAY(dpy)) { + trace_gd_keymap_windowing("quartz"); + *maplen =3D qemu_input_map_osx_to_qcode_len; + return qemu_input_map_osx_to_qcode; + } #endif -#ifdef GDK_WINDOWING_WAYLAND - } else if (GDK_IS_WAYLAND_DISPLAY(dpy) && gdk_keycode < 158) { - qemu_keycode =3D translate_evdev_keycode(gdk_keycode - 97); + +#ifdef GDK_WINDOWING_BROADWAY + if (GDK_IS_BROADWAY_DISPLAY(dpy)) { + trace_gd_keymap_windowing("broadway"); + g_warning("experimental: using broadway, x11 virtual keysym\n" + "mapping - with very limited support. See also\n" + "https://bugzilla.gnome.org/show_bug.cgi?id=3D700105"); + *maplen =3D qemu_input_map_x11_to_qcode_len; + return qemu_input_map_x11_to_qcode; + } #endif - } else if (gdk_keycode =3D=3D 208) { /* Hiragana_Katakana */ - qemu_keycode =3D 0x70; - } else if (gdk_keycode =3D=3D 211) { /* backslash */ - qemu_keycode =3D 0x73; - } else { - qemu_keycode =3D 0; + + g_warning("Unsupported GDK Windowing platform.\n" + "Disabling extended keycode tables.\n" + "Please report to qemu-devel@nongnu.org\n" + "including the following information:\n" + "\n" + " - Operating system\n" + " - GDK Windowing system build\n"); + return NULL; +} + + +static int gd_map_keycode(int scancode) +{ + if (!keycode_map) { + return 0; + } + if (scancode > keycode_maplen) { + return 0; } =20 - return qemu_keycode; + return keycode_map[scancode]; } =20 static gboolean gd_text_key_down(GtkWidget *widget, @@ -1111,9 +1188,7 @@ static gboolean gd_text_key_down(GtkWidget *widget, } else if (key->length) { kbd_put_string_console(con, key->string, key->length); } else { - int num =3D gd_map_keycode(vc->s, gtk_widget_get_display(widget), - key->hardware_keycode); - int qcode =3D qemu_input_key_number_to_qcode(num); + int qcode =3D gd_map_keycode(key->hardware_keycode); kbd_put_qcode_console(con, qcode); } return TRUE; @@ -1123,8 +1198,7 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEv= entKey *key, void *opaque) { VirtualConsole *vc =3D opaque; GtkDisplayState *s =3D vc->s; - int gdk_keycode =3D key->hardware_keycode; - int qemu_keycode; + int qcode; int i; =20 if (s->ignore_keys) { @@ -1138,20 +1212,19 @@ static gboolean gd_key_event(GtkWidget *widget, Gdk= EventKey *key, void *opaque) return TRUE; } =20 - qemu_keycode =3D gd_map_keycode(s, gtk_widget_get_display(widget), - gdk_keycode); + qcode =3D gd_map_keycode(key->hardware_keycode); =20 - trace_gd_key_event(vc->label, gdk_keycode, qemu_keycode, + trace_gd_key_event(vc->label, key->hardware_keycode, qcode, (key->type =3D=3D GDK_KEY_PRESS) ? "down" : "up"); =20 for (i =3D 0; i < ARRAY_SIZE(modifier_keycode); i++) { - if (qemu_keycode =3D=3D modifier_keycode[i]) { + if (qcode =3D=3D modifier_keycode[i]) { s->modifier_pressed[i] =3D (key->type =3D=3D GDK_KEY_PRESS); } } =20 - qemu_input_event_send_key_number(vc->gfx.dcl.con, qemu_keycode, - key->type =3D=3D GDK_KEY_PRESS); + qemu_input_event_send_key_qcode(vc->gfx.dcl.con, qcode, + key->type =3D=3D GDK_KEY_PRESS); =20 return TRUE; } @@ -2195,38 +2268,6 @@ static void gd_create_menus(GtkDisplayState *s) gtk_window_add_accel_group(GTK_WINDOW(s->window), s->accel_group); } =20 -static void gd_set_keycode_type(GtkDisplayState *s) -{ -#ifdef GDK_WINDOWING_X11 - GdkDisplay *display =3D gtk_widget_get_display(s->window); - if (GDK_IS_X11_DISPLAY(display)) { - Display *x11_display =3D gdk_x11_display_get_xdisplay(display); - XkbDescPtr desc =3D XkbGetMap(x11_display, XkbGBN_AllComponentsMas= k, - XkbUseCoreKbd); - char *keycodes =3D NULL; - - if (desc && - (XkbGetNames(x11_display, XkbKeycodesNameMask, desc) =3D=3D Su= ccess)) { - keycodes =3D XGetAtomName(x11_display, desc->names->keycodes); - } - if (keycodes =3D=3D NULL) { - fprintf(stderr, "could not lookup keycode name\n"); - } else if (strstart(keycodes, "evdev", NULL)) { - s->has_evdev =3D true; - } else if (!strstart(keycodes, "xfree86", NULL)) { - fprintf(stderr, "unknown keycodes `%s', please report to " - "qemu-devel@nongnu.org\n", keycodes); - } - - if (desc) { - XkbFreeKeyboard(desc, XkbGBN_AllComponentsMask, True); - } - if (keycodes) { - XFree(keycodes); - } - } -#endif -} =20 static gboolean gtkinit; =20 @@ -2329,8 +2370,6 @@ void gtk_display_init(DisplayState *ds, bool full_scr= een, bool grab_on_hover) if (grab_on_hover) { gtk_menu_item_activate(GTK_MENU_ITEM(s->grab_on_hover_item)); } - - gd_set_keycode_type(s); } =20 void early_gtk_display_init(int opengl) @@ -2377,6 +2416,8 @@ void early_gtk_display_init(int opengl) break; } =20 + keycode_map =3D gd_get_keymap(&keycode_maplen); + #if defined(CONFIG_VTE) type_register(&char_gd_vc_type_info); #endif diff --git a/ui/input-keymap.c b/ui/input-keymap.c index ad98b153cf..908d58ea63 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -5,6 +5,7 @@ =20 #include "standard-headers/linux/input.h" =20 +#include "ui/input-keymap-atset1-to-qcode.c" #include "ui/input-keymap-linux-to-qcode.c" #include "ui/input-keymap-osx-to-qcode.c" #include "ui/input-keymap-qcode-to-adb.c" @@ -16,6 +17,12 @@ #include "ui/input-keymap-qcode-to-sun.c" #include "ui/input-keymap-qnum-to-qcode.c" #include "ui/input-keymap-usb-to-qcode.c" +#include "ui/input-keymap-win32-to-qcode.c" +#include "ui/input-keymap-x11-to-qcode.c" +#include "ui/input-keymap-xorgevdev-to-qcode.c" +#include "ui/input-keymap-xorgkbd-to-qcode.c" +#include "ui/input-keymap-xorgxquartz-to-qcode.c" +#include "ui/input-keymap-xorgxwin-to-qcode.c" =20 int qemu_input_linux_to_qcode(unsigned int lnx) { diff --git a/ui/sdl.c b/ui/sdl.c index 7b71a9ac58..afb4992da2 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -34,7 +34,9 @@ #include "ui/console.h" #include "ui/input.h" #include "sysemu/sysemu.h" +#ifndef WIN32 #include "x_keymap.h" +#endif #include "sdl_zoom.h" =20 static DisplayChangeListener *dcl; @@ -63,6 +65,8 @@ static SDL_PixelFormat host_format; static int scaling_active =3D 0; static Notifier mouse_mode_notifier; static int idle_counter; +static const guint16 *keycode_map; +static size_t keycode_maplen; =20 #define SDL_REFRESH_INTERVAL_BUSY 10 #define SDL_MAX_IDLE_COUNT (2 * GUI_REFRESH_INTERVAL_DEFAULT \ @@ -208,94 +212,45 @@ static uint8_t sdl_keyevent_to_keycode_generic(const = SDL_KeyboardEvent *ev) return keysym2scancode(kbd_layout, keysym) & SCANCODE_KEYMASK; } =20 -/* specific keyboard conversions from scan codes */ - -#if defined(_WIN32) =20 -static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev) +static const guint16 *sdl_get_keymap(size_t *maplen) { - return ev->keysym.scancode; -} - +#if defined(WIN32) + *maplen =3D qemu_input_map_atset1_to_qcode_len; + return qemu_input_map_atset1_to_qcode; #else - #if defined(SDL_VIDEO_DRIVER_X11) -#include - -static int check_for_evdev(void) -{ SDL_SysWMinfo info; - XkbDescPtr desc =3D NULL; - int has_evdev =3D 0; - char *keycodes =3D NULL; =20 SDL_VERSION(&info.version); - if (!SDL_GetWMInfo(&info)) { - return 0; + if (SDL_GetWMInfo(&info) > 0) { + return qemu_xkeymap_mapping_table( + info.info.x11.display, maplen); } - desc =3D XkbGetMap(info.info.x11.display, - XkbGBN_AllComponentsMask, - XkbUseCoreKbd); - if (desc && - (XkbGetNames(info.info.x11.display, - XkbKeycodesNameMask, desc) =3D=3D Success)) { - keycodes =3D XGetAtomName(info.info.x11.display, desc->names->keyc= odes); - if (keycodes =3D=3D NULL) { - fprintf(stderr, "could not lookup keycode name\n"); - } else if (strstart(keycodes, "evdev", NULL)) { - has_evdev =3D 1; - } else if (!strstart(keycodes, "xfree86", NULL)) { - fprintf(stderr, "unknown keycodes `%s', please report to " - "qemu-devel@nongnu.org\n", keycodes); - } - } - - if (desc) { - XkbFreeKeyboard(desc, XkbGBN_AllComponentsMask, True); - } - if (keycodes) { - XFree(keycodes); - } - return has_evdev; -} -#else -static int check_for_evdev(void) -{ - return 0; -} #endif + g_warning("Unsupported SDL video driver / platform.\n" + "Assuming Linux KBD scancodes, but probably wrong.\n" + "Please report to qemu-devel@nongnu.org\n" + "including the following information:\n" + "\n" + " - Operating system\n" + " - SDL video driver\n"); + *maplen =3D qemu_input_map_xorgkbd_to_qcode_len; + return qemu_input_map_xorgkbd_to_qcode; +#endif +} =20 static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev) { - int keycode; - static int has_evdev =3D -1; - - if (has_evdev =3D=3D -1) - has_evdev =3D check_for_evdev(); - - keycode =3D ev->keysym.scancode; - - if (keycode < 9) { - keycode =3D 0; - } else if (keycode < 97) { - keycode -=3D 8; /* just an offset */ - } else if (keycode < 158) { - /* use conversion table */ - if (has_evdev) - keycode =3D translate_evdev_keycode(keycode - 97); - else - keycode =3D translate_xfree86_keycode(keycode - 97); - } else if (keycode =3D=3D 208) { /* Hiragana_Katakana */ - keycode =3D 0x70; - } else if (keycode =3D=3D 211) { /* backslash */ - keycode =3D 0x73; - } else { - keycode =3D 0; + if (!keycode_map) { + return 0; + } + if (ev->keysym.scancode > keycode_maplen) { + return 0; } - return keycode; -} =20 -#endif + return keycode_map[ev->keysym.scancode]; +} =20 static void reset_keys(void) { @@ -995,6 +950,8 @@ void sdl_display_init(DisplayState *ds, int full_screen= , int no_frame) vi =3D SDL_GetVideoInfo(); host_format =3D *(vi->vfmt); =20 + keycode_map =3D sdl_get_keymap(&keycode_maplen); + /* Load a 32x32x4 image. White pixels are transparent. */ filename =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, "qemu-icon.bmp"); if (filename) { diff --git a/ui/trace-events b/ui/trace-events index 34c2213700..9a943f645d 100644 --- a/ui/trace-events +++ b/ui/trace-events @@ -18,9 +18,10 @@ ppm_save(const char *filename, void *display_surface) "%= s surface=3D%p" # ui/gtk.c gd_switch(const char *tab, int width, int height) "tab=3D%s, width=3D%d, h= eight=3D%d" gd_update(const char *tab, int x, int y, int w, int h) "tab=3D%s, x=3D%d, = y=3D%d, w=3D%d, h=3D%d" -gd_key_event(const char *tab, int gdk_keycode, int qemu_keycode, const cha= r *action) "tab=3D%s, translated GDK keycode %d to QEMU keycode %d (%s)" +gd_key_event(const char *tab, int gdk_keycode, int qkeycode, const char *a= ction) "tab=3D%s, translated GDK keycode %d to QKeyCode %d (%s)" gd_grab(const char *tab, const char *device, const char *reason) "tab=3D%s= , dev=3D%s, reason=3D%s" gd_ungrab(const char *tab, const char *device) "tab=3D%s, dev=3D%s" +gd_keymap_windowing(const char *name) "backend=3D%s" =20 # ui/vnc.c vnc_key_guest_leds(bool caps, bool num, bool scroll) "caps %d, num %d, scr= oll %d" @@ -51,3 +52,9 @@ qemu_spice_create_update(uint32_t left, uint32_t right, u= int32_t top, uint32_t b keymap_parse(const char *file) "file %s" keymap_add(const char *type, int sym, int code, const char *line) "%-6s sy= m=3D0x%04x code=3D0x%04x (line: %s)" keymap_unmapped(int sym) "sym=3D0x%04x" + +# ui/x_keymap.c +xkeymap_extension(const char *name) "extension '%s'" +xkeymap_vendor(const char *name) "vendor '%s'" +xkeymap_keycodes(const char *name) "keycodes '%s'" +xkeymap_keymap(const char *name) "keymap '%s'" diff --git a/ui/x_keymap.c b/ui/x_keymap.c index 27884851de..22e0e77c4d 100644 --- a/ui/x_keymap.c +++ b/ui/x_keymap.c @@ -1,169 +1,111 @@ /* - * QEMU SDL display driver + * QEMU X11 keymaps * - * Copyright (c) 2003 Fabrice Bellard + * Copyright (C) 2009-2010 Daniel P. Berrange + * Copyright (C) 2017 Red Hat, Inc * - * Permission is hereby granted, free of charge, to any person obtaining a= copy - * of this software and associated documentation files (the "Software"), t= o deal - * in the Software without restriction, including without limitation the r= ights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included= in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN - * THE SOFTWARE. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2 as + * published by the Free Software Foundation. */ + #include "qemu/osdep.h" -#include "qemu-common.h" + #include "x_keymap.h" +#include "trace.h" +#include "qemu/notify.h" +#include "ui/input.h" =20 -static const uint8_t x_keycode_to_pc_keycode[115] =3D { - 0xc7, /* 97 Home */ - 0xc8, /* 98 Up */ - 0xc9, /* 99 PgUp */ - 0xcb, /* 100 Left */ - 0x4c, /* 101 KP-5 */ - 0xcd, /* 102 Right */ - 0xcf, /* 103 End */ - 0xd0, /* 104 Down */ - 0xd1, /* 105 PgDn */ - 0xd2, /* 106 Ins */ - 0xd3, /* 107 Del */ - 0x9c, /* 108 Enter */ - 0x9d, /* 109 Ctrl-R */ - 0x0, /* 110 Pause */ - 0xb7, /* 111 Print */ - 0xb5, /* 112 Divide */ - 0xb8, /* 113 Alt-R */ - 0xc6, /* 114 Break */ - 0x0, /* 115 */ - 0x0, /* 116 */ - 0x0, /* 117 */ - 0x0, /* 118 */ - 0x0, /* 119 */ - 0x0, /* 120 */ - 0x0, /* 121 */ - 0x0, /* 122 */ - 0x0, /* 123 */ - 0x0, /* 124 */ - 0x0, /* 125 */ - 0x0, /* 126 */ - 0x0, /* 127 */ - 0x0, /* 128 */ - 0x79, /* 129 Henkan */ - 0x0, /* 130 */ - 0x7b, /* 131 Muhenkan */ - 0x0, /* 132 */ - 0x7d, /* 133 Yen */ - 0x0, /* 134 */ - 0x0, /* 135 */ - 0x47, /* 136 KP_7 */ - 0x48, /* 137 KP_8 */ - 0x49, /* 138 KP_9 */ - 0x4b, /* 139 KP_4 */ - 0x4c, /* 140 KP_5 */ - 0x4d, /* 141 KP_6 */ - 0x4f, /* 142 KP_1 */ - 0x50, /* 143 KP_2 */ - 0x51, /* 144 KP_3 */ - 0x52, /* 145 KP_0 */ - 0x53, /* 146 KP_. */ - 0x47, /* 147 KP_HOME */ - 0x48, /* 148 KP_UP */ - 0x49, /* 149 KP_PgUp */ - 0x4b, /* 150 KP_Left */ - 0x4c, /* 151 KP_ */ - 0x4d, /* 152 KP_Right */ - 0x4f, /* 153 KP_End */ - 0x50, /* 154 KP_Down */ - 0x51, /* 155 KP_PgDn */ - 0x52, /* 156 KP_Ins */ - 0x53, /* 157 KP_Del */ -}; +#include =20 -/* This table is generated based off the xfree86 -> scancode mapping above - * and the keycode mappings in /usr/share/X11/xkb/keycodes/evdev - * and /usr/share/X11/xkb/keycodes/xfree86 - */ +static gboolean check_for_xwin(Display *dpy) +{ + const char *vendor =3D ServerVendor(dpy); + + trace_xkeymap_vendor(vendor); =20 -static const uint8_t evdev_keycode_to_pc_keycode[61] =3D { - 0x73, /* 97 EVDEV - RO ("Internet" Keyboards) */ - 0, /* 98 EVDEV - KATA (Katakana) */ - 0, /* 99 EVDEV - HIRA (Hiragana) */ - 0x79, /* 100 EVDEV - HENK (Henkan) */ - 0x70, /* 101 EVDEV - HKTG (Hiragana/Katakana toggle) */ - 0x7b, /* 102 EVDEV - MUHE (Muhenkan) */ - 0, /* 103 EVDEV - JPCM (KPJPComma) */ - 0x9c, /* 104 KPEN */ - 0x9d, /* 105 RCTL */ - 0xb5, /* 106 KPDV */ - 0xb7, /* 107 PRSC */ - 0xb8, /* 108 RALT */ - 0, /* 109 EVDEV - LNFD ("Internet" Keyboards) */ - 0xc7, /* 110 HOME */ - 0xc8, /* 111 UP */ - 0xc9, /* 112 PGUP */ - 0xcb, /* 113 LEFT */ - 0xcd, /* 114 RGHT */ - 0xcf, /* 115 END */ - 0xd0, /* 116 DOWN */ - 0xd1, /* 117 PGDN */ - 0xd2, /* 118 INS */ - 0xd3, /* 119 DELE */ - 0, /* 120 EVDEV - I120 ("Internet" Keyboards) */ - 0, /* 121 EVDEV - MUTE */ - 0, /* 122 EVDEV - VOL- */ - 0, /* 123 EVDEV - VOL+ */ - 0, /* 124 EVDEV - POWR */ - 0, /* 125 EVDEV - KPEQ */ - 0, /* 126 EVDEV - I126 ("Internet" Keyboards) */ - 0, /* 127 EVDEV - PAUS */ - 0, /* 128 EVDEV - ???? */ - 0x7e, /* 129 EVDEV - KP_COMMA (brazilian) */ - 0xf1, /* 130 EVDEV - HNGL (Korean Hangul Latin toggle) */ - 0xf2, /* 131 EVDEV - HJCV (Korean Hangul Hanja toggle) */ - 0x7d, /* 132 AE13 (Yen)*/ - 0xdb, /* 133 EVDEV - LWIN */ - 0xdc, /* 134 EVDEV - RWIN */ - 0xdd, /* 135 EVDEV - MENU */ - 0, /* 136 EVDEV - STOP */ - 0, /* 137 EVDEV - AGAI */ - 0, /* 138 EVDEV - PROP */ - 0, /* 139 EVDEV - UNDO */ - 0, /* 140 EVDEV - FRNT */ - 0, /* 141 EVDEV - COPY */ - 0, /* 142 EVDEV - OPEN */ - 0, /* 143 EVDEV - PAST */ - 0, /* 144 EVDEV - FIND */ - 0, /* 145 EVDEV - CUT */ - 0, /* 146 EVDEV - HELP */ - 0, /* 147 EVDEV - I147 */ - 0, /* 148 EVDEV - I148 */ - 0, /* 149 EVDEV - I149 */ - 0, /* 150 EVDEV - I150 */ - 0, /* 151 EVDEV - I151 */ - 0, /* 152 EVDEV - I152 */ - 0, /* 153 EVDEV - I153 */ - 0, /* 154 EVDEV - I154 */ - 0, /* 155 EVDEV - I156 */ - 0, /* 156 EVDEV - I157 */ - 0, /* 157 EVDEV - I158 */ -}; + if (strstr(vendor, "Cygwin/X")) { + return TRUE; + } =20 -uint8_t translate_xfree86_keycode(const int key) + return FALSE; +} + +static gboolean check_for_xquartz(Display *dpy) { - return x_keycode_to_pc_keycode[key]; + int nextensions; + int i; + gboolean match =3D FALSE; + char **extensions =3D XListExtensions(dpy, &nextensions); + for (i =3D 0 ; extensions !=3D NULL && i < nextensions ; i++) { + trace_xkeymap_extension(extensions[i]); + if (strcmp(extensions[i], "Apple-WM") =3D=3D 0 || + strcmp(extensions[i], "Apple-DRI") =3D=3D 0) { + match =3D TRUE; + } + } + if (extensions) { + XFreeExtensionList(extensions); + } + + return match; } =20 -uint8_t translate_evdev_keycode(const int key) +const guint16 *qemu_xkeymap_mapping_table(Display *dpy, size_t *maplen) { - return evdev_keycode_to_pc_keycode[key]; + XkbDescPtr desc; + const gchar *keycodes =3D NULL; + + /* There is no easy way to determine what X11 server + * and platform & keyboard driver is in use. Thus we + * do best guess heuristics. + * + * This will need more work for people with other + * X servers..... patches welcomed. + */ + + desc =3D XkbGetMap(dpy, + XkbGBN_AllComponentsMask, + XkbUseCoreKbd); + if (desc) { + if (XkbGetNames(dpy, XkbKeycodesNameMask, desc) =3D=3D Success) { + keycodes =3D XGetAtomName (dpy, desc->names->keycodes); + if (!keycodes) { + g_warning("could not lookup keycode name"); + } else { + trace_xkeymap_keycodes(keycodes); + } + } + XkbFreeKeyboard(desc, XkbGBN_AllComponentsMask, True); + } + + if (check_for_xwin(dpy)) { + trace_xkeymap_keymap("xwin"); + *maplen =3D qemu_input_map_xorgxwin_to_qcode_len; + return qemu_input_map_xorgxwin_to_qcode; + } else if (check_for_xquartz(dpy)) { + trace_xkeymap_keymap("xquartz"); + *maplen =3D qemu_input_map_xorgxquartz_to_qcode_len; + return qemu_input_map_xorgxquartz_to_qcode; + } else if (keycodes && g_str_has_prefix(keycodes, "evdev")) { + trace_xkeymap_keymap("evdev"); + *maplen =3D qemu_input_map_xorgevdev_to_qcode_len; + return qemu_input_map_xorgevdev_to_qcode; + } else if (keycodes && g_str_has_prefix(keycodes, "xfree86")) { + trace_xkeymap_keymap("kbd"); + *maplen =3D qemu_input_map_xorgkbd_to_qcode_len; + return qemu_input_map_xorgkbd_to_qcode; + } else { + trace_xkeymap_keymap("NULL"); + g_warning("Unknown X11 keycode mapping '%s'.\n" + "Please report to qemu-devel@nongnu.org\n" + "including the following information:\n" + "\n" + " - Operating system\n" + " - X11 Server\n" + " - xprop -root\n" + " - xdpyinfo\n", + keycodes ? keycodes : ""); + return NULL; + } } diff --git a/ui/x_keymap.h b/ui/x_keymap.h index afde2e94bf..0395e335ff 100644 --- a/ui/x_keymap.h +++ b/ui/x_keymap.h @@ -1,7 +1,7 @@ /* - * QEMU SDL display driver + * QEMU X11 keymaps * - * Copyright (c) 2003 Fabrice Bellard + * Copyright (c) 2017 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a= copy * of this software and associated documentation files (the "Software"), t= o deal @@ -25,8 +25,8 @@ #ifndef QEMU_X_KEYMAP_H #define QEMU_X_KEYMAP_H =20 -uint8_t translate_xfree86_keycode(const int key); +#include =20 -uint8_t translate_evdev_keycode(const int key); +const guint16 *qemu_xkeymap_mapping_table(Display *dpy, size_t *maplen); =20 #endif --=20 2.13.3 From nobody Mon Apr 29 08:30:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502790330918672.6649088226501; Tue, 15 Aug 2017 02:45:30 -0700 (PDT) Received: from localhost ([::1]:48947 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYPh-0001zH-MN for importer@patchew.org; Tue, 15 Aug 2017 05:45:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44141) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhYHC-0002eO-Va for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhYHB-0000yL-8B for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:43 -0400 Received: from mx1.redhat.com ([209.132.183.28]:48824) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhYHA-0000xl-Uq for qemu-devel@nongnu.org; Tue, 15 Aug 2017 05:36:41 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B6975C051797 for ; Tue, 15 Aug 2017 09:36:39 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.69]) by smtp.corp.redhat.com (Postfix) with ESMTP id D12DE60657; Tue, 15 Aug 2017 09:36:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B6975C051797 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Tue, 15 Aug 2017 10:36:15 +0100 Message-Id: <20170815093615.16453-13-berrange@redhat.com> In-Reply-To: <20170815093615.16453-1-berrange@redhat.com> References: <20170815093615.16453-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 15 Aug 2017 09:36:40 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 12/12] display: convert XenInput keyboard to keycodemapdb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Replace the scancode2linux table with an automatically generated table. In doing so, the XenFB keyboard handler is also converted to the modern InputEvent framework. Signed-off-by: Daniel P. Berrange --- hw/display/xenfb.c | 133 ++++++++++++-------------------------------------= ---- 1 file changed, 30 insertions(+), 103 deletions(-) diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c index df8b78f6f4..b4668dfce4 100644 --- a/hw/display/xenfb.c +++ b/hw/display/xenfb.c @@ -28,6 +28,7 @@ =20 #include "hw/hw.h" #include "ui/console.h" +#include "ui/input.h" #include "hw/xen/xen_backend.h" =20 #include @@ -52,7 +53,7 @@ struct XenInput { struct common c; int abs_pointer_wanted; /* Whether guest supports absolute pointer */ int button_state; /* Last seen pointer button state */ - int extended; + QemuInputHandlerState *qkbd; QEMUPutMouseEntry *qmouse; }; =20 @@ -120,78 +121,6 @@ static void common_unbind(struct common *c) =20 /* -------------------------------------------------------------------- */ =20 -#if 0 -/* - * These two tables are not needed any more, but left in here - * intentionally as documentation, to show how scancode2linux[] - * was generated. - * - * Tables to map from scancode to Linux input layer keycode. - * Scancodes are hardware-specific. These maps assumes a - * standard AT or PS/2 keyboard which is what QEMU feeds us. - */ -const unsigned char atkbd_set2_keycode[512] =3D { - - 0, 67, 65, 63, 61, 59, 60, 88, 0, 68, 66, 64, 62, 15, 41,117, - 0, 56, 42, 93, 29, 16, 2, 0, 0, 0, 44, 31, 30, 17, 3, 0, - 0, 46, 45, 32, 18, 5, 4, 95, 0, 57, 47, 33, 20, 19, 6,183, - 0, 49, 48, 35, 34, 21, 7,184, 0, 0, 50, 36, 22, 8, 9,185, - 0, 51, 37, 23, 24, 11, 10, 0, 0, 52, 53, 38, 39, 25, 12, 0, - 0, 89, 40, 0, 26, 13, 0, 0, 58, 54, 28, 27, 0, 43, 0, 85, - 0, 86, 91, 90, 92, 0, 14, 94, 0, 79,124, 75, 71,121, 0, 0, - 82, 83, 80, 76, 77, 72, 1, 69, 87, 78, 81, 74, 55, 73, 70, 99, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 217,100,255, 0, 97,165, 0, 0,156, 0, 0, 0, 0, 0, 0,125, - 173,114, 0,113, 0, 0, 0,126,128, 0, 0,140, 0, 0, 0,127, - 159, 0,115, 0,164, 0, 0,116,158, 0,150,166, 0, 0, 0,142, - 157, 0, 0, 0, 0, 0, 0, 0,155, 0, 98, 0, 0,163, 0, 0, - 226, 0, 0, 0, 0, 0, 0, 0, 0,255, 96, 0, 0, 0,143, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,107, 0,105,102, 0, 0,112, - 110,111,108,112,106,103, 0,119, 0,118,109, 0, 99,104,119, 0, - -}; - -const unsigned char atkbd_unxlate_table[128] =3D { - - 0,118, 22, 30, 38, 37, 46, 54, 61, 62, 70, 69, 78, 85,102, 13, - 21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 90, 20, 28, 27, - 35, 43, 52, 51, 59, 66, 75, 76, 82, 14, 18, 93, 26, 34, 33, 42, - 50, 49, 58, 65, 73, 74, 89,124, 17, 41, 88, 5, 6, 4, 12, 3, - 11, 2, 10, 1, 9,119,126,108,117,125,123,107,115,116,121,105, - 114,122,112,113,127, 96, 97,120, 7, 15, 23, 31, 39, 47, 55, 63, - 71, 79, 86, 94, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87,111, - 19, 25, 57, 81, 83, 92, 95, 98, 99,100,101,103,104,106,109,110 - -}; -#endif - -/* - * for (i =3D 0; i < 128; i++) { - * scancode2linux[i] =3D atkbd_set2_keycode[atkbd_unxlate_table[i]]; - * scancode2linux[i | 0x80] =3D atkbd_set2_keycode[atkbd_unxlate_table= [i] | 0x80]; - * } - */ -static const unsigned char scancode2linux[512] =3D { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 99, 0, 86, 87, 88,117, 0, 0, 95,183,184,185, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 93, 0, 0, 89, 0, 0, 85, 91, 90, 92, 0, 94, 0,124,121, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 165, 0, 0, 0, 0, 0, 0, 0, 0,163, 0, 0, 96, 97, 0, 0, - 113,140,164, 0,166, 0, 0, 0, 0, 0,255, 0, 0, 0,114, 0, - 115, 0,150, 0, 0, 98,255, 99,100, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,119,119,102,103,104, 0,105,112,106,118,107, - 108,109,110,111, 0, 0, 0, 0, 0, 0, 0,125,126,127,116,142, - 0, 0, 0,143, 0,217,156,173,128,159,158,157,155,226, 0,112, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - /* Send an event to the keyboard frontend driver */ static int xenfb_kbd_event(struct XenInput *xenfb, union xenkbd_in_event *event) @@ -260,37 +189,21 @@ static int xenfb_send_position(struct XenInput *xenfb, return xenfb_kbd_event(xenfb, &event); } =20 -/* - * Send a key event from the client to the guest OS - * QEMU gives us a raw scancode from an AT / PS/2 style keyboard. - * We have to turn this into a Linux Input layer keycode. - * - * Extra complexity from the fact that with extended scancodes - * (like those produced by arrow keys) this method gets called - * twice, but we only want to send a single event. So we have to - * track the '0xe0' scancode state & collapse the extended keys - * as needed. - * - * Wish we could just send scancodes straight to the guest which - * already has code for dealing with this... - */ -static void xenfb_key_event(void *opaque, int scancode) +static void xenfb_key_event(DeviceState *dev, QemuConsole *src, + InputEvent *evt) { - struct XenInput *xenfb =3D opaque; - int down =3D 1; + struct XenInput *xenfb =3D container_of(dev, struct XenInput, + c.xendev.qdev); + InputKeyEvent *key =3D evt->u.key.data; + int qcode; =20 - if (scancode =3D=3D 0xe0) { - xenfb->extended =3D 1; - return; - } else if (scancode & 0x80) { - scancode &=3D 0x7f; - down =3D 0; - } - if (xenfb->extended) { - scancode |=3D 0x80; - xenfb->extended =3D 0; + assert(evt->type =3D=3D INPUT_EVENT_KIND_KEY); + + qcode =3D qemu_input_key_value_to_qcode(key->key); + if (qcode < qemu_input_map_qcode_to_linux_len) { + xenfb_send_key(xenfb, key->down, + qemu_input_map_qcode_to_linux[qcode]); } - xenfb_send_key(xenfb, down, scancode2linux[scancode]); } =20 /* @@ -347,6 +260,12 @@ static int input_init(struct XenDevice *xendev) return 0; } =20 +static QemuInputHandler xenfb_keyboard_handler =3D { + .name =3D "Xen FB Keyboard", + .mask =3D INPUT_EVENT_MASK_KEY, + .event =3D xenfb_key_event, +}; + static int input_initialise(struct XenDevice *xendev) { struct XenInput *in =3D container_of(xendev, struct XenInput, c.xendev= ); @@ -356,7 +275,6 @@ static int input_initialise(struct XenDevice *xendev) if (rc !=3D 0) return rc; =20 - qemu_add_kbd_event_handler(xenfb_key_event, in); return 0; } =20 @@ -376,6 +294,12 @@ static void input_connected(struct XenDevice *xendev) in->qmouse =3D qemu_add_mouse_event_handler(xenfb_mouse_event, in, in->abs_pointer_wanted, "Xen PVFB Mouse"); + + if (in->qkbd) { + qemu_input_handler_unregister(in->qkbd); + } + in->qkbd =3D qemu_input_handler_register((DeviceState *)in, + &xenfb_keyboard_handler); } =20 static void input_disconnect(struct XenDevice *xendev) @@ -386,7 +310,10 @@ static void input_disconnect(struct XenDevice *xendev) qemu_remove_mouse_event_handler(in->qmouse); in->qmouse =3D NULL; } - qemu_add_kbd_event_handler(NULL, NULL); + if (in->qkbd) { + qemu_input_handler_unregister(in->qkbd); + in->qkbd =3D NULL; + } common_unbind(&in->c); } =20 --=20 2.13.3