summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Michael <cpmichael@osg.samsung.com>2016-05-27 09:17:46 -0400
committerChris Michael <cpmichael@osg.samsung.com>2016-05-27 09:17:46 -0400
commit20f418b8d7010aa3a4b9d174780a1dec8e76ef4e (patch)
tree76d5321f67efeefe1affd91bc5270a523f2e460f
parent65cfdaa3ddf17f0d5b3d8750e5ae2da026098b20 (diff)
downloadefl-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.h11
-rw-r--r--src/lib/elput/elput_evdev.c3
-rw-r--r--src/lib/elput/elput_input.c9
-rw-r--r--src/lib/elput/elput_private.h1
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;