#include "e_input_intern.h"
#include "e_pointer_intern.h"
#include "e_comp_object_intern.h"
+#include "e_comp_input_intern.h"
#include <sys/mman.h>
#include <fcntl.h>
/* send current keymap */
TRACE_INPUT_BEGIN(wl_keyboard_send_keymap);
wl_keyboard_send_keymap(res, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
- e_comp_wl->xkb.fd,
- e_comp_wl->xkb.size);
+ e_comp_input_key->xkb.fd,
+ e_comp_input_key->xkb.size);
TRACE_INPUT_END();
/* if the client owns the focused surface, we need to send an enter */
Eina_List *l;
/* unreference any existing keymap */
- if (e_comp_wl->xkb.keymap)
- xkb_map_unref(e_comp_wl->xkb.keymap);
+ if (e_comp_input_key->xkb.keymap)
+ xkb_map_unref(e_comp_input_key->xkb.keymap);
/* unmap any existing keyboard area */
- if (e_comp_wl->xkb.area)
- munmap(e_comp_wl->xkb.area, e_comp_wl->xkb.size);
- if (e_comp_wl->xkb.fd >= 0) close(e_comp_wl->xkb.fd);
+ if (e_comp_input_key->xkb.area)
+ munmap(e_comp_input_key->xkb.area, e_comp_input_key->xkb.size);
+ if (e_comp_input_key->xkb.fd >= 0) close(e_comp_input_key->xkb.fd);
/* unreference any existing keyboard state */
- if (e_comp_wl->xkb.state)
+ if (e_comp_input_key->xkb.state)
{
latched =
- xkb_state_serialize_mods(e_comp_wl->xkb.state,
+ xkb_state_serialize_mods(e_comp_input_key->xkb.state,
XKB_STATE_MODS_LATCHED);
locked =
- xkb_state_serialize_mods(e_comp_wl->xkb.state,
+ xkb_state_serialize_mods(e_comp_input_key->xkb.state,
XKB_STATE_MODS_LOCKED);
group =
- xkb_state_serialize_layout(e_comp_wl->xkb.state,
+ xkb_state_serialize_layout(e_comp_input_key->xkb.state,
XKB_STATE_LAYOUT_EFFECTIVE);
- xkb_state_unref(e_comp_wl->xkb.state);
+ xkb_state_unref(e_comp_input_key->xkb.state);
}
/* create a new xkb state */
- e_comp_wl->xkb.state = xkb_state_new(keymap);
+ e_comp_input_key->xkb.state = xkb_state_new(keymap);
- if (!e_comp_wl->xkb.state)
+ if (!e_comp_input_key->xkb.state)
{
return;
}
if ((latched) || (locked) || (group))
- xkb_state_update_mask(e_comp_wl->xkb.state, 0,
+ xkb_state_update_mask(e_comp_input_key->xkb.state, 0,
latched, locked, 0, 0, group);
/* increment keymap reference */
- e_comp_wl->xkb.keymap = keymap;
+ e_comp_input_key->xkb.keymap = keymap;
/* fetch updated modifiers */
e_comp_wl->kbd.mod_shift =
return;
}
- e_comp_wl->xkb.size = strlen(tmp) + 1;
- e_comp_wl->xkb.fd =
- _e_comp_wl_input_keymap_fd_get(e_comp_wl->xkb.size);
- if (e_comp_wl->xkb.fd < 0)
+ e_comp_input_key->xkb.size = strlen(tmp) + 1;
+ e_comp_input_key->xkb.fd =
+ _e_comp_wl_input_keymap_fd_get(e_comp_input_key->xkb.size);
+ if (e_comp_input_key->xkb.fd < 0)
{
ERR("Could not create keymap file");
free(tmp);
_e_comp_wl_input_keymap_cache_create(keymap_path, tmp);
- e_comp_wl->xkb.area =
- mmap(NULL, e_comp_wl->xkb.size, (PROT_READ | PROT_WRITE),
- MAP_SHARED, e_comp_wl->xkb.fd, 0);
- if (e_comp_wl->xkb.area == MAP_FAILED)
+ e_comp_input_key->xkb.area =
+ mmap(NULL, e_comp_input_key->xkb.size, (PROT_READ | PROT_WRITE),
+ MAP_SHARED, e_comp_input_key->xkb.fd, 0);
+ if (e_comp_input_key->xkb.area == MAP_FAILED)
{
ERR("Failed to mmap keymap area: %m");
free(tmp);
return;
}
- strncpy(e_comp_wl->xkb.area, tmp, e_comp_wl->xkb.size);
+ strncpy(e_comp_input_key->xkb.area, tmp, e_comp_input_key->xkb.size);
free(tmp);
/* send updated keymap */
g_mutex_lock(&e_comp_wl->kbd.resource_mutex);
EINA_LIST_FOREACH(e_comp_wl->kbd.resources, l, res)
wl_keyboard_send_keymap(res, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
- e_comp_wl->xkb.fd,
- e_comp_wl->xkb.size);
+ e_comp_input_key->xkb.fd,
+ e_comp_input_key->xkb.size);
g_mutex_unlock(&e_comp_wl->kbd.resource_mutex);
TRACE_INPUT_END();
if (!e_comp_wl->seat.name)
e_comp_wl->seat.name = "default";
- e_comp_wl->xkb.fd = -1;
+ e_comp_input_init();
+
dont_set_e_input_keymap = getenv("NO_E_INPUT_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE;
dont_use_xkb_cache = getenv("NO_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE;
wl_array_release(&e_comp_wl->kbd.routed_keys);
- /* unmap any existing keyboard area */
- if (e_comp_wl->xkb.area)
- munmap(e_comp_wl->xkb.area, e_comp_wl->xkb.size);
- if (e_comp_wl->xkb.fd >= 0) close(e_comp_wl->xkb.fd);
-
- /* unreference any existing keyboard state */
- if (e_comp_wl->xkb.state)
- xkb_state_unref(e_comp_wl->xkb.state);
-
- /* unreference any existing keymap */
- if (e_comp_wl->xkb.keymap)
- xkb_map_unref(e_comp_wl->xkb.keymap);
-
- /* unreference any existing context */
- if (e_comp_wl->xkb.context)
- xkb_context_unref(e_comp_wl->xkb.context);
+ e_comp_input_shutdown();
/* destroy the global relative pointer resource */
if (e_comp_wl->relative_ptr.global)
xkb_mod_mask_t mod_depressed, mod_latched, mod_locked;
xkb_layout_index_t mod_group;
- mod = xkb_state_serialize_mods(e_comp_wl->xkb.state,
+ mod = xkb_state_serialize_mods(e_comp_input_key->xkb.state,
XKB_STATE_DEPRESSED);
mod_depressed = atomic_load(&e_comp_wl->kbd.mod_depressed);
changed |= mod != mod_depressed;
atomic_store(&e_comp_wl->kbd.mod_depressed, mod);
- mod = xkb_state_serialize_mods(e_comp_wl->xkb.state,
+ mod = xkb_state_serialize_mods(e_comp_input_key->xkb.state,
XKB_STATE_MODS_LATCHED);
mod_latched = atomic_load(&e_comp_wl->kbd.mod_latched);
changed |= mod != mod_latched;
atomic_store(&e_comp_wl->kbd.mod_latched, mod);
- mod = xkb_state_serialize_mods(e_comp_wl->xkb.state,
+ mod = xkb_state_serialize_mods(e_comp_input_key->xkb.state,
XKB_STATE_MODS_LOCKED);
mod_locked = atomic_load(&e_comp_wl->kbd.mod_locked);
changed |= mod != mod_locked;
atomic_store(&e_comp_wl->kbd.mod_locked, mod);
- grp = xkb_state_serialize_layout(e_comp_wl->xkb.state,
+ grp = xkb_state_serialize_layout(e_comp_input_key->xkb.state,
XKB_STATE_LAYOUT_EFFECTIVE);
mod_group = atomic_load(&e_comp_wl->kbd.mod_group);
changed |= grp != mod_group;
{
enum xkb_key_direction dir;
- if (!e_comp_wl->xkb.state)
+ if (!e_comp_input_key->xkb.state)
{
return;
}
if (pressed) dir = XKB_KEY_DOWN;
else dir = XKB_KEY_UP;
- atomic_store(&e_comp_wl->kbd.mod_changed, xkb_state_update_key(e_comp_wl->xkb.state, keycode + 8, dir));
+ atomic_store(&e_comp_wl->kbd.mod_changed, xkb_state_update_key(e_comp_input_key->xkb.state, keycode + 8, dir));
e_comp_wl_input_keyboard_modifiers_update();
}
if (dflt_ctx && dflt_map) use_dflt_xkb = EINA_TRUE;
/* unreference any existing context */
- if (e_comp_wl->xkb.context)
- xkb_context_unref(e_comp_wl->xkb.context);
+ if (e_comp_input_key->xkb.context)
+ xkb_context_unref(e_comp_input_key->xkb.context);
/* create a new xkb context */
- if (use_dflt_xkb) e_comp_wl->xkb.context = dflt_ctx;
- else e_comp_wl->xkb.context = xkb_context_new(0);
+ if (use_dflt_xkb) e_comp_input_key->xkb.context = dflt_ctx;
+ else e_comp_input_key->xkb.context = xkb_context_new(0);
- if (!e_comp_wl->xkb.context)
+ if (!e_comp_input_key->xkb.context)
{
TRACE_INPUT_END();
return;
}
if (e_config->xkb.use_cache && !dont_set_e_input_keymap)
- e_input_device_keyboard_cached_context_set(e_comp_wl->xkb.context);
+ e_input_device_keyboard_cached_context_set(e_comp_input_key->xkb.context);
/* assemble xkb_rule_names so we can fetch keymap */
memset(&names, 0, sizeof(names));
}
}
else
- keymap = e_comp_wl_input_keymap_compile(e_comp_wl->xkb.context, names, &keymap_path);
+ keymap = e_comp_wl_input_keymap_compile(e_comp_input_key->xkb.context, names, &keymap_path);
TRACE_INPUT_END();
/* update compositor keymap */
EINA_SAFETY_ON_NULL_RETURN_VAL(name, 0);
EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, 0);
- keymap = e_comp_wl->xkb.keymap;
+ keymap = e_comp_input_key->xkb.keymap;
EINA_SAFETY_ON_NULL_GOTO(keymap, finish);
keysym = xkb_keysym_from_name(name, XKB_KEYSYM_NO_FLAGS);
EINA_SAFETY_ON_FALSE_RETURN_VAL(8 <= keycode, NULL);
EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, NULL);
- if (!e_comp_wl->xkb.state)
+ if (!e_comp_input_key->xkb.state)
{
return NULL;
}
- state = e_comp_wl->xkb.state;
+ state = e_comp_input_key->xkb.state;
sym = xkb_state_key_get_one_sym(state, keycode);