Support win(super) key modifier
[platform/core/uifw/isf.git] / ism / modules / panelagent / wayland / wayland_panel_agent_module.cpp
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);