struct xkb_context *xkb_context;
struct xkb_keymap *keymap;
+struct xkb_state *_xkb_state = NULL;
Ecore_Fd_Handler *fd_hdl;
xkb_keymap_unref(keymap);
keymap = NULL;
}
+ if(_xkb_state)
+ {
+ xkb_state_unref(_xkb_state);
+ _xkb_state = NULL;
+ }
keymap = xkb_map_new_from_string(xkb_context, map, XKB_KEYMAP_FORMAT_TEXT_V1, 0);
if(!keymap) {
LOGE("... Failed to get keymap from fd(%d)\n", fd);
munmap(map, size);
close(fd);
+
+ _xkb_state = xkb_state_new(keymap);
+ if(!_xkb_state)
+ {
+ LOGE("failed to allocate xkb state\n");
+ xkb_keymap_unref(keymap);
+ keymap = NULL;
+ return;
+ }
+
has_keymap = 1;
}
_input_add_key_event(unsigned int keycode, unsigned int state, unsigned int timestamp)
{
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;
- _xkb_state = xkb_state_new(keymap);
nsyms = xkb_key_get_syms(_xkb_state, keycode, &syms);
if(nsyms == 1) sym = syms[0];
void _xkb_context_shutdown(void)
{
- if(!xkb_context)
- return;
-
- xkb_context_unref(xkb_context);
- xkb_context = NULL;
+ if(xkb_context)
+ {
+ xkb_context_unref(xkb_context);
+ xkb_context = NULL;
+ }
+ if(_xkb_state)
+ {
+ xkb_state_unref(_xkb_state);
+ _xkb_state = NULL;
+ }
}
static void