diff options
Diffstat (limited to 'core/kbd/fix-alt_is_meta.patch')
-rw-r--r-- | core/kbd/fix-alt_is_meta.patch | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/core/kbd/fix-alt_is_meta.patch b/core/kbd/fix-alt_is_meta.patch new file mode 100644 index 000000000..865ea917b --- /dev/null +++ b/core/kbd/fix-alt_is_meta.patch @@ -0,0 +1,212 @@ +From f6d17ec929f59cc65a8c5f8a4918c1fe89e2b85a Mon Sep 17 00:00:00 2001 +From: Alexey Gladkov <gladkov.alexey@gmail.com> +Date: Mon, 7 Oct 2013 17:48:57 +0400 +Subject: [PATCH] Fix alt_is_meta regression + +Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com> +--- + src/libkeymap/kmap.c | 8 ++++---- + tests/Makefile.am | 8 ++++++-- + tests/alt-is-meta.in | 19 +++++++++++++++++++ + tests/alt-is-meta.map | 12 ++++++++++++ + tests/alt-is-meta.output | 42 ++++++++++++++++++++++++++++++++++++++++++ + tests/libkeymap-showmaps.c | 30 ++++++++++++++++++++++++++++++ + 6 files changed, 113 insertions(+), 6 deletions(-) + create mode 100755 tests/alt-is-meta.in + create mode 100644 tests/alt-is-meta.map + create mode 100644 tests/alt-is-meta.output + create mode 100644 tests/libkeymap-showmaps.c + +diff --git a/src/libkeymap/kmap.c b/src/libkeymap/kmap.c +index ca97ed5..c7945bc 100644 +--- a/src/libkeymap/kmap.c ++++ b/src/libkeymap/kmap.c +@@ -149,10 +149,10 @@ lk_add_key(struct lk_ctx *ctx, unsigned int k_table, unsigned int k_index, int k + int type = KTYP(keycode); + int val = KVAL(keycode); + +- if (alttable != k_table && !lk_key_exists(ctx, alttable, k_index) && +- (type == KT_LATIN || type == KT_LETTER) && val < 128) { +- if (lk_add_map(ctx, alttable) < 0) +- return -1; ++ if (alttable != k_table && lk_map_exists(ctx, alttable) && ++ !lk_key_exists(ctx, alttable, k_index) && ++ (type == KT_LATIN || type == KT_LETTER) && ++ val < 128) { + if (lk_add_key(ctx, alttable, k_index, K(KT_META, val)) < 0) + return -1; + } +diff --git a/tests/Makefile.am b/tests/Makefile.am +index e7d22c2..d9a9f61 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -7,10 +7,12 @@ AM_CFLAGS = $(CHECK_CFLAGS) + LDADD = $(top_builddir)/src/libkeymap/libkeymap.la $(CHECK_LIBS) + + EXTRA_DIST = \ ++ alt-is-meta.in \ + dumpkeys-bkeymap.in \ + dumpkeys-fulltable.in \ + dumpkeys-mktable.in \ + \ ++ alt-is-meta.map \ + charset-keymap0.map \ + dumpkeys.full.ruwin_cplk-UTF-8.map \ + dumpkeys.qwerty-layout.map \ +@@ -19,15 +21,16 @@ EXTRA_DIST = \ + keymap0.map keymap1.map keymap2.map keymap3.map keymap4.map keymap5.map keymap6.map \ + VoidSymbol.map \ + \ ++ alt-is-meta.output \ + dumpkeys.bkeymap.bin \ + dumpkeys.defkeymap.c + +-check_SCRIPTS = dumpkeys-fulltable dumpkeys-mktable dumpkeys-bkeymap ++check_SCRIPTS = dumpkeys-fulltable dumpkeys-mktable dumpkeys-bkeymap alt-is-meta + check_PROGRAMS = libkeymap-init libkeymap-kmap libkeymap-keys libkeymap-parse \ + libkeymap-charset + + noinst_PROGRAMS = \ +- libkeymap-dumpkeys libkeymap-mktable libkeymap-bkeymap \ ++ libkeymap-dumpkeys libkeymap-mktable libkeymap-bkeymap libkeymap-showmaps \ + $(check_PROGRAMS) + + TESTS = $(check_PROGRAMS) $(check_SCRIPTS) +@@ -41,6 +44,7 @@ libkeymap_charset_SOURCES = libkeymap-charset.c + libkeymap_dumpkeys_SOURCES = libkeymap-dumpkeys.c + libkeymap_mktable_SOURCES = libkeymap-mktable.c + libkeymap_bkeymap_SOURCES = libkeymap-bkeymap.c ++libkeymap_showmaps_SOURCES = libkeymap-showmaps.c + + %: %.in + sed \ +diff --git a/tests/alt-is-meta.in b/tests/alt-is-meta.in +new file mode 100755 +index 0000000..ddd5ed8 +--- /dev/null ++++ b/tests/alt-is-meta.in +@@ -0,0 +1,19 @@ ++#!/bin/sh -efu ++ ++cwd="$(readlink -ev "${0%/*}")" ++ ++cd "$cwd" ++ ++rc=0 ++temp="$(mktemp "@BUILDDIR@/temp.XXXXXXXXX")" ++ ++./libkeymap-showmaps "@DATADIR@"/alt-is-meta.map > "$temp" || rc=$? ++cmp -s "@DATADIR@//alt-is-meta.output" "$temp" || rc=$? ++ ++if [ "$rc" != 0 ]; then ++ printf 'failed\n' ++else ++ rm -f -- "$temp" ++fi ++ ++exit $rc +diff --git a/tests/alt-is-meta.map b/tests/alt-is-meta.map +new file mode 100644 +index 0000000..fa182a5 +--- /dev/null ++++ b/tests/alt-is-meta.map +@@ -0,0 +1,12 @@ ++keymaps 0-9,12-13,16-20,22,24-25,28,32-41,44-45,48-52,54,56-57,60 ++alt_is_meta ++keycode 16 = +q Q backslash backslash Control_q \ ++ Control_q Control_backslash Control_backslash \ ++ Meta_q Meta_Q VoidSymbol VoidSymbol +Q \ ++ q VoidSymbol VoidSymbol VoidSymbol VoidSymbol \ ++ Meta_Q Meta_q VoidSymbol \ ++ +q Q backslash backslash Control_q \ ++ Control_q Control_backslash Control_backslash \ ++ Meta_q Meta_Q VoidSymbol VoidSymbol +Q \ ++ q VoidSymbol VoidSymbol VoidSymbol VoidSymbol \ ++ Meta_Q Meta_q VoidSymbol +diff --git a/tests/alt-is-meta.output b/tests/alt-is-meta.output +new file mode 100644 +index 0000000..25abb20 +--- /dev/null ++++ b/tests/alt-is-meta.output +@@ -0,0 +1,42 @@ ++keymap 000 ++keymap 001 ++keymap 002 ++keymap 003 ++keymap 004 ++keymap 005 ++keymap 006 ++keymap 007 ++keymap 008 ++keymap 009 ++keymap 012 ++keymap 013 ++keymap 016 ++keymap 017 ++keymap 018 ++keymap 019 ++keymap 020 ++keymap 022 ++keymap 024 ++keymap 025 ++keymap 028 ++keymap 032 ++keymap 033 ++keymap 034 ++keymap 035 ++keymap 036 ++keymap 037 ++keymap 038 ++keymap 039 ++keymap 040 ++keymap 041 ++keymap 044 ++keymap 045 ++keymap 048 ++keymap 049 ++keymap 050 ++keymap 051 ++keymap 052 ++keymap 054 ++keymap 056 ++keymap 057 ++keymap 060 +diff --git a/tests/libkeymap-showmaps.c b/tests/libkeymap-showmaps.c +new file mode 100644 +index 0000000..acbf9f1 +--- /dev/null ++++ b/tests/libkeymap-showmaps.c +@@ -0,0 +1,30 @@ ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++#include <keymap.h> ++ ++#include "contextP.h" ++ ++int main(int argc, char **argv) ++{ ++ int i; ++ struct lk_ctx *ctx; ++ lkfile_t f; ++ ++ ctx = lk_init(); ++ ++ f.pipe = 0; ++ strcpy(f.pathname, argv[1]); ++ f.fd = fopen( argv[1], "r"); ++ ++ lk_parse_keymap(ctx, &f); ++ ++ for (i = 0; i < ctx->keymap->total; i++) { ++ if (!lk_map_exists(ctx, i)) ++ continue; ++ printf("keymap %03d\n", i); ++ } ++ ++ lk_free(ctx); ++ return 0; ++} +-- +1.7.3.3 + |