e_input: Fix build error due to deprecate
authorJihoon Kim <jihoon48.kim@samsung.com>
Wed, 21 Feb 2024 05:59:53 +0000 (14:59 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Wed, 21 Feb 2024 08:48:35 +0000 (17:48 +0900)
Change-Id: Ibe6f8d76945516c9271861e22964b561fa5a2f39
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/e_comp_wl_input.c
src/include/e_comp_wl.h

index a64fe78..d6b9c4c 100644 (file)
@@ -1293,6 +1293,94 @@ _e_comp_wl_input_keymap_fd_get(off_t size)
 }
 
 static void
+_e_comp_wl_keymap_update(struct xkb_keymap *keymap, const char *keymap_path)
+{
+   /* FIXME: will be deprecated after migration */
+   char *tmp;
+   xkb_mod_mask_t latched = 0, locked = 0, group = 0;
+
+   /* unreference any existing keymap */
+   if (e_comp_wl->xkb.keymap)
+     xkb_map_unref(e_comp_wl->xkb.keymap);
+
+   /* unmap any existing keyboard area */
+   if (e_comp_wl->xkb.area)
+     munmap(e_comp_wl->xkb.area, e_comp_wl->xkb.size);
+   if (e_comp_wl->xkb.fd >= 0) close(e_comp_wl->xkb.fd);
+
+   /* unreference any existing keyboard state */
+   if (e_comp_wl->xkb.state)
+     {
+        latched =
+           xkb_state_serialize_mods(e_comp_wl->xkb.state,
+                                    XKB_STATE_MODS_LATCHED);
+        locked =
+           xkb_state_serialize_mods(e_comp_wl->xkb.state,
+                                    XKB_STATE_MODS_LOCKED);
+        group =
+           xkb_state_serialize_layout(e_comp_wl->xkb.state,
+                                      XKB_STATE_LAYOUT_EFFECTIVE);
+        xkb_state_unref(e_comp_wl->xkb.state);
+     }
+
+   /* create a new xkb state */
+   e_comp_wl->xkb.state = xkb_state_new(keymap);
+
+   if (!e_comp_wl->xkb.state)
+     {
+        return;
+     }
+
+   if ((latched) || (locked) || (group))
+     xkb_state_update_mask(e_comp_wl->xkb.state, 0,
+                           latched, locked, 0, 0, group);
+
+   /* increment keymap reference */
+   e_comp_wl->xkb.keymap = keymap;
+
+   /* fetch updated modifiers */
+   e_comp_wl->kbd.mod_shift =
+      xkb_map_mod_get_index(keymap, XKB_MOD_NAME_SHIFT);
+   e_comp_wl->kbd.mod_caps =
+      xkb_map_mod_get_index(keymap, XKB_MOD_NAME_CAPS);
+   e_comp_wl->kbd.mod_ctrl =
+      xkb_map_mod_get_index(keymap, XKB_MOD_NAME_CTRL);
+   e_comp_wl->kbd.mod_alt =
+      xkb_map_mod_get_index(keymap, XKB_MOD_NAME_ALT);
+   e_comp_wl->kbd.mod_super =
+      xkb_map_mod_get_index(keymap, XKB_MOD_NAME_LOGO);
+
+   if (!(tmp = xkb_map_get_as_string(keymap)))
+     {
+        ERR("Could not get keymap string");
+        return;
+     }
+
+   e_comp_wl->xkb.size = strlen(tmp) + 1;
+   e_comp_wl->xkb.fd =
+      _e_comp_wl_input_keymap_fd_get(e_comp_wl->xkb.size);
+   if (e_comp_wl->xkb.fd < 0)
+     {
+        ERR("Could not create keymap file");
+        free(tmp);
+        return;
+     }
+
+   e_comp_wl->xkb.area =
+      mmap(NULL, e_comp_wl->xkb.size, (PROT_READ | PROT_WRITE),
+           MAP_SHARED, e_comp_wl->xkb.fd, 0);
+   if (e_comp_wl->xkb.area == MAP_FAILED)
+     {
+        ERR("Failed to mmap keymap area: %m");
+        free(tmp);
+        return;
+     }
+
+   strncpy(e_comp_wl->xkb.area, tmp, e_comp_wl->xkb.size);
+   free(tmp);
+}
+
+static void
 _e_comp_wl_input_keymap_update(struct xkb_keymap *keymap, const char *keymap_path)
 {
    char *tmp;
@@ -1382,6 +1470,8 @@ _e_comp_wl_input_keymap_update(struct xkb_keymap *keymap, const char *keymap_pat
    strncpy(e_comp_input_key->xkb.area, tmp, e_comp_input_key->xkb.size);
    free(tmp);
 
+   _e_comp_wl_keymap_update(keymap, keymap_path);
+
    /* send updated keymap */
    TRACE_INPUT_BEGIN(wl_keyboard_send_keymap_update);
    g_mutex_lock(&e_comp_wl->kbd.resource_mutex);
@@ -1414,6 +1504,9 @@ e_comp_wl_input_init(void)
    g_mutex_init(&e_comp_wl->kbd.repeat_delay_mutex);
    g_mutex_init(&e_comp_wl->kbd.repeat_rate_mutex);
 
+   g_mutex_init(&e_comp_wl->xkb.keymap_mutex);
+   g_mutex_init(&e_comp_wl->xkb.state_mutex);
+
    /* get default keyboard repeat delay from configuration */
    atomic_store(&e_comp_wl->kbd.repeat_delay, e_config->keyboard.repeat_delay);
    /* check for valid repeat_delay */
@@ -1547,6 +1640,23 @@ e_comp_wl_input_shutdown(void)
 
    wl_array_release(&e_comp_wl->kbd.routed_keys);
 
+   /* unmap any existing keyboard area */
+   if (e_comp_wl->xkb.area)
+     munmap(e_comp_wl->xkb.area, e_comp_wl->xkb.size);
+   if (e_comp_wl->xkb.fd >= 0) close(e_comp_wl->xkb.fd);
+
+   /* unreference any existing keyboard state */
+   if (e_comp_wl->xkb.state)
+     xkb_state_unref(e_comp_wl->xkb.state);
+
+   /* unreference any existing keymap */
+   if (e_comp_wl->xkb.keymap)
+     xkb_map_unref(e_comp_wl->xkb.keymap);
+
+   /* unreference any existing context */
+   if (e_comp_wl->xkb.context)
+     xkb_context_unref(e_comp_wl->xkb.context);
+
    e_comp_input_shutdown();
 
    /* destroy the global relative pointer resource */
@@ -1567,6 +1677,9 @@ e_comp_wl_input_shutdown(void)
    dont_set_e_input_keymap = EINA_FALSE;
    dont_use_xkb_cache = EINA_FALSE;
 
+   g_mutex_clear(&e_comp_wl->xkb.keymap_mutex);
+   g_mutex_clear(&e_comp_wl->xkb.state_mutex);
+
    g_mutex_clear(&e_comp_wl->kbd.keys_mutex);
    g_mutex_clear(&e_comp_wl->kbd.repeat_delay_mutex);
    g_mutex_clear(&e_comp_wl->kbd.repeat_rate_mutex);
@@ -2179,4 +2292,4 @@ e_comp_wl_input_keymap_init(void)
                               e_comp_wl_input_keymap_default_variant_get(),
                               e_comp_wl_input_keymap_default_options_get(),
                               ctx, map);
-}
\ No newline at end of file
+}
index 1785256..226408a 100644 (file)
@@ -344,7 +344,7 @@ struct _E_Comp_Wl_Data
         uint32_t edges;
      } resize;
 
-   EINA_DEPRECATED struct
+   struct
      {
         struct xkb_keymap *keymap;
         struct xkb_context *context;
@@ -354,7 +354,7 @@ struct _E_Comp_Wl_Data
         char *area;
         GMutex keymap_mutex;
         GMutex state_mutex;
-     } xkb;
+     } xkb; /* FIXME: will be deprecated after migration */
 
    struct
      {