From 0842f43583f7300b7a1b350503af300351452c8c Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 12 Jul 2016 17:47:55 +0900 Subject: [PATCH] Fix wrong modifier issue Change-Id: I709d877088f2b917814810527374798a53fd32f4 Signed-off-by: Jihoon Kim --- ism/extras/wayland_immodule/wayland_imcontext.c | 33 +++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/ism/extras/wayland_immodule/wayland_imcontext.c b/ism/extras/wayland_immodule/wayland_imcontext.c index a70c8d6..90d5ca7 100644 --- a/ism/extras/wayland_immodule/wayland_imcontext.c +++ b/ism/extras/wayland_immodule/wayland_imcontext.c @@ -1719,6 +1719,34 @@ wayland_im_context_hide(Ecore_IMF_Context *ctx) _input_panel_hide(ctx, EINA_FALSE); } +static unsigned int +_ecore_imf_modifier_to_ecore_key_modifier(Ecore_IMF_Keyboard_Modifiers modifiers) +{ + unsigned int mask = 0; + + /**< "Control" is pressed */ + if (modifiers & ECORE_IMF_KEYBOARD_MODIFIER_CTRL) + mask |= ECORE_EVENT_MODIFIER_CTRL; + + /**< "Alt" is pressed */ + if (modifiers & ECORE_IMF_KEYBOARD_MODIFIER_ALT) + mask |= ECORE_EVENT_MODIFIER_ALT; + + /**< "Shift" is pressed */ + if (modifiers & ECORE_IMF_KEYBOARD_MODIFIER_SHIFT) + mask |= ECORE_EVENT_MODIFIER_SHIFT; + + /**< "Win" (between "Ctrl" and "Alt") is pressed */ + if (modifiers & ECORE_IMF_KEYBOARD_MODIFIER_WIN) + mask |= ECORE_EVENT_MODIFIER_WIN; + + /**< "AltGr" is pressed */ + if (modifiers & ECORE_IMF_KEYBOARD_MODIFIER_ALTGR) + mask |= ECORE_EVENT_MODIFIER_ALTGR; + + return mask; +} + EAPI Eina_Bool wayland_im_context_filter_event(Ecore_IMF_Context *ctx, Ecore_IMF_Event_Type type, @@ -1741,13 +1769,13 @@ wayland_im_context_filter_event(Ecore_IMF_Context *ctx, Ecore_IMF_Event_Key_Up *key_ev = (Ecore_IMF_Event_Key_Up *)imf_event; ecore_key_ev.keyname = key_ev->keyname; ecore_key_ev.timestamp = key_ev->timestamp; - ecore_key_ev.modifiers = key_ev->modifiers; + ecore_key_ev.modifiers = _ecore_imf_modifier_to_ecore_key_modifier(key_ev->modifiers); } else if (type == ECORE_IMF_EVENT_KEY_DOWN) { Ecore_IMF_Event_Key_Down *key_ev = (Ecore_IMF_Event_Key_Down *)imf_event; ecore_key_ev.keyname = key_ev->keyname; ecore_key_ev.timestamp = key_ev->timestamp; - ecore_key_ev.modifiers = key_ev->modifiers; + ecore_key_ev.modifiers = _ecore_imf_modifier_to_ecore_key_modifier(key_ev->modifiers); } if (type == ECORE_IMF_EVENT_KEY_UP || type == ECORE_IMF_EVENT_KEY_DOWN) { @@ -1764,6 +1792,7 @@ wayland_im_context_filter_event(Ecore_IMF_Context *ctx, int serial = imcontext->serial++; double start_time = ecore_time_get(); + /* xkb_mod_mask */ uint32_t modifiers = 0; if (ecore_key_ev.modifiers & ECORE_EVENT_MODIFIER_SHIFT) modifiers |= imcontext->shift_mask; -- 2.7.4