From b5bd6307c83cf900f9f8c9a5226a78bcb825e332 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Thu, 21 Mar 2013 11:27:08 +0900 Subject: [PATCH] Enable dead_belowdot with de layout. AltGr + j returns dead_belowdot in de layout. E.g. AltGr + j, s returns U+1E63 with de. XLookupString can get dead_belowdot but the return value is 0. I think XLookupString does not failed with return value 0. BUG=RH#921164 Review URL: https://codereview.appspot.com/7812045 --- qtim/ibus-input-context.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/qtim/ibus-input-context.cpp b/qtim/ibus-input-context.cpp index 8c00a10..0c9e547 100644 --- a/qtim/ibus-input-context.cpp +++ b/qtim/ibus-input-context.cpp @@ -248,9 +248,13 @@ translate_x_key_event (XEvent *xevent, uint *keyval, uint *keycode, uint *state) *state |= IBus::ReleaseMask; char key_str[64]; - if (XLookupString (&xevent->xkey, key_str, sizeof (key_str), (KeySym *)keyval, 0) <= 0) { - *keyval = (quint32) XLookupKeysym (&xevent->xkey, 0); - } + /* Follow gtkxim module. + * https://git.gnome.org/browse/gtk+/tree/modules/input/gtkimcontextxim.c#n736 + * I think XLookupString can get right keyval even if the return value + * is 0 but key_str might not be a string. + * And XLookupString won't return the negative value in my test. */ + XLookupString (&xevent->xkey, key_str, sizeof (key_str), + (KeySym *)keyval, 0); return true; -- 1.8.0