On Sat, Aug 18, 2012 at 01:38:38PM +0200, Philipp Brüschweiler wrote: > Unless the alt modifier is active and the MODE_ALT_SENDS_ESC mode is not > set, any value over 127 is converted to a UTF8 sequence. > > Part of https://bugs.freedesktop.org/show_bug.cgi?id=53648 should be > fixed with this. > > Part of https://bugs.freedesktop.org/show_bug.cgi?id=52419 is fixed, but > interestingly it depends on the activated keymap (i.e. it works with > dvorak, but not with ch).
Committed, thanks. > --- > clients/terminal.c | 30 +++++++++++++++++++++++------- > 1 Datei geändert, 23 Zeilen hinzugefügt(+), 7 Zeilen entfernt(-) > > diff --git a/clients/terminal.c b/clients/terminal.c > index 7e74db7..f97882d 100644 > --- a/clients/terminal.c > +++ b/clients/terminal.c > @@ -20,6 +20,7 @@ > * OF THIS SOFTWARE. > */ > > +#include <stdbool.h> > #include <stdint.h> > #include <stdio.h> > #include <stdlib.h> > @@ -2116,7 +2117,8 @@ key_handler(struct window *window, struct input *input, > uint32_t time, > struct terminal *terminal = data; > char ch[MAX_RESPONSE]; > uint32_t modifiers, serial; > - int len = 0; > + int ret, len = 0; > + bool convert_utf8 = true; > > modifiers = input_get_modifiers(input); > if ((modifiers & MOD_CONTROL_MASK) && > @@ -2229,15 +2231,29 @@ key_handler(struct window *window, struct input > *input, uint32_t time, > else if (sym == '/') sym = 0x1F; > else if (sym == '8' || sym == '?') sym = 0x7F; > } > - if ((terminal->mode & MODE_ALT_SENDS_ESC) && > - (modifiers & MOD_ALT_MASK)) { > - ch[len++] = 0x1b; > - } else if (modifiers & MOD_ALT_MASK) { > - sym = sym | 0x80; > + if (modifiers & MOD_ALT_MASK) { > + if (terminal->mode & MODE_ALT_SENDS_ESC) { > + ch[len++] = 0x1b; > + } else { > + sym = sym | 0x80; > + convert_utf8 = false; > + } > } > > - if (sym < 256) > + if ((sym < 128) || > + (!convert_utf8 && sym < 256)) { > ch[len++] = sym; > + } else { > + ret = xkb_keysym_to_utf8(sym, ch + len, > + MAX_RESPONSE - len); > + if (ret < 0) > + fprintf(stderr, > + "Warning: buffer too small to encode " > + "UTF8 character\n"); > + else > + len += ret; > + } > + > break; > } > > -- > 1.7.11.5 > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel