devilhorns pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=20f418b8d7010aa3a4b9d174780a1dec8e76ef4e
commit 20f418b8d7010aa3a4b9d174780a1dec8e76ef4e Author: Chris Michael <[email protected]> Date: Fri May 27 09:17:46 2016 -0400 elput: Add API function to support caching of existing keymap @feature Signed-off-by: Chris Michael <[email protected]> --- src/lib/elput/Elput.h | 11 +++++++++++ src/lib/elput/elput_evdev.c | 3 ++- src/lib/elput/elput_input.c | 9 +++++++++ src/lib/elput/elput_private.h | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/lib/elput/Elput.h b/src/lib/elput/Elput.h index f64943f..4595f58 100644 --- a/src/lib/elput/Elput.h +++ b/src/lib/elput/Elput.h @@ -390,6 +390,17 @@ EAPI Eina_Bool elput_input_key_remap_set(Elput_Manager *manager, int *from_keys, */ EAPI void elput_input_keyboard_cached_context_set(Elput_Manager *manager, void *context); +/** + * Set a cached keymap to be used for keyboards + * + * @param manager + * @param keymap + * + * @ingroup Elput_Input_Group + * @since 1.18 + */ +EAPI void elput_input_keyboard_cached_keymap_set(Elput_Manager *manager, void *keymap); + # endif # undef EAPI diff --git a/src/lib/elput/elput_evdev.c b/src/lib/elput/elput_evdev.c index 79386af..8704a2e 100644 --- a/src/lib/elput/elput_evdev.c +++ b/src/lib/elput/elput_evdev.c @@ -165,9 +165,10 @@ _keyboard_info_destroy(Elput_Keyboard_Info *info, Eina_Bool external) { if (--info->refs > 0) return; + xkb_keymap_unref(info->keymap.map); + if (!external) { - xkb_keymap_unref(info->keymap.map); if (info->keymap.area) munmap(info->keymap.area, info->keymap.size); if (info->keymap.fd >= 0) close(info->keymap.fd); } diff --git a/src/lib/elput/elput_input.c b/src/lib/elput/elput_input.c index 464f69f..1918216 100644 --- a/src/lib/elput/elput_input.c +++ b/src/lib/elput/elput_input.c @@ -585,3 +585,12 @@ elput_input_keyboard_cached_context_set(Elput_Manager *manager, void *context) if ((context) && (manager->cached.context == context)) return; manager->cached.context = context; } + +EAPI void +elput_input_keyboard_cached_keymap_set(Elput_Manager *manager, void *keymap) +{ + EINA_SAFETY_ON_NULL_RETURN(manager); + + if ((keymap) && (manager->cached.keymap == keymap)) return; + manager->cached.keymap = keymap; +} diff --git a/src/lib/elput/elput_private.h b/src/lib/elput/elput_private.h index 7a57e2f..cda235e 100644 --- a/src/lib/elput/elput_private.h +++ b/src/lib/elput/elput_private.h @@ -249,6 +249,7 @@ struct _Elput_Manager struct { + struct xkb_keymap *keymap; struct xkb_context *context; } cached; --
