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");
}