Support win(super) key modifier 45/263245/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Mon, 23 Aug 2021 13:42:49 +0000 (22:42 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Mon, 30 Aug 2021 06:43:07 +0000 (15:43 +0900)
Change-Id: If5d3413511e02b141838cb2f8ace46d8e57cbc23
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
ism/extras/wayland_immodule/wayland_imcontext.c
ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp

index 9ca7e4e..0f1123b 100644 (file)
@@ -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,
index 9318a55..f90f685 100644 (file)
@@ -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);