elput: Add API function to support caching of existing keymap
authorChris Michael <cpmichael@osg.samsung.com>
Fri, 27 May 2016 13:17:46 +0000 (09:17 -0400)
committerChris Michael <cpmichael@osg.samsung.com>
Fri, 27 May 2016 13:17:46 +0000 (09:17 -0400)
@feature

Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
src/lib/elput/Elput.h
src/lib/elput/elput_evdev.c
src/lib/elput/elput_input.c
src/lib/elput/elput_private.h

index f64943f..4595f58 100644 (file)
@@ -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
index 79386af..8704a2e 100644 (file)
@@ -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);
      }
index 464f69f..1918216 100644 (file)
@@ -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;
+}
index 7a57e2f..cda235e 100644 (file)
@@ -249,6 +249,7 @@ struct _Elput_Manager
 
    struct
      {
+        struct xkb_keymap *keymap;
         struct xkb_context *context;
      } cached;