wayland-input : change keyname as more similar name client knows, also fix print... 93/264293/1
authordyamy-lee <dyamy.lee@samsung.com>
Wed, 15 Sep 2021 06:35:58 +0000 (15:35 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Wed, 15 Sep 2021 12:06:03 +0000 (21:06 +0900)
Change-Id: I6bd94271f65aaef17b07a4c47d72cd72d3328488

src/modules/modality_keyboard/wayland-input.c

index c7a322c..29ecacf 100644 (file)
@@ -271,33 +271,48 @@ _input_event_key_cb_free(void *data EINA_UNUSED, void *event)
 static void
 _input_add_key_event(unsigned int keycode, unsigned int state, unsigned int timestamp)
 {
-       const char * name = NULL;
+       char key[256] = {0, };
+       struct xkb_state *_xkb_state = NULL;
+       xkb_keysym_t sym = XKB_KEY_NoSymbol;
+       uint32_t nsyms;
+       const xkb_keysym_t *syms;
 
-       if((name = xkb_keymap_key_get_name(keymap, keycode)))
-       {
-               LOGD("key name = %s, keycode = %d\n", name, keycode);
+       _xkb_state = xkb_state_new(keymap);
+       nsyms = xkb_key_get_syms(_xkb_state, keycode, &syms);
+       if(nsyms == 1) sym = syms[0];
 
-               mmi_provider_event_key *ev = calloc(1, sizeof(mmi_provider_event_key));
-               if(!ev)
-               {
-                       LOGE("mmi_provider_event_key malloc fail\n");
-                       return;
-               }
+       if(sym == XKB_KEY_NoSymbol)
+       {
+               // no symbol
+               snprintf(key, sizeof(key), "Keycode-%u", keycode);
+       }
+       else{
+               xkb_keysym_get_name(sym, key, sizeof(key));
+       }
 
-               if(state)
-                       ev->type = MMI_EVENT_KEY_TYPE_DOWN;
-               else
-                       ev->type = MMI_EVENT_KEY_TYPE_UP;
-               ev->timestamp = timestamp;
-               ev->keycode = keycode;
-               ev->key_down = state;
-               ev->keyname = strdup(name);
+       if(key[0] == '\0')
+       {
+               // no keyname was found
+               snprintf(key, sizeof(key), "Keycode-%u", keycode);
+       }
 
-               LOGI("type = %s, keyname = %s, key = %d, time = %d", (ev->type)?"MMI_EVENT_KEY_TYPE_DOWN":"MMI_EVENT_KEY_TYPE_UP", ev->keyname, ev->keycode, ev->timestamp);
-               ecore_event_add(MMI_PROVIDER_EVENT_KEY, ev, _input_event_key_cb_free, NULL);
+       mmi_provider_event_key *ev = calloc(1, sizeof(mmi_provider_event_key));
+       if(!ev)
+       {
+               LOGE("mmi_provider_event_key malloc fail\n");
+               return;
        }
+       if(state)
+               ev->type = MMI_EVENT_KEY_TYPE_DOWN;
        else
-               LOGD("No matched keyname from keycode = %d\n", keycode);
+               ev->type = MMI_EVENT_KEY_TYPE_UP;
+       ev->timestamp = timestamp;
+       ev->keycode = keycode;
+       ev->key_down = state;
+       ev->keyname = strdup(key);
+
+       LOGI("type = %s, keyname = %s, key = %d, time = %d", (ev->type)?"MMI_EVENT_KEY_TYPE_UP":"MMI_EVENT_KEY_TYPE_DOWN", ev->keyname, ev->keycode, ev->timestamp);
+       ecore_event_add(MMI_PROVIDER_EVENT_KEY, ev, _input_event_key_cb_free, NULL);
 
        LOGI("MMI_PROVIDER_EVENT_KEY has been added !\n");
 }