diff options
author | Chris Michael <cpmichael@osg.samsung.com> | 2016-05-27 09:17:46 -0400 |
---|---|---|
committer | Chris Michael <cpmichael@osg.samsung.com> | 2016-05-27 09:17:46 -0400 |
commit | 20f418b8d7010aa3a4b9d174780a1dec8e76ef4e (patch) | |
tree | 76d5321f67efeefe1affd91bc5270a523f2e460f | |
parent | 65cfdaa3ddf17f0d5b3d8750e5ae2da026098b20 (diff) | |
download | efl-20f418b8d7010aa3a4b9d174780a1dec8e76ef4e.tar.gz |
elput: Add API function to support caching of existing keymap
@feature
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
-rw-r--r-- | src/lib/elput/Elput.h | 11 | ||||
-rw-r--r-- | src/lib/elput/elput_evdev.c | 3 | ||||
-rw-r--r-- | src/lib/elput/elput_input.c | 9 | ||||
-rw-r--r-- | src/lib/elput/elput_private.h | 1 |
4 files changed, 23 insertions, 1 deletions
diff --git a/src/lib/elput/Elput.h b/src/lib/elput/Elput.h index f64943f853..4595f58e61 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 79386af902..8704a2ee9b 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 464f69f226..1918216565 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 7a57e2f159..cda235e49d 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; |