Move the xkb structure of E_Comp_Wl_Data to e_comp_input_intern.h 46/306246/1
authorInhong Han <inhong1.han@samsung.com>
Wed, 7 Feb 2024 10:08:36 +0000 (19:08 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 19 Feb 2024 06:32:41 +0000 (15:32 +0900)
Change-Id: I683440aeaf392efca8532c60b2213916d0891195

src/bin/Makefile.mk
src/bin/e_comp_input.c [new file with mode: 0644]
src/bin/e_comp_input_intern.h [new file with mode: 0644]
src/bin/e_comp_wl.c
src/bin/e_comp_wl_input.c
src/bin/e_devicemgr_input.c
src/bin/e_devicemgr_inputgen.c
src/bin/e_info_server.c
src/bin/e_keyrouter.c
src/include/e_comp_wl.h

index 851d087..aa6254c 100644 (file)
@@ -243,7 +243,8 @@ src/bin/e_compositor.c \
 src/bin/e_blender.c \
 src/bin/e_devicemgr_keyboard_grab.c \
 src/bin/e_subsurface_watcher.c \
-src/bin/e_tbm_gbm_server.c
+src/bin/e_tbm_gbm_server.c \
+src/bin/e_comp_input.c
 
 src_bin_enlightenment_CPPFLAGS = $(E_CPPFLAGS) -DEFL_BETA_API_SUPPORT -DEFL_EO_API_SUPPORT -DE_LOGGING=2 @WAYLAND_CFLAGS@ $(TTRACE_CFLAGS) $(DLOG_CFLAGS) $(PIXMAN_CFLAGS) $(POLICY_CFLAGS) $(EGL_CFLAGS)
 if HAVE_LIBGOMP
diff --git a/src/bin/e_comp_input.c b/src/bin/e_comp_input.c
new file mode 100644 (file)
index 0000000..ba66fb5
--- /dev/null
@@ -0,0 +1,45 @@
+#include "e_comp_input_intern.h"
+#include "e_input_log.h"
+
+#include <sys/mman.h>
+
+EINTERN E_Comp_Input_Key_Data *e_comp_input_key = NULL;
+
+EINTERN void
+e_comp_input_init(void)
+{
+   e_comp_input_key = E_NEW(E_Comp_Input_Key_Data, 1);
+   if (!e_comp_input_key)
+     {
+        ERR("Failed to allocate memory for input key data\n");
+        return;
+     }
+
+   e_comp_input_key->xkb.fd = -1;
+}
+
+EINTERN void
+e_comp_input_shutdown(void)
+{
+   if (e_comp_input_key)
+     {
+        /* unmap any existing keyboard area */
+        if (e_comp_input_key->xkb.area)
+          munmap(e_comp_input_key->xkb.area, e_comp_input_key->xkb.size);
+        if (e_comp_input_key->xkb.fd >= 0) close(e_comp_input_key->xkb.fd);
+
+        /* unreference any existing keyboard state */
+        if (e_comp_input_key->xkb.state)
+          xkb_state_unref(e_comp_input_key->xkb.state);
+
+        /* unreference any existing keymap */
+        if (e_comp_input_key->xkb.keymap)
+          xkb_map_unref(e_comp_input_key->xkb.keymap);
+
+        /* unreference any existing context */
+        if (e_comp_input_key->xkb.context)
+          xkb_context_unref(e_comp_input_key->xkb.context);
+
+        E_FREE(e_comp_input_key);
+     }
+}
\ No newline at end of file
diff --git a/src/bin/e_comp_input_intern.h b/src/bin/e_comp_input_intern.h
new file mode 100644 (file)
index 0000000..da73b4a
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef E_COMP_INPUT_INTERN_H
+#define E_COMP_INPUT_INTERN_H
+
+#include "e_intern.h"
+#include <xkbcommon/xkbcommon.h>
+
+typedef struct _E_Comp_Input_Key_Data E_Comp_Input_Key_Data;
+
+struct _E_Comp_Input_Key_Data
+{
+   struct
+     {
+        struct xkb_keymap *keymap;
+        struct xkb_context *context;
+        struct xkb_state *state;
+        int fd;
+        size_t size;
+        char *area;
+     } xkb;
+};
+
+extern EINTERN E_Comp_Input_Key_Data *e_comp_input_key;
+
+EINTERN void e_comp_input_init(void);
+EINTERN void e_comp_input_shutdown(void);
+
+#endif /* E_COMP_INPUT_INTERN_H */
index df04d30..b46d297 100644 (file)
@@ -36,6 +36,7 @@
 #include "e_desk_intern.h"
 #include "e_zone_intern.h"
 #include "e_hints_intern.h"
+#include "e_comp_input_intern.h"
 
 #include <tizen-extension-server-protocol.h>
 #include <relative-pointer-unstable-v1-server-protocol.h>
@@ -4723,7 +4724,7 @@ e_comp_wl_key_cancel(E_Client *ec, int keycode, Ecore_Device *dev, uint32_t time
    EINA_SAFETY_ON_NULL_RETURN_VAL(ec->comp_data, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, EINA_FALSE);
 
-   keymap = e_comp_wl->xkb.keymap;
+   keymap = e_comp_input_key->xkb.keymap;
    EINA_SAFETY_ON_NULL_RETURN_VAL(keymap, EINA_FALSE);
 
    struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
index 0018173..a64fe78 100644 (file)
@@ -4,6 +4,7 @@
 #include "e_input_intern.h"
 #include "e_pointer_intern.h"
 #include "e_comp_object_intern.h"
+#include "e_comp_input_intern.h"
 
 #include <sys/mman.h>
 #include <fcntl.h>
@@ -413,8 +414,8 @@ _e_comp_wl_input_cb_keyboard_get(struct wl_client *client, struct wl_resource *r
    /* send current keymap */
    TRACE_INPUT_BEGIN(wl_keyboard_send_keymap);
    wl_keyboard_send_keymap(res, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
-                           e_comp_wl->xkb.fd,
-                           e_comp_wl->xkb.size);
+                           e_comp_input_key->xkb.fd,
+                           e_comp_input_key->xkb.size);
    TRACE_INPUT_END();
 
    /* if the client owns the focused surface, we need to send an enter */
@@ -1300,43 +1301,43 @@ _e_comp_wl_input_keymap_update(struct xkb_keymap *keymap, const char *keymap_pat
    Eina_List *l;
 
    /* unreference any existing keymap */
-   if (e_comp_wl->xkb.keymap)
-     xkb_map_unref(e_comp_wl->xkb.keymap);
+   if (e_comp_input_key->xkb.keymap)
+     xkb_map_unref(e_comp_input_key->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);
+   if (e_comp_input_key->xkb.area)
+     munmap(e_comp_input_key->xkb.area, e_comp_input_key->xkb.size);
+   if (e_comp_input_key->xkb.fd >= 0) close(e_comp_input_key->xkb.fd);
 
    /* unreference any existing keyboard state */
-   if (e_comp_wl->xkb.state)
+   if (e_comp_input_key->xkb.state)
      {
         latched =
-          xkb_state_serialize_mods(e_comp_wl->xkb.state,
+          xkb_state_serialize_mods(e_comp_input_key->xkb.state,
                                    XKB_STATE_MODS_LATCHED);
         locked =
-          xkb_state_serialize_mods(e_comp_wl->xkb.state,
+          xkb_state_serialize_mods(e_comp_input_key->xkb.state,
                                    XKB_STATE_MODS_LOCKED);
         group =
-          xkb_state_serialize_layout(e_comp_wl->xkb.state,
+          xkb_state_serialize_layout(e_comp_input_key->xkb.state,
                                      XKB_STATE_LAYOUT_EFFECTIVE);
-        xkb_state_unref(e_comp_wl->xkb.state);
+        xkb_state_unref(e_comp_input_key->xkb.state);
      }
 
    /* create a new xkb state */
-   e_comp_wl->xkb.state = xkb_state_new(keymap);
+   e_comp_input_key->xkb.state = xkb_state_new(keymap);
 
-   if (!e_comp_wl->xkb.state)
+   if (!e_comp_input_key->xkb.state)
      {
         return;
      }
 
    if ((latched) || (locked) || (group))
-     xkb_state_update_mask(e_comp_wl->xkb.state, 0,
+     xkb_state_update_mask(e_comp_input_key->xkb.state, 0,
                            latched, locked, 0, 0, group);
 
    /* increment keymap reference */
-   e_comp_wl->xkb.keymap = keymap;
+   e_comp_input_key->xkb.keymap = keymap;
 
    /* fetch updated modifiers */
    e_comp_wl->kbd.mod_shift =
@@ -1356,10 +1357,10 @@ _e_comp_wl_input_keymap_update(struct xkb_keymap *keymap, const char *keymap_pat
         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)
+   e_comp_input_key->xkb.size = strlen(tmp) + 1;
+   e_comp_input_key->xkb.fd =
+     _e_comp_wl_input_keymap_fd_get(e_comp_input_key->xkb.size);
+   if (e_comp_input_key->xkb.fd < 0)
      {
         ERR("Could not create keymap file");
         free(tmp);
@@ -1368,17 +1369,17 @@ _e_comp_wl_input_keymap_update(struct xkb_keymap *keymap, const char *keymap_pat
 
    _e_comp_wl_input_keymap_cache_create(keymap_path, tmp);
 
-   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)
+   e_comp_input_key->xkb.area =
+     mmap(NULL, e_comp_input_key->xkb.size, (PROT_READ | PROT_WRITE),
+          MAP_SHARED, e_comp_input_key->xkb.fd, 0);
+   if (e_comp_input_key->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);
+   strncpy(e_comp_input_key->xkb.area, tmp, e_comp_input_key->xkb.size);
    free(tmp);
 
    /* send updated keymap */
@@ -1386,8 +1387,8 @@ _e_comp_wl_input_keymap_update(struct xkb_keymap *keymap, const char *keymap_pat
    g_mutex_lock(&e_comp_wl->kbd.resource_mutex);
    EINA_LIST_FOREACH(e_comp_wl->kbd.resources, l, res)
      wl_keyboard_send_keymap(res, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
-                             e_comp_wl->xkb.fd,
-                             e_comp_wl->xkb.size);
+                             e_comp_input_key->xkb.fd,
+                             e_comp_input_key->xkb.size);
    g_mutex_unlock(&e_comp_wl->kbd.resource_mutex);
    TRACE_INPUT_END();
 
@@ -1402,7 +1403,8 @@ e_comp_wl_input_init(void)
    if (!e_comp_wl->seat.name)
      e_comp_wl->seat.name = "default";
 
-   e_comp_wl->xkb.fd = -1;
+   e_comp_input_init();
+
    dont_set_e_input_keymap = getenv("NO_E_INPUT_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE;
    dont_use_xkb_cache = getenv("NO_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE;
 
@@ -1545,22 +1547,7 @@ 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 */
    if (e_comp_wl->relative_ptr.global)
@@ -1616,26 +1603,26 @@ e_comp_wl_input_keyboard_modifiers_serialize(void)
    xkb_mod_mask_t mod_depressed, mod_latched, mod_locked;
    xkb_layout_index_t mod_group;
 
-   mod = xkb_state_serialize_mods(e_comp_wl->xkb.state,
+   mod = xkb_state_serialize_mods(e_comp_input_key->xkb.state,
                               XKB_STATE_DEPRESSED);
    mod_depressed = atomic_load(&e_comp_wl->kbd.mod_depressed);
    changed |= mod != mod_depressed;
    atomic_store(&e_comp_wl->kbd.mod_depressed, mod);
 
-   mod = xkb_state_serialize_mods(e_comp_wl->xkb.state,
+   mod = xkb_state_serialize_mods(e_comp_input_key->xkb.state,
                               XKB_STATE_MODS_LATCHED);
 
    mod_latched = atomic_load(&e_comp_wl->kbd.mod_latched);
    changed |= mod != mod_latched;
    atomic_store(&e_comp_wl->kbd.mod_latched, mod);
 
-   mod = xkb_state_serialize_mods(e_comp_wl->xkb.state,
+   mod = xkb_state_serialize_mods(e_comp_input_key->xkb.state,
                               XKB_STATE_MODS_LOCKED);
    mod_locked = atomic_load(&e_comp_wl->kbd.mod_locked);
    changed |= mod != mod_locked;
    atomic_store(&e_comp_wl->kbd.mod_locked, mod);
 
-   grp = xkb_state_serialize_layout(e_comp_wl->xkb.state,
+   grp = xkb_state_serialize_layout(e_comp_input_key->xkb.state,
                                 XKB_STATE_LAYOUT_EFFECTIVE);
    mod_group = atomic_load(&e_comp_wl->kbd.mod_group);
    changed |= grp != mod_group;
@@ -1677,7 +1664,7 @@ e_comp_wl_input_keyboard_state_update(uint32_t keycode, Eina_Bool pressed)
 {
    enum xkb_key_direction dir;
 
-   if (!e_comp_wl->xkb.state)
+   if (!e_comp_input_key->xkb.state)
      {
         return;
      }
@@ -1685,7 +1672,7 @@ e_comp_wl_input_keyboard_state_update(uint32_t keycode, Eina_Bool pressed)
    if (pressed) dir = XKB_KEY_DOWN;
    else dir = XKB_KEY_UP;
 
-   atomic_store(&e_comp_wl->kbd.mod_changed, xkb_state_update_key(e_comp_wl->xkb.state, keycode + 8, dir));
+   atomic_store(&e_comp_wl->kbd.mod_changed, xkb_state_update_key(e_comp_input_key->xkb.state, keycode + 8, dir));
 
    e_comp_wl_input_keyboard_modifiers_update();
 }
@@ -1807,21 +1794,21 @@ e_comp_wl_input_keymap_set(const char *rules, const char *model, const char *lay
    if (dflt_ctx && dflt_map) use_dflt_xkb = EINA_TRUE;
 
    /* unreference any existing context */
-   if (e_comp_wl->xkb.context)
-     xkb_context_unref(e_comp_wl->xkb.context);
+   if (e_comp_input_key->xkb.context)
+     xkb_context_unref(e_comp_input_key->xkb.context);
 
    /* create a new xkb context */
-   if (use_dflt_xkb) e_comp_wl->xkb.context = dflt_ctx;
-   else e_comp_wl->xkb.context = xkb_context_new(0);
+   if (use_dflt_xkb) e_comp_input_key->xkb.context = dflt_ctx;
+   else e_comp_input_key->xkb.context = xkb_context_new(0);
 
-   if (!e_comp_wl->xkb.context)
+   if (!e_comp_input_key->xkb.context)
      {
         TRACE_INPUT_END();
         return;
      }
 
    if (e_config->xkb.use_cache && !dont_set_e_input_keymap)
-     e_input_device_keyboard_cached_context_set(e_comp_wl->xkb.context);
+     e_input_device_keyboard_cached_context_set(e_comp_input_key->xkb.context);
 
    /* assemble xkb_rule_names so we can fetch keymap */
    memset(&names, 0, sizeof(names));
@@ -1868,7 +1855,7 @@ e_comp_wl_input_keymap_set(const char *rules, const char *model, const char *lay
           }
      }
    else
-     keymap = e_comp_wl_input_keymap_compile(e_comp_wl->xkb.context, names, &keymap_path);
+     keymap = e_comp_wl_input_keymap_compile(e_comp_input_key->xkb.context, names, &keymap_path);
    TRACE_INPUT_END();
 
    /* update compositor keymap */
@@ -2057,7 +2044,7 @@ e_comp_wl_input_keymap_keyname_to_keycode(const char * name)
    EINA_SAFETY_ON_NULL_RETURN_VAL(name, 0);
    EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, 0);
 
-   keymap = e_comp_wl->xkb.keymap;
+   keymap = e_comp_input_key->xkb.keymap;
    EINA_SAFETY_ON_NULL_GOTO(keymap, finish);
 
    keysym = xkb_keysym_from_name(name, XKB_KEYSYM_NO_FLAGS);
@@ -2094,12 +2081,12 @@ e_comp_wl_input_keymap_keycode_to_keyname(int keycode)
 
    EINA_SAFETY_ON_FALSE_RETURN_VAL(8 <= keycode, NULL);
    EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, NULL);
-   if (!e_comp_wl->xkb.state)
+   if (!e_comp_input_key->xkb.state)
      {
         return NULL;
      }
 
-   state = e_comp_wl->xkb.state;
+   state = e_comp_input_key->xkb.state;
 
    sym = xkb_state_key_get_one_sym(state, keycode);
 
index 538e5d1..fc4c5ae 100644 (file)
@@ -5,6 +5,7 @@
 #include "e_input_event.h"
 #include "e_comp_wl_intern.h"
 #include "e_utils_intern.h"
+#include "e_comp_input_intern.h"
 
 #include <tizen-extension-server-protocol.h>
 
@@ -162,7 +163,7 @@ _e_devicemgr_input_mouse_button_remap(Ecore_Event_Mouse_Button *ev, Eina_Bool pr
    E_Keyrouter_Event_Data *key_data;
    struct xkb_keymap *keymap = NULL;
 
-   keymap = e_comp_wl->xkb.keymap;
+   keymap = e_comp_input_key->xkb.keymap;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(keymap, ECORE_CALLBACK_PASS_ON);
    EINA_SAFETY_ON_NULL_RETURN_VAL(ev, ECORE_CALLBACK_PASS_ON);
index deb5fb1..c47ada7 100644 (file)
@@ -3,6 +3,7 @@
 #include "e_input_intern.h"
 #include "e_comp_wl_input_intern.h"
 #include "e_utils_intern.h"
+#include "e_comp_input_intern.h"
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -1085,7 +1086,7 @@ e_devicemgr_inputgen_generate_key(struct wl_client *client, struct wl_resource *
         return TIZEN_INPUT_DEVICE_MANAGER_ERROR_INVALID_PARAMETER;
      }
 
-   if (!e_comp_wl->xkb.keymap)
+   if (!e_comp_input_key->xkb.keymap)
      {
         DMWRN("keymap is not ready\n");
         return TIZEN_INPUT_DEVICE_MANAGER_ERROR_INVALID_PARAMETER;
index 2455d0a..7e1183f 100644 (file)
@@ -36,6 +36,7 @@
 #include "e_main_intern.h"
 #include "e_dbus_conn_intern.h"
 #include "e_hints_intern.h"
+#include "e_comp_input_intern.h"
 
 #include <tbm_bufmgr.h>
 #include <tbm_surface.h>
@@ -3543,7 +3544,7 @@ _e_info_server_cb_keymap_info_get(const Eldbus_Service_Interface *iface EINA_UNU
 {
    Eldbus_Message *reply = eldbus_message_method_return_new(msg);
 
-   eldbus_message_arguments_append(reply, "hi", e_comp_wl->xkb.fd, e_comp_wl->xkb.size);
+   eldbus_message_arguments_append(reply, "hi", e_comp_input_key->xkb.fd, e_comp_input_key->xkb.size);
    return reply;
 }
 
index c60ab38..ad530e0 100644 (file)
@@ -4,6 +4,7 @@
 #include "e_comp_wl_input_intern.h"
 #include "e_comp_wl_intern.h"
 #include "e_info_server_intern.h"
+#include "e_comp_input_intern.h"
 
 #include <tizen-extension-server-protocol.h>
 #include <glib.h>
@@ -438,7 +439,7 @@ e_keyrouter_query_tizen_key_table(void)
           {
              if (krt->HardKeys[data->keycode].repeat == EINA_FALSE)
                {
-                  res = xkb_keymap_key_set_repeats(e_comp_wl->xkb.keymap, data->keycode, 0);
+                  res = xkb_keymap_key_set_repeats(e_comp_input_key->xkb.keymap, data->keycode, 0);
                   if (!res)
                     {
                        KLWRN("Failed to set repeat key(%d), value(%d)", data->keycode, 0);
@@ -454,7 +455,7 @@ e_keyrouter_query_tizen_key_table(void)
         KLINF("Server create a new cache file: %s", e_comp_wl_input_keymap_path_get(names));
         res = unlink(e_comp_wl_input_keymap_path_get(names));
 
-        e_comp_wl_input_keymap_set(NULL, NULL, NULL, NULL, NULL, xkb_context_ref(e_comp_wl->xkb.context), xkb_keymap_ref(e_comp_wl->xkb.keymap));
+        e_comp_wl_input_keymap_set(NULL, NULL, NULL, NULL, NULL, xkb_context_ref(e_comp_input_key->xkb.context), xkb_keymap_ref(e_comp_input_key->xkb.keymap));
      }
    else
      KLINF("Currently cache file is exist. Do not change it.");
index d875bb5..1785256 100644 (file)
@@ -344,7 +344,7 @@ struct _E_Comp_Wl_Data
         uint32_t edges;
      } resize;
 
-   struct
+   EINA_DEPRECATED struct
      {
         struct xkb_keymap *keymap;
         struct xkb_context *context;
@@ -352,8 +352,8 @@ struct _E_Comp_Wl_Data
         int fd;
         size_t size;
         char *area;
-        EINA_DEPRECATED GMutex keymap_mutex;
-        EINA_DEPRECATED GMutex state_mutex;
+        GMutex keymap_mutex;
+        GMutex state_mutex;
      } xkb;
 
    struct