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;
 

-- 


Reply via email to