From ce3f28aeca79a6f4eec03ce6ab34a2cfbe5c34fc Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Mon, 23 Aug 2021 22:42:49 +0900 Subject: [PATCH] Support win(super) key modifier Change-Id: If5d3413511e02b141838cb2f8ace46d8e57cbc23 Signed-off-by: Jihoon Kim --- ism/extras/wayland_immodule/wayland_imcontext.c | 11 ++++++++++- ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ism/extras/wayland_immodule/wayland_imcontext.c b/ism/extras/wayland_immodule/wayland_imcontext.c index 9ca7e4e..0f1123b 100644 --- a/ism/extras/wayland_immodule/wayland_imcontext.c +++ b/ism/extras/wayland_immodule/wayland_imcontext.c @@ -62,6 +62,7 @@ #define MOD_CAPS_MASK 0x02 #define MOD_CONTROL_MASK 0x04 #define MOD_ALT_MASK 0x08 +#define MOD_SUPER_MASK 0x20 #define MOD_NUM_MASK 0x100 #define MOD_Mod5_MASK 0x80 @@ -228,6 +229,7 @@ struct _WaylandIMContext xkb_mod_mask_t shift_mask; xkb_mod_mask_t caps_mask; xkb_mod_mask_t num_mask; + xkb_mod_mask_t super_mask; uint32_t serial; uint32_t content_purpose; @@ -2150,6 +2152,7 @@ text_input_modifiers_map(void *data, imcontext->shift_mask = modifiers_get_mask(map, XKB_MOD_NAME_SHIFT); imcontext->control_mask = modifiers_get_mask(map, XKB_MOD_NAME_CTRL); imcontext->alt_mask = modifiers_get_mask(map, XKB_MOD_NAME_ALT); + imcontext->super_mask = modifiers_get_mask(map, XKB_MOD_NAME_LOGO); imcontext->caps_mask = modifiers_get_mask(map, XKB_MOD_NAME_CAPS); imcontext->num_mask = modifiers_get_mask(map, XKB_MOD_NAME_NUM); } @@ -2235,6 +2238,9 @@ text_input_keysym(void *data, if (modifiers & imcontext->alt_mask) e->modifiers |= ECORE_EVENT_MODIFIER_ALT; + if (modifiers & imcontext->super_mask) + e->modifiers |= ECORE_EVENT_MODIFIER_WIN; + if (modifiers & MOD_Mod5_MASK) e->modifiers |= MOD_Mod5_MASK; @@ -2920,6 +2926,7 @@ wayland_im_context_add(Ecore_IMF_Context *ctx) imcontext->shift_mask = MOD_SHIFT_MASK; imcontext->control_mask = MOD_CONTROL_MASK; imcontext->alt_mask = MOD_ALT_MASK; + imcontext->super_mask = MOD_SUPER_MASK; imcontext->caps_mask = MOD_CAPS_MASK; imcontext->num_mask = MOD_NUM_MASK; @@ -3471,6 +3478,8 @@ wayland_im_context_filter_event(Ecore_IMF_Context *ctx, modifiers |= imcontext->control_mask; if (ecore_key_ev.modifiers & ECORE_EVENT_MODIFIER_ALT) modifiers |= imcontext->alt_mask; + if (ecore_key_ev.modifiers & ECORE_EVENT_MODIFIER_WIN) + modifiers |= imcontext->super_mask; if (ecore_key_ev.modifiers & ECORE_EVENT_LOCK_CAPS) modifiers |= imcontext->caps_mask; if (ecore_key_ev.modifiers & ECORE_EVENT_LOCK_NUM) @@ -3489,7 +3498,7 @@ wayland_im_context_filter_event(Ecore_IMF_Context *ctx, g_last_key_event_serial = serial; double start_time = ecore_time_get(); - SECURE_LOGD ("ev:modifiers=0x%x, modifiers=0x%x, shift_mask=0x%x, control_mask=0x%0x, alt_mask=0x%x, caps_mask=0x%x, num_mask=0x%x, keycode=%u", ecore_key_ev.modifiers, modifiers, imcontext->shift_mask, imcontext->control_mask, imcontext->alt_mask, imcontext->caps_mask, imcontext->num_mask, ecore_key_ev.keycode); + SECURE_LOGD ("ev:modifiers=0x%x, modifiers=0x%x, shift_mask=0x%x, control_mask=0x%0x, alt_mask=0x%x, super_mask=0x%x, caps_mask=0x%x, num_mask=0x%x, keycode=%u", ecore_key_ev.modifiers, modifiers, imcontext->shift_mask, imcontext->control_mask, imcontext->alt_mask, imcontext->super_mask, imcontext->caps_mask, imcontext->num_mask, ecore_key_ev.keycode); //Send key event to IME. wl_text_input_filter_key_event(imcontext->text_input, serial, ecore_key_ev.timestamp, ecore_key_ev.key, type == ECORE_IMF_EVENT_KEY_UP? WL_KEYBOARD_KEY_STATE_RELEASED : WL_KEYBOARD_KEY_STATE_PRESSED, diff --git a/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp b/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp index 9318a55..f90f685 100644 --- a/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp +++ b/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp @@ -220,6 +220,7 @@ static bool _launch_ise_on_request #define MOD_CAPS_MASK 0x02 #define MOD_CONTROL_MASK 0x04 #define MOD_ALT_MASK 0x08 +#define MOD_SUPER_MASK 0x20 #define MOD_NUM_MASK 0x100 #define MOD_Mod5_MASK 0x80 @@ -637,6 +638,8 @@ _wsc_im_keyboard_keymap (void *data, 1 << xkb_map_mod_get_index (wsc_ctx->keymap, "Mod1"); wsc_ctx->shift_mask = 1 << xkb_map_mod_get_index (wsc_ctx->keymap, "Shift"); + wsc_ctx->super_mask = + 1 << xkb_map_mod_get_index (wsc_ctx->keymap, "Super"); LOGD ("create _keysym2keycode"); _init_keysym2keycode (wsc_ctx); @@ -702,6 +705,8 @@ _wsc_im_keyboard_modifiers (void *data, wsc_ctx->modifiers |= SCIM_KEY_AltMask; if (mask & wsc_ctx->shift_mask) wsc_ctx->modifiers |= SCIM_KEY_ShiftMask; + if (mask & wsc_ctx->super_mask) + wsc_ctx->modifiers |= SCIM_KEY_SuperMask; wl_input_method_context_modifiers (context, serial, mods_depressed, mods_depressed, @@ -1765,6 +1770,8 @@ isf_wsc_context_filter_key_event (WSCContextISF* wsc_ctx, key.mask |= SCIM_KEY_AltMask; if (modifiers & MOD_CONTROL_MASK) key.mask |= SCIM_KEY_ControlMask; + if (modifiers & MOD_SUPER_MASK) + key.mask |= SCIM_KEY_SuperMask; if (modifiers & MOD_CAPS_MASK) key.mask |= SCIM_KEY_CapsLockMask; @@ -2912,6 +2919,8 @@ static void send_wl_key_event (WSCContextISF *ic, const KeyEvent &key, bool fake modifiers |= MOD_ALT_MASK; if (key.is_control_down ()) modifiers |= MOD_CONTROL_MASK; + if (key.is_super_down ()) + modifiers |= MOD_SUPER_MASK; _keyname_to_keysym (key.code, &modifiers); -- 2.7.4